FWaaS handler/callbacks for the Neutron service 50/10050/3
authorBrent Salisbury <brent.salisbury@gmail.com>
Tue, 19 Aug 2014 06:24:17 +0000 (02:24 -0400)
committerBrent Salisbury <brent.salisbury@gmail.com>
Thu, 28 Aug 2014 04:37:24 +0000 (00:37 -0400)
Patch #3: Activator tweek

Patch #2: Rebased and applied Flavio's patch. Thanks.

Patch #1: Plumbing the Controller OS FWaaS API into
the ovsdb net-virt bundle.

Change-Id: If037b03e2d954192e9721d67f45f31eb5d9fe66e
Signed-off-by: Brent Salisbury <brent.salisbury@gmail.com>
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/Activator.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/FWaasHandler.java [new file with mode: 0644]

index 7cb1101acb714c0bcfe06041922e91b084652428..f4992920cd4b39fe1a3ab8797c3e187620fcfa3a 100644 (file)
@@ -10,6 +10,9 @@
 
 package org.opendaylight.ovsdb.openstack.netvirt;
 
+import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallAware;
+import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallPolicyAware;
+import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallRuleAware;
 import org.opendaylight.controller.networkconfig.neutron.INeutronFloatingIPAware;
 import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkAware;
 import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkCRUD;
@@ -86,7 +89,8 @@ public class Activator extends ComponentActivatorAbstractBase {
                         SouthboundHandler.class,
                         PortSecurityHandler.class,
                         ProviderNetworkManagerImpl.class,
-                        EventDispatcherImpl.class};
+                        EventDispatcherImpl.class,
+                        FWaasHandler.class};
         return res;
     }
 
@@ -231,6 +235,17 @@ public class Activator extends ComponentActivatorAbstractBase {
             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
         }
 
