Adding neutron api v2.0 security group/rules handlers 66/7366/2
authorBrent Salisbury <brent.salisbury@gmail.com>
Fri, 23 May 2014 18:33:50 +0000 (14:33 -0400)
committerBrent Salisbury <brent.salisbury@gmail.com>
Tue, 27 May 2014 03:31:20 +0000 (23:31 -0400)
Patch3:
-Verified with merged patches and rolled back
whitespace formatting on Activator and Tenantmanager.

-Removed the comments Sam wanted removed.

-Only dependancy is commit 7410 that registers
the service in networkconfig.neutron.
https://git.opendaylight.org/gerrit/#/c/7410/

Patch2: Pulled the TenantManager adds since it was just
for a usage preview. Added NeutronPortSecurityHandler
parent handler for NeutronSecurityGroup and
NeutronSecurityRule. Still depends on NBAPI merges and
OF merges.

Change-Id: Idbdfcd4e0accba1f98951d052318a1aba9a337f8
Signed-off-by: Brent Salisbury <brent.salisbury@gmail.com>
neutron/src/main/java/org/opendaylight/ovsdb/neutron/Activator.java
neutron/src/main/java/org/opendaylight/ovsdb/neutron/BaseHandler.java
neutron/src/main/java/org/opendaylight/ovsdb/neutron/PortSecurityHandler.java [new file with mode: 0644]

index 2d6151fcbf568c82edf055aac7c2949ee5014c97..c814e0a715384effe7ef2bc664d9a375df231f42 100644 (file)
@@ -17,6 +17,10 @@ import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkAware;
 import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkCRUD;
 import org.opendaylight.controller.networkconfig.neutron.INeutronPortAware;
 import org.opendaylight.controller.networkconfig.neutron.INeutronPortCRUD;
+import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupAware;
+import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupCRUD;
+import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityRuleAware;
+import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityRuleCRUD;
 import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetAware;
 import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetCRUD;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
@@ -67,6 +71,7 @@ public class Activator extends ComponentActivatorAbstractBase {
                         SubnetHandler.class,
                         PortHandler.class,
                         SouthboundHandler.class,
+                        PortSecurityHandler.class,
                         MDSALConsumer.class,
                         ProviderNetworkManager.class};
         return res;
@@ -140,6 +145,10 @@ public class Activator extends ComponentActivatorAbstractBase {
                     .setService(ITenantNetworkManager.class)
                     .setRequired(true));
         }
+        if (imp.equals(PortSecurityHandler.class)) {
+            c.setInterface(INeutronSecurityRuleAware.class.getName(), null);
+            c.setInterface(INeutronSecurityGroupAware.class.getName(), null);
+        }
 
         //ToDo: DT: We don't need these dependencies for every implementation...
         //ToDo: DT: Callbacks are only required when behaviour is more complex than simple set/unset operation
@@ -180,5 +189,13 @@ public class Activator extends ComponentActivatorAbstractBase {
                 setService(INeutronPortCRUD.class).
                 setCallbacks("setNeutronPortCRUD", "unsetNeutronPortCRUD").
                 setRequired(true));
+        c.add(createServiceDependency().
+            setService(INeutronSecurityRuleCRUD.class).
+            setCallbacks("setNeutronSecurityRuleCRUD", "unsetNeutronSecurityRuleCRUD").
+            setRequired(true));
+        c.add(createServiceDependency().
+            setService(INeutronSecurityGroupCRUD.class).
+            setCallbacks("setNeutronSecurityGroupCRUD", "unsetNeutronSecurityGroupCRUD").
+            setRequired(true));
     }
 }
index 51d3e20db3a40987bba7ad3bc374ea9b503a3402..9bee8fa1570515550c9e18e0d8f14ef3376347fd 100644 (file)
@@ -16,6 +16,8 @@ import org.opendaylight.controller.containermanager.IContainerManager;
 import org.opendaylight.controller.forwardingrulesmanager.IForwardingRulesManager;
 import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkCRUD;
 import org.opendaylight.controller.networkconfig.neutron.INeutronPortCRUD;
+import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupCRUD;
+import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityRuleCRUD;
 import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetCRUD;
 import org.opendaylight.controller.sal.utils.Status;
 import org.opendaylight.controller.sal.utils.StatusCode;
@@ -373,4 +375,14 @@ public class BaseHandler {
     public void setNeutronNetworkCRUD(INeutronNetworkCRUD s) {
         this.neutronNetworkCache = s;
     }
+
+    protected INeutronSecurityRuleCRUD neutronSecurityRuleCache;
+    public void setNeutronSecurityRuleCache(INeutronSecurityRuleCRUD s) {
+        this.neutronSecurityRuleCache = s;
+    }
+
+    protected INeutronSecurityGroupCRUD neutronSecurityGroupCache;
+    public void setNeutronSecurityGroupCache(INeutronSecurityGroupCRUD s) {
+        this.neutronSecurityGroupCache = s;
+    }
 }
diff --git a/neutron/src/main/java/org/opendaylight/ovsdb/neutron/PortSecurityHandler.java b/neutron/src/main/java/org/opendaylight/ovsdb/neutron/PortSecurityHandler.java
new file mode 100644 (file)
index 0000000..888eac7
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2013 Red Hat, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Authors : Brent Salisbury, Madhu Venugopal
+ */
+
+package org.opendaylight.ovsdb.neutron;
+
+import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupAware;
+import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityRuleAware;
+import org.opendaylight.controller.networkconfig.neutron.NeutronSecurityGroup;
+import org.opendaylight.controller.networkconfig.neutron.NeutronSecurityRule;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.HttpURLConnection;
+
+/**
+ * Handle requests for OpenStack Neutron v2.0 Port Security API calls.
+ */
+public class PortSecurityHandler extends BaseHandler
+        implements INeutronSecurityGroupAware, INeutronSecurityRuleAware{
+
+    static final Logger logger = LoggerFactory.getLogger(PortSecurityHandler.class);
+
+    @Override
+    public int canCreateNeutronSecurityGroup(NeutronSecurityGroup neutronSecurityGroup) {
+        return HttpURLConnection.HTTP_CREATED;
+    }
+
+    @Override
+    public void neutronSecurityGroupCreated(NeutronSecurityGroup neutronSecurityGroup) {
+        int result = HttpURLConnection.HTTP_BAD_REQUEST;
+
+        result = canCreateNeutronSecurityGroup(neutronSecurityGroup);
+        if (result != HttpURLConnection.HTTP_CREATED) {
+            logger.debug("Neutron Security Group creation failed {} ", result);
+            return;
+        }
+    }
+
+    @Override
+    public int canUpdateNeutronSecurityGroup(NeutronSecurityGroup delta, NeutronSecurityGroup original) {
+        return HttpURLConnection.HTTP_OK;
+    }
+
+    @Override
+    public void neutronSecurityGroupUpdated(NeutronSecurityGroup neutronSecurityGroup) {
+        return;
+    }
+
+    @Override
+    public int canDeleteNeutronSecurityGroup(NeutronSecurityGroup neutronSecurityGroup) {
+        return HttpURLConnection.HTTP_OK;
+    }
+
+    @Override
+    public void neutronSecurityGroupDeleted(NeutronSecurityGroup neutronSecurityGroup) {
+        //TODO: Trigger flowmod removals
+        int result = canDeleteNeutronSecurityGroup(neutronSecurityGroup);
+        if  (result != HttpURLConnection.HTTP_OK) {
+            logger.error(" delete Neutron Security Rule validation failed for result - {} ", result);
+            return;
+        }
+    }
+
+    /**
+     * Invoked when a Security Rules creation is requested
+     * to indicate if the specified Rule can be created.
+     *
+     * @param neutronSecurityRule  An instance of proposed new Neutron Security Rule object.
+     * @return A HTTP status code to the creation request.
+     */
+
+    @Override
+    public int canCreateNeutronSecurityRule(NeutronSecurityRule neutronSecurityRule) {
+        return HttpURLConnection.HTTP_CREATED;
+    }
+
+    @Override
+    public void neutronSecurityRuleCreated(NeutronSecurityRule neutronSecurityRule) {
+        int result = HttpURLConnection.HTTP_BAD_REQUEST;
+
+        result = canCreateNeutronSecurityRule(neutronSecurityRule);
+        if (result != HttpURLConnection.HTTP_CREATED) {
+            logger.debug("Neutron Security Group creation failed {} ", result);
+            return;
+        }
+    }
+
+    @Override
+    public int canUpdateNeutronSecurityRule(NeutronSecurityRule delta, NeutronSecurityRule original) {
+        return HttpURLConnection.HTTP_OK;
+    }
+
+    @Override
+    public void neutronSecurityRuleUpdated(NeutronSecurityRule neutronSecurityRule) {
+        return;
+    }
+
+    @Override
+    public int canDeleteNeutronSecurityRule(NeutronSecurityRule neutronSecurityRule) {
+        return HttpURLConnection.HTTP_OK;
+    }
+
+    @Override
+    public void neutronSecurityRuleDeleted(NeutronSecurityRule neutronSecurityRule) {
+        int result = canDeleteNeutronSecurityRule(neutronSecurityRule);
+        if  (result != HttpURLConnection.HTTP_OK) {
+            logger.error(" delete Neutron Security Rule validation failed for result - {} ", result);
+            return;
+        }
+    }
+}
\ No newline at end of file