+        if (imp.equals(FWaasHandler.class)) {
+            Properties fWaasHandlerProperties = new Properties();
+            fWaasHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_FWAAS);
+            c.setInterface(new String[] {INeutronFirewallAware.class.getName(),
+                            INeutronFirewallRuleAware.class.getName(),
+                            INeutronFirewallPolicyAware.class.getName(),
+                            AbstractHandler.class.getName()},
+                    fWaasHandlerProperties);
+            c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
+        }
+
         if (imp.equals(ProviderNetworkManagerImpl.class)) {
             c.setInterface(NetworkingProviderManager.class.getName(), null);
             c.add(createServiceDependency()
diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/FWaasHandler.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/FWaasHandler.java
new file mode 100644 (file)
index 0000000..ec75f96
--- /dev/null
@@ -0,0 +1,202 @@
+/*
+ * 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
+ *
+ */
+
+package org.opendaylight.ovsdb.openstack.netvirt;
+
+import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallAware;
+import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallPolicyAware;
+import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallRuleAware;
+import org.opendaylight.controller.networkconfig.neutron.NeutronFirewall;
+import org.opendaylight.controller.networkconfig.neutron.NeutronFirewallPolicy;
+import org.opendaylight.controller.networkconfig.neutron.NeutronFirewallRule;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.HttpURLConnection;
+
+/**
+ * Handle requests for OpenStack Neutron v2.0 Port Firewall API calls.
+ */
+public class FWaasHandler extends AbstractHandler
+                          implements INeutronFirewallAware,
+                                     INeutronFirewallRuleAware,
+                                     INeutronFirewallPolicyAware {
+
+    static final Logger logger = LoggerFactory.getLogger(FWaasHandler.class);
+    /**
+     * Invoked when a Firewall Rules creation is requested
+     * to indicate if the specified Rule can be created.
+     *
+     * @param neutronFirewall  An instance of proposed new Neutron Firewall object.
+     * @return HttpURLConnection A HTTP status code to the creation request.
+     */
+    @Override
+    public int canCreateNeutronFirewall(NeutronFirewall neutronFirewall) {
+        return HttpURLConnection.HTTP_CREATED;
+    }
+
+    @Override
+    public void neutronFirewallCreated(NeutronFirewall neutronFirewall) {
+        logger.debug("Neutron Firewall created by Neutron: {}", neutronFirewall);
+        int result = HttpURLConnection.HTTP_BAD_REQUEST;
+
+        result = canCreateNeutronFirewall(neutronFirewall);
+        if (result != HttpURLConnection.HTTP_CREATED) {
+            logger.error("Neutron Firewall creation failed: {} ", result);
+            return;
+        }
+    }
+
+    @Override
+    public int canUpdateNeutronFirewall(NeutronFirewall delta, NeutronFirewall original) {
+        return HttpURLConnection.HTTP_OK;
+    }
+
+    @Override
+    public void neutronFirewallUpdated(NeutronFirewall neutronFirewall) {
+        logger.debug("NeutronFirewall updated from Neutron: {}", neutronFirewall);
+        return;
+    }
+
+    @Override
+    public int canDeleteNeutronFirewall(NeutronFirewall neutronFirewall) {
+        return HttpURLConnection.HTTP_OK;
+    }
+
+    @Override
+    public void neutronFirewallDeleted(NeutronFirewall neutronFirewall) {
+        //TODO: Trigger flowmod removals
+        int result = canDeleteNeutronFirewall(neutronFirewall);
+        if  (result != HttpURLConnection.HTTP_OK) {
+            logger.error(" delete Neutron Firewall validation failed for result - {} ", result);
+            return;
+        }
+    }
+
+    /**
+     * Invoked when a Firewall Rule creation is requested
+     * to indicate if the specified Rule can be created.
+     *
+     * @param neutronFirewallRule  An instance of proposed new Neutron Firewall Rule object.
+     * @return HttpURLConnection A HTTP status code to the creation request.
+     */
+    @Override
+    public int canCreateNeutronFirewallRule(NeutronFirewallRule neutronFirewallRule) {
+        return HttpURLConnection.HTTP_CREATED;
+    }
+
+    @Override
+    public void neutronFirewallRuleCreated(NeutronFirewallRule neutronFirewallRule) {
+        logger.debug("NeutronFirewallRule created by Neutron: {}", neutronFirewallRule);
+
+        int result = HttpURLConnection.HTTP_BAD_REQUEST;
+
+        result = canCreateNeutronFirewallRule(neutronFirewallRule);
+        if (result != HttpURLConnection.HTTP_CREATED) {
+            logger.error("Neutron Firewall Rule creation failed {} ", result);
+            return;
+        }
+    }
+
+    @Override
+    public int canUpdateNeutronFirewallRule(NeutronFirewallRule delta, NeutronFirewallRule original) {
+        return HttpURLConnection.HTTP_OK;
+    }
+
+    @Override
+    public void neutronFirewallRuleUpdated(NeutronFirewallRule neutronFirewallRule) {
+        logger.debug("Neutron Firewall Rule updated from Neutron: {}", neutronFirewallRule);
+        return;
+    }
+
+    @Override
+    public int canDeleteNeutronFirewallRule(NeutronFirewallRule neutronFirewallRule) {
+        return HttpURLConnection.HTTP_OK;
+    }
+
+    @Override
+    public void neutronFirewallRuleDeleted(NeutronFirewallRule neutronFirewallRule) {
+        int result = canDeleteNeutronFirewallRule(neutronFirewallRule);
+        if  (result != HttpURLConnection.HTTP_OK) {
+            logger.error(" delete Neutron Firewall Rule validation failed for result - {} ", result);
+            return;
+        }
+    }
+
+    /**
+     * Invoked when a Firewall Policy creation is requested
+     * to indicate if the specified Rule can be created.
+     *
+     * @param neutronFirewallPolicy  An instance of proposed new Neutron Firewall Policy object.
+     * @return HttpURLConnection A HTTP status code to the creation request.
+     */
+    @Override
+    public int canCreateNeutronFirewallPolicy(NeutronFirewallPolicy neutronFirewallPolicy) {
+        return HttpURLConnection.HTTP_CREATED;
+    }
+
+    @Override
+    public void neutronFirewallPolicyCreated(NeutronFirewallPolicy neutronFirewallPolicy) {
+        logger.debug("Neutron Firewall Policy created by Neutron: {}", neutronFirewallPolicy);
+
+        int result = HttpURLConnection.HTTP_BAD_REQUEST;
+
+        result = canCreateNeutronFirewallPolicy(neutronFirewallPolicy);
+        if (result != HttpURLConnection.HTTP_CREATED) {
+            logger.debug("Neutron Firewall Policy creation failed: {} ", result);
+            return;
+        }
+    }
+
+    @Override
+    public int canUpdateNeutronFirewallPolicy(NeutronFirewallPolicy delta, NeutronFirewallPolicy original) {
+        return HttpURLConnection.HTTP_OK;
+    }
+
+    @Override
+    public void neutronFirewallPolicyUpdated(NeutronFirewallPolicy neutronFirewallPolicy) {
+        logger.debug("Neutron Firewall Policy updated from Neutron: {}", neutronFirewallPolicy);
+        return;
+    }
+
+    @Override
+    public int canDeleteNeutronFirewallPolicy(NeutronFirewallPolicy neutronFirewallPolicy) {
+        return HttpURLConnection.HTTP_OK;
+    }
+
+    @Override
+    public void neutronFirewallPolicyDeleted(NeutronFirewallPolicy neutronFirewallPolicy) {
+        int result = canDeleteNeutronFirewallPolicy(neutronFirewallPolicy);
+        if  (result != HttpURLConnection.HTTP_OK) {
+            logger.error(" delete Neutron Firewall Policy validation failed for result - {} ", result);
+            return;
+        }
+    }
+
+    /**
+     * Process the event.
+     *
+     * @param abstractEvent@see org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher
+     */
+    @Override
+    public void processEvent(AbstractEvent abstractEvent) {
+        if (!(abstractEvent instanceof NorthboundEvent)) {
+            logger.error("Unable to process abstract event " + abstractEvent);
+            return;
+        }
+        NorthboundEvent ev = (NorthboundEvent) abstractEvent;
+        switch (ev.getAction()) {
+            // TODO: add handling of events here, once callbacks do something
+            //       other than logging.
+            default:
+                logger.warn("Unable to process event action " + ev.getAction());
+                break;
+        }
+    }
+}
\ No newline at end of file