Merge "NXM_NX_NSI openflow extended match support."
authorBrent Salisbury <brent.salisbury@gmail.com>
Thu, 14 Aug 2014 00:59:16 +0000 (00:59 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Thu, 14 Aug 2014 00:59:16 +0000 (00:59 +0000)
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/Activator.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/FloatingIPHandler.java [new file with mode: 0644]
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/RouterHandler.java [new file with mode: 0644]
resources/openstack/Neutron-v2.0-API-Examples.json.postman_collection

index 75bf7693610134d8de808d1ba735d52f1c356802..84b9c393b8ddab6655ffa0558f8d3507467cd2c8 100644 (file)
 
 package org.opendaylight.ovsdb.openstack.netvirt;
 
+import org.opendaylight.controller.networkconfig.neutron.INeutronFloatingIPAware;
 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.INeutronRouterAware;
 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupAware;
 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityRuleAware;
 import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetAware;
@@ -71,9 +73,11 @@ public class Activator extends ComponentActivatorAbstractBase {
                         BridgeConfigurationManagerImpl.class,
                         TenantNetworkManagerImpl.class,
                         VlanConfigurationCacheImpl.class,
+                        FloatingIPHandler.class,
                         NetworkHandler.class,
                         SubnetHandler.class,
                         PortHandler.class,
+                        RouterHandler.class,
                         SouthboundHandler.class,
                         PortSecurityHandler.class,
                         ProviderNetworkManagerImpl.class};
@@ -129,6 +133,13 @@ public class Activator extends ComponentActivatorAbstractBase {
             c.add(createServiceDependency().setService(TenantNetworkManager.class));
         }
 
+        if (imp.equals(FloatingIPHandler.class)) {
+            c.setInterface(INeutronFloatingIPAware.class.getName(), null);
+            c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
+            c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
+            c.add(createServiceDependency().setService(OvsdbInventoryListener.class).setRequired(true));
+        }
+
         if (imp.equals(NetworkHandler.class)) {
             c.setInterface(INeutronNetworkAware.class.getName(), null);
             c.add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true));
@@ -152,6 +163,13 @@ public class Activator extends ComponentActivatorAbstractBase {
             c.add(createServiceDependency().setService(OvsdbInventoryListener.class).setRequired(true));
         }
 
+        if (imp.equals(RouterHandler.class)) {
+            c.setInterface(INeutronRouterAware.class.getName(), null);
+            c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
+            c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
+            c.add(createServiceDependency().setService(OvsdbInventoryListener.class).setRequired(true));
+        }
+
         if (imp.equals(SouthboundHandler.class)) {
             c.setInterface(new String[] {OvsdbInventoryListener.class.getName(),
                                          IInventoryListener.class.getName()}, null);
diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/FloatingIPHandler.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/FloatingIPHandler.java
new file mode 100644 (file)
index 0000000..e06fbcf
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2014 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 : Dave Tucker, Flavio Fernandes
+ */
+package org.opendaylight.ovsdb.openstack.netvirt;
+
+import org.opendaylight.controller.networkconfig.neutron.INeutronFloatingIPAware;
+import org.opendaylight.controller.networkconfig.neutron.NeutronFloatingIP;
+import org.opendaylight.ovsdb.plugin.api.OvsdbConfigurationService;
+import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService;
+import org.opendaylight.ovsdb.plugin.api.OvsdbInventoryListener;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.HttpURLConnection;
+
+/**
+ * Handle requests for Neutron Floating IP.
+ */
+public class FloatingIPHandler extends AbstractHandler
+        implements INeutronFloatingIPAware {
+
+    /**
+     * Logger instance.
+     */
+    static final Logger logger = LoggerFactory.getLogger(FloatingIPHandler.class);
+
+    private volatile OvsdbConfigurationService ovsdbConfigurationService;
+    private volatile OvsdbConnectionService connectionService;
+    private volatile OvsdbInventoryListener ovsdbInventoryListener;
+
+    /**
+     * Services provide this interface method to indicate if the specified floatingIP can be created
+     *
+     * @param floatingIP
+     *            instance of proposed new Neutron FloatingIP object
+     * @return integer
+     *            the return value is understood to be a HTTP status code.  A return value outside of 200 through 299
+     *            results in the create operation being interrupted and the returned status value reflected in the
+     *            HTTP response.
+     */
+    @Override
+    public int canCreateFloatingIP(NeutronFloatingIP floatingIP) {
+        return HttpURLConnection.HTTP_OK;
+    }
+
+
+    /**
+     * Services provide this interface method for taking action after a floatingIP has been created
+     *
+     * @param floatingIP
+     *            instance of new Neutron FloatingIP object
+     */
+    @Override
+    public void neutronFloatingIPCreated(NeutronFloatingIP floatingIP) {
+        logger.debug(" Floating IP created {}, uuid {}",
+                     floatingIP.getFixedIPAddress(),
+                     floatingIP.getFloatingIPUUID());
+    }
+
+    /**
+     * Services provide this interface method to indicate if the specified floatingIP can be changed using the specified
+     * delta
+     *
+     * @param delta
+     *            updates to the floatingIP object using patch semantics
+     * @param original
+     *            instance of the Neutron FloatingIP object to be updated
+     * @return integer
+     *            the return value is understood to be a HTTP status code.  A return value outside of 200 through 299
+     *            results in the update operation being interrupted and the returned status value reflected in the
+     *            HTTP response.
+     */
+    @Override
+    public int canUpdateFloatingIP(NeutronFloatingIP delta, NeutronFloatingIP original) {
+        return HttpURLConnection.HTTP_OK;
+    }
+
+    /**
+     * Services provide this interface method for taking action after a floatingIP has been updated
+     *
+     * @param floatingIP
+     *            instance of modified Neutron FloatingIP object
+     */
+    @Override
+    public void neutronFloatingIPUpdated(NeutronFloatingIP floatingIP) {
+        logger.debug(" Floating IP updated {}, uuid {}",
+                     floatingIP.getFixedIPAddress(),
+                     floatingIP.getFloatingIPUUID());
+    }
+
+    /**
+     * Services provide this interface method to indicate if the specified floatingIP can be deleted
+     *
+     * @param floatingIP
+     *            instance of the Neutron FloatingIP object to be deleted
+     * @return integer
+     *            the return value is understood to be a HTTP status code.  A return value outside of 200 through 299
+     *            results in the delete operation being interrupted and the returned status value reflected in the
+     *            HTTP response.
+     */
+    @Override
+    public int canDeleteFloatingIP(NeutronFloatingIP floatingIP) {
+        return HttpURLConnection.HTTP_OK;
+    }
+
+    /**
+     * Services provide this interface method for taking action after a floatingIP has been deleted
+     *
+     * @param floatingIP
+     *            instance of deleted Neutron FloatingIP object
+     */
+    @Override
+    public void neutronFloatingIPDeleted(NeutronFloatingIP floatingIP) {
+        logger.debug(" Floating IP deleted {}, uuid {}",
+                     floatingIP.getFixedIPAddress(),
+                     floatingIP.getFloatingIPUUID());
+    }
+}
diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/RouterHandler.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/RouterHandler.java
new file mode 100644 (file)
index 0000000..cd46ef8
--- /dev/null
@@ -0,0 +1,192 @@
+/*
+ * Copyright (C) 2014 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 : Dave Tucker, Flavio Fernandes
+ */
+package org.opendaylight.ovsdb.openstack.netvirt;
+
+import org.opendaylight.controller.networkconfig.neutron.INeutronRouterAware;
+import org.opendaylight.controller.networkconfig.neutron.NeutronRouter;
+import org.opendaylight.controller.networkconfig.neutron.NeutronRouter_Interface;
+import org.opendaylight.ovsdb.plugin.api.OvsdbConfigurationService;
+import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService;
+import org.opendaylight.ovsdb.plugin.api.OvsdbInventoryListener;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.HttpURLConnection;
+
+/**
+ * Handle requests for Neutron Router.
+ */
+public class RouterHandler extends AbstractHandler
+        implements INeutronRouterAware {
+
+    /**
+     * Logger instance.
+     */
+    static final Logger logger = LoggerFactory.getLogger(RouterHandler.class);
+
+    private volatile OvsdbConfigurationService ovsdbConfigurationService;
+    private volatile OvsdbConnectionService connectionService;
+    private volatile OvsdbInventoryListener ovsdbInventoryListener;
+
+    /**
+     * Services provide this interface method to indicate if the specified router can be created
+     *
+     * @param router
+     *            instance of proposed new Neutron Router object
+     * @return integer
+     *            the return value is understood to be a HTTP status code.  A return value outside of 200 through 299
+     *            results in the create operation being interrupted and the returned status value reflected in the
+     *            HTTP response.
+     */
+    @Override
+    public int canCreateRouter(NeutronRouter router) {
+        return HttpURLConnection.HTTP_OK;
+    }
+
+    /**
+     * Services provide this interface method for taking action after a router has been created
+     *
+     * @param router
+     *            instance of new Neutron Router object
+     */
+    @Override
+    public void neutronRouterCreated(NeutronRouter router) {
+        logger.debug(" Router created {}, uuid {}", router.getName(), router.getRouterUUID());
+    }
+
+    /**
+     * Services provide this interface method to indicate if the specified router can be changed using the specified
+     * delta
+     *
+     * @param delta
+     *            updates to the router object using patch semantics
+     * @param router
+     *            instance of the Neutron Router object to be updated
+     * @return integer
+     *            the return value is understood to be a HTTP status code.  A return value outside of 200 through 299
+     *            results in the update operation being interrupted and the returned status value reflected in the
+     *            HTTP response.
+     */
+    @Override
+    public int canUpdateRouter(NeutronRouter delta, NeutronRouter original) {
+        return HttpURLConnection.HTTP_OK;
+    }
+
+    /**
+     * Services provide this interface method for taking action after a router has been updated
+     *
+     * @param router
+     *            instance of modified Neutron Router object
+     */
+    @Override
+    public void neutronRouterUpdated(NeutronRouter router) {
+        logger.debug(" Router updated {}", router.getName());
+    }
+
+    /**
+     * Services provide this interface method to indicate if the specified router can be deleted
+     *
+     * @param router
+     *            instance of the Neutron Router object to be deleted
+     * @return integer
+     *            the return value is understood to be a HTTP status code.  A return value outside of 200 through 299
+     *            results in the delete operation being interrupted and the returned status value reflected in the
+     *            HTTP response.
+     */
+    @Override
+    public int canDeleteRouter(NeutronRouter router) {
+        return HttpURLConnection.HTTP_OK;
+    }
+
+    /**
+     * Services provide this interface method for taking action after a router has been deleted
+     *
+     * @param router
+     *            instance of deleted Router Network object
+     */
+    @Override
+    public void neutronRouterDeleted(NeutronRouter router) {
+        logger.debug(" Router deleted {}, uuid {}", router.getName(), router.getRouterUUID());
+    }
+
+    /**
+     * Services provide this interface method to indicate if the specified interface can be attached to the specified
+     * route
+     *
+     * @param router
+     *            instance of the base Neutron Router object
+     * @param routerInterface
+     *            instance of the NeutronRouter_Interface to be attached to the router
+     * @return integer
+     *            the return value is understood to be a HTTP status code.  A return value outside of 200 through 299
+     *            results in the attach operation being interrupted and the returned status value reflected in the
+     *            HTTP response.
+     */
+    @Override
+    public int canAttachInterface(NeutronRouter router, NeutronRouter_Interface routerInterface) {
+        logger.debug(" Router {} asked if it can attach interface {}. Subnet {}",
+                     router.getName(),
+                     routerInterface.getPortUUID(),
+                     routerInterface.getSubnetUUID());
+        return HttpURLConnection.HTTP_OK;
+    }
+
+    /**
+     * Services provide this interface method for taking action after an interface has been added to a router
+     *
+     * @param router
+     *            instance of the base Neutron Router object
+     * @param routerInterface
+     *            instance of the NeutronRouter_Interface being attached to the router
+     */
+    @Override
+    public void neutronRouterInterfaceAttached(NeutronRouter router, NeutronRouter_Interface routerInterface) {
+        logger.debug(" Router {} interface {} attached. Subnet {}", router.getName(), routerInterface.getPortUUID(),
+                     routerInterface.getSubnetUUID());
+    }
+
+    /**
+     * Services provide this interface method to indicate if the specified interface can be detached from the specified
+     * router
+     *
+     * @param router
+     *            instance of the base Neutron Router object
+     * @param routerInterface
+     *            instance of the NeutronRouter_Interface to be detached to the router
+     * @return integer
+     *            the return value is understood to be a HTTP status code.  A return value outside of 200 through 299
+     *            results in the detach operation being interrupted and the returned status value reflected in the
+     *            HTTP response.
+     */
+    @Override
+    public int canDetachInterface(NeutronRouter router, NeutronRouter_Interface routerInterface) {
+        logger.debug(" Router {} asked if it can detach interface {}. Subnet {}",
+                     router.getName(),
+                     routerInterface.getPortUUID(),
+                     routerInterface.getSubnetUUID());
+
+        return HttpURLConnection.HTTP_OK;
+    }
+
+    /**
+     * Services provide this interface method for taking action after an interface has been removed from a router
+     *
+     * @param router
+     *            instance of the base Neutron Router object
+     * @param routerInterface
+     *            instance of the NeutronRouter_Interface being detached from the router
+     */
+    @Override
+    public void neutronRouterInterfaceDetached(NeutronRouter router, NeutronRouter_Interface routerInterface) {
+        logger.debug(" Router {} interface {} detached. Subnet {}", router.getName(), routerInterface.getPortUUID(),
+                     routerInterface.getSubnetUUID());
+    }
+}
index 1e6518f8491cae648703b0c0cf58f66460fcf4e0..55c341fc007475bb101635954d3c4014dc3c66f8 100644 (file)
@@ -3,10 +3,7 @@
        "name": "Neutron-v2.0-API-Examples",
        "description": "A collection of OpenStack Neutron v2.0 REST API calls for Postman. Import these into Postman and use to validate the OpenDaylight Neutron NB-API interfaces.\n\nResources:\n- Postman http://www.getpostman.com\n- Neutron v2.0 https://wiki.openstack.org/wiki/Neutron/APIv2-specification",
        "order": [
-               "747f9a54-e64f-57f6-ce6d-8ad358817696",
-               "55aab7d7-6159-c4fb-5b3f-42cbb55c4e7b",
-               "1215e515-a4ff-7d7e-acbf-905c6706db86",
-               "ef3c7339-ba4d-124d-7e1f-67d9ab638277"
+               "747f9a54-e64f-57f6-ce6d-8ad358817696"
        ],
        "folders": [
                {
                        ],
                        "collection_name": "Neutron-v2.0-API-Examples",
                        "collection_id": "bd9b142f-e3ad-452d-f088-eed1b741b937"
+               },
+               {
+                       "id": "2ad17469-46b9-3b8e-0686-b361e092c755",
+                       "name": "Neutron Port, Network, Subnet, CRUD",
+                       "description": "",
+                       "order": [
+                               "55aab7d7-6159-c4fb-5b3f-42cbb55c4e7b",
+                               "1215e515-a4ff-7d7e-acbf-905c6706db86",
+                               "9d37dcb1-e1e6-9fae-01ea-cc30aeb874a6",
+                               "78eb34fc-1933-c019-bf7f-fdae9652f9cd",
+                               "94c4ed8e-8e48-2384-38b0-5497fe05ba7a",
+                               "83af7fdb-53b2-3818-006e-bb52b8304e6a",
+                               "ef3c7339-ba4d-124d-7e1f-67d9ab638277"
+                       ],
+                       "collection_name": "Neutron-v2.0-API-Examples",
+                       "collection_id": "bd9b142f-e3ad-452d-f088-eed1b741b937"
+               },
+               {
+                       "id": "f080abc2-2590-5b74-dd6d-3acc19090bce",
+                       "name": "Neutron Router, CRUD",
+                       "description": "",
+                       "order": [
+                               "a209e7b3-9d00-bd9a-b920-39fd577b52c6",
+                               "5542be98-775d-3a61-2709-59b0d692e453",
+                               "828984bd-db02-aec4-d154-cd8e7f2b559b",
+                               "ec4ca40c-be6e-d76b-81a3-8fd328180132",
+                               "9e7c7b50-1580-c7e2-70a0-445b42e218b1",
+                               "84b71139-7a9a-2f27-d0f6-745b8dbe876f",
+                               "41940ad7-cec0-99c5-204a-eceab3aa7b78",
+                               "e6b74bbb-cf2f-9eec-e530-537f1c065f8e",
+                               "7370da7f-234e-3f7a-ed12-e384131d886d",
+                               "7b61cef4-38da-3a4e-c968-38a98f31e85d",
+                               "ba73a129-a385-0554-7e6c-dc687ea78bbb",
+                               "62417324-b809-5a83-d3f3-cd4fef07bbe5",
+                               "70ae1c0d-5b58-0c2a-5b62-d186a74059ab",
+                               "846c29b1-07fd-3d7d-f997-845ba91232b9"
+                       ],
+                       "collection_name": "Neutron-v2.0-API-Examples",
+                       "collection_id": "bd9b142f-e3ad-452d-f088-eed1b741b937"
                }
        ],
        "timestamp": 1394529177458,
                        "responses": [],
                        "synced": false
                },
+               {
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "id": "41940ad7-cec0-99c5-204a-eceab3aa7b78",
+                       "name": "Delete Neutron Router ",
+                       "description": "Delete Neutron Router",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/routers/8604a0de-7f6b-409a-a47c-a1cc7bc77b2e/",
+                       "method": "DELETE",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "data": "",
+                       "dataMode": "raw",
+                       "timestamp": 0,
+                       "version": 2,
+                       "time": 1407866898433,
+                       "synced": false
+               },
                {
                        "id": "4ecb4af3-e10b-6710-bbcf-af2b80a8887f",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
                        "responses": [],
                        "synced": false
                },
+               {
+                       "id": "5542be98-775d-3a61-2709-59b0d692e453",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/subnets/",
+                       "preRequestScript": "",
+                       "pathVariables": {},
+                       "method": "POST",
+                       "data": "{\n  \"subnet\": {\n    \"name\": \"\",\n    \"enable_dhcp\": true,\n    \"network_id\":\"e9330b1f-a2ef-4160-a991-169e56ab17f6\",\n    \"tenant_id\": \"4fd44f30292945e481c7b8a0c8908869\",\n    \"dns_nameservers\": [\n    ],\n    \"allocation_pools\": [\n      {\n        \"start\": \"192.168.200.2\",\n        \"end\": \"192.168.200.254\"\n      }\n    ],\n    \"host_routes\": [\n    ],\n    \"ip_version\": 4,\n    \"gateway_ip\": \"192.168.200.1\",\n    \"cidr\": \"192.168.200.0/24\",\n    \"id\": \"3b80198d-4f7b-4f77-9ef5-774d54e17127\"\n  }\n}\n",
+                       "dataMode": "raw",
+                       "version": 2,
+                       "tests": "",
+                       "time": 1407944320612,
+                       "name": "Post Add Neutron Subnets to external Network",
+                       "description": "Post a list of Neutron v2.0 Subnets",
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "responses": [],
+                       "synced": false
+               },
                {
                        "id": "55aab7d7-6159-c4fb-5b3f-42cbb55c4e7b",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
                        "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
                        "synced": false
                },
+               {
+                       "id": "5ddf6ac3-a30f-0f73-ed0a-9b18ae2f340d",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/subnets/",
+                       "preRequestScript": "",
+                       "pathVariables": {},
+                       "method": "POST",
+                       "data": "{\n  \"subnet\": {\n    \"name\": \"\",\n    \"enable_dhcp\": true,\n    \"network_id\": \"e9330b1f-a2ef-4160-a991-169e56ab17f5\",\n    \"tenant_id\": \"4fd44f30292945e481c7b8a0c8908869\",\n    \"dns_nameservers\": [\n    ],\n    \"allocation_pools\": [\n      {\n        \"start\": \"192.168.199.2\",\n        \"end\": \"192.168.199.254\"\n      }\n    ],\n    \"host_routes\": [\n    ],\n    \"ip_version\": 4,\n    \"gateway_ip\": \"192.168.199.1\",\n    \"cidr\": \"192.168.199.0/24\",\n    \"id\": \"3b80198d-4f7b-4f77-9ef5-774d54e17126\"\n  }\n}",
+                       "dataMode": "raw",
+                       "version": 2,
+                       "tests": "",
+                       "time": 1407876968386,
+                       "name": "Post Add Neutron Subnet",
+                       "description": "Post Neutron v2.0 Subnets",
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "responses": [],
+                       "synced": false
+               },
+               {
+                       "id": "62417324-b809-5a83-d3f3-cd4fef07bbe5",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/floatingips/2f245a7b-796b-4f26-9cf9-9e82d248fda7",
+                       "preRequestScript": "",
+                       "pathVariables": {},
+                       "method": "GET",
+                       "data": [],
+                       "dataMode": "params",
+                       "version": 2,
+                       "tests": "",
+                       "time": 1407945038085,
+                       "name": "Get Neutron Floating IP",
+                       "description": "",
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "synced": false
+               },
+               {
+                       "id": "70ae1c0d-5b58-0c2a-5b62-d186a74059ab",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/floatingips/2f245a7b-796b-4f26-9cf9-9e82d248fda7",
+                       "preRequestScript": "",
+                       "pathVariables": {},
+                       "method": "PUT",
+                       "data": "{\n  \"floatingip\": {\n      \"router_id\": \"8604a0de-7f6b-409a-a47c-a1cc7bc77b2e\",\n      \"tenant_id\": \"60cd4f6dbc5f499982a284e7b83b5be3\",\n      \"floating_network_id\":\"e9330b1f-a2ef-4160-a991-169e56ab17f6\",\n      \"fixed_ip_address\": null,\n      \"port_id\": null,\n      \"id\": \"2f245a7b-796b-4f26-9cf9-9e82d248fda7\"\n  }\n}",
+                       "dataMode": "raw",
+                       "version": 2,
+                       "tests": "",
+                       "time": 1407947274681,
+                       "name": "Update Neutron Floating IP -- disassociate port",
+                       "description": "",
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "synced": false
+               },
+               {
+                       "id": "7370da7f-234e-3f7a-ed12-e384131d886d",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/routers/8604a0de-7f6b-409a-a47c-a1cc7bc77b2e/remove_router_interface",
+                       "preRequestScript": "",
+                       "pathVariables": {},
+                       "method": "PUT",
+                       "data": "{\n  \"subnet_id\": \"3b80198d-4f7b-4f77-9ef5-774d54e17126\",\n  \"port_id\": \"65c0ee9f-d634-4522-8954-51021b570b0d\"\n}",
+                       "dataMode": "raw",
+                       "version": 2,
+                       "tests": "",
+                       "time": 1407894647769,
+                       "name": "Post Remove Neutron Router Interface",
+                       "description": "Remove Neutron Router Interface",
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "synced": false
+               },
                {
                        "id": "747f9a54-e64f-57f6-ce6d-8ad358817696",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
                        "responses": [],
                        "synced": false
                },
+               {
+                       "id": "78eb34fc-1933-c019-bf7f-fdae9652f9cd",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/subnets/",
+                       "preRequestScript": "",
+                       "pathVariables": {},
+                       "method": "GET",
+                       "data": [],
+                       "dataMode": "params",
+                       "version": 2,
+                       "tests": "",
+                       "time": 1407893656841,
+                       "name": "Get Neutron Subnets",
+                       "description": "Return a list of Neutron v2.0 API Subnets.",
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "responses": [],
+                       "synced": false
+               },
+               {
+                       "id": "7b61cef4-38da-3a4e-c968-38a98f31e85d",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/floatingips",
+                       "preRequestScript": "",
+                       "pathVariables": {},
+                       "method": "POST",
+                       "data": "{\n  \"floatingip\": {\n      \"router_id\": \"8604a0de-7f6b-409a-a47c-a1cc7bc77b2e\",\n      \"tenant_id\": \"60cd4f6dbc5f499982a284e7b83b5be3\",\n      \"floating_network_id\":\"e9330b1f-a2ef-4160-a991-169e56ab17f6\",\n      \"fixed_ip_address\": \"192.168.199.1\",\n      \"floating_ip_address\": \"192.168.200.2\",\n      \"port_id\": \"65c0ee9f-d634-4522-8954-51021b570b0d\",\n      \"id\": \"2f245a7b-796b-4f26-9cf9-9e82d248fda7\"\n  }\n}",
+                       "dataMode": "raw",
+                       "version": 2,
+                       "tests": "",
+                       "time": 1407944603189,
+                       "name": "Post Add Neutron Floating IP",
+                       "description": "Example posting of a Neutron v2.0 Floating IP.",
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "synced": false
+               },
                {
                        "id": "7ef5413c-7f22-ac12-5444-f9be6a7c029e",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
                        "responses": [],
                        "synced": false
                },
+               {
+                       "id": "828984bd-db02-aec4-d154-cd8e7f2b559b",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/routers",
+                       "preRequestScript": "",
+                       "pathVariables": {},
+                       "method": "POST",
+                       "data": "{\n  \"router\": {\n  \"status\": \"ACTIVE\",\n  \"external_gateway_info\": {\n    \"network_id\": \"e9330b1f-a2ef-4160-a991-169e56ab17f6\"\n  },\n  \"name\": \"another_router\",\n  \"admin_state_up\": true,\n  \"tenant_id\": \"60cd4f6dbc5f499982a284e7b83b5be3\",\n  \"id\": \"8604a0de-7f6b-409a-a47c-a1cc7bc77b2e\"\n  }\n}",
+                       "dataMode": "raw",
+                       "version": 2,
+                       "tests": "",
+                       "time": 1407882177180,
+                       "name": "Post Add Neutron Router",
+                       "description": "Example posting of a Neutron v2.0 Neutron Router.",
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "synced": false
+               },
+               {
+                       "id": "83af7fdb-53b2-3818-006e-bb52b8304e6a",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/ports/65c0ee9f-d634-4522-8954-51021b570b0d",
+                       "preRequestScript": "",
+                       "pathVariables": {},
+                       "method": "DELETE",
+                       "data": "",
+                       "dataMode": "raw",
+                       "version": 2,
+                       "tests": "",
+                       "time": 1407893936097,
+                       "name": "Post Delete Neutron Port",
+                       "description": "Post a list of Neutron v2.0 Subnets",
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "responses": [],
+                       "synced": false
+               },
+               {
+                       "id": "846c29b1-07fd-3d7d-f997-845ba91232b9",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/floatingips/2f245a7b-796b-4f26-9cf9-9e82d248fda7",
+                       "preRequestScript": "",
+                       "pathVariables": {},
+                       "method": "DELETE",
+                       "data": [],
+                       "dataMode": "params",
+                       "version": 2,
+                       "tests": "",
+                       "time": 1407947338774,
+                       "name": "Delete Neutron Floating IP",
+                       "description": "",
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "synced": false
+               },
+               {
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "id": "84b71139-7a9a-2f27-d0f6-745b8dbe876f",
+                       "name": "Put Update Neutron Router ",
+                       "description": "Update Neutron Router",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/routers/8604a0de-7f6b-409a-a47c-a1cc7bc77b2e/",
+                       "method": "PUT",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "data": "{\n  \"router\": {\n  \"external_gateway_info\": {\n     \"network_id\": \"e9330b1f-a2ef-4160-a991-169e56ab17f6\"\n  },\n  \"name\": \"another_router_renamed\",\n  \"admin_state_up\": false\n  }\n}",
+                       "dataMode": "raw",
+                       "timestamp": 0,
+                       "version": 2,
+                       "time": 1407866749069,
+                       "synced": false
+               },
                {
                        "id": "8c4d8a07-64c5-f821-4799-d528f01e88cc",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
                        "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
                        "synced": false
                },
+               {
+                       "id": "94c4ed8e-8e48-2384-38b0-5497fe05ba7a",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/ports/",
+                       "preRequestScript": "",
+                       "pathVariables": {},
+                       "method": "POST",
+                       "data": "{\n  \"port\": {\n    \"status\": \"DOWN\",\n    \"binding:host_id\": \"\",\n    \"name\": \"private-port\",\n    \"allowed_address_pairs\": [\n    ],\n    \"admin_state_up\": true,\n    \"network_id\": \"e9330b1f-a2ef-4160-a991-169e56ab17f5\",\n    \"tenant_id\": \"d6700c0c9ffa4f1cb322cd4a1f3906fa\",\n    \"binding:vif_details\": {\n    },\n    \"binding:vnic_type\": \"normal\",\n    \"binding:vif_type\": \"unbound\",\n    \"mac_address\": \"fa:16:3e:c9:cb:f0\",\n    \"binding:profile\": {\n    },\n    \"fixed_ips\": [\n      {\n        \"subnet_id\": \"3b80198d-4f7b-4f77-9ef5-774d54e17126\",\n        \"ip_address\": \"192.168.199.1\"\n      }\n    ],\n    \"id\": \"65c0ee9f-d634-4522-8954-51021b570b0d\",\n    \"security_groups\": [\n      \"f0ac4394-7e4a-4409-9701-ba8be283dbc3\"\n    ]\n  }\n}",
+                       "dataMode": "raw",
+                       "version": 2,
+                       "tests": "",
+                       "time": 1407897276098,
+                       "name": "Post Add Neutron Ports",
+                       "description": "Post a list of Neutron v2.0 Subnets",
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "responses": [],
+                       "synced": false
+               },
+               {
+                       "id": "9d37dcb1-e1e6-9fae-01ea-cc30aeb874a6",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/subnets/",
+                       "preRequestScript": "",
+                       "pathVariables": {},
+                       "method": "POST",
+                       "data": "{\n  \"subnet\": {\n    \"name\": \"\",\n    \"enable_dhcp\": true,\n    \"network_id\": \"e9330b1f-a2ef-4160-a991-169e56ab17f5\",\n    \"tenant_id\": \"4fd44f30292945e481c7b8a0c8908869\",\n    \"dns_nameservers\": [\n    ],\n    \"allocation_pools\": [\n      {\n        \"start\": \"192.168.199.2\",\n        \"end\": \"192.168.199.254\"\n      }\n    ],\n    \"host_routes\": [\n    ],\n    \"ip_version\": 4,\n    \"gateway_ip\": \"192.168.199.1\",\n    \"cidr\": \"192.168.199.0/24\",\n    \"id\": \"3b80198d-4f7b-4f77-9ef5-774d54e17126\"\n  }\n}\n",
+                       "dataMode": "raw",
+                       "version": 2,
+                       "tests": "",
+                       "time": 1407877671809,
+                       "name": "Post Add Neutron Subnets",
+                       "description": "Post a list of Neutron v2.0 Subnets",
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "responses": [],
+                       "synced": false
+               },
+               {
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "id": "9e7c7b50-1580-c7e2-70a0-445b42e218b1",
+                       "name": "Get Neutron Router",
+                       "description": "Get Neutron Router, based on id",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/routers/8604a0de-7f6b-409a-a47c-a1cc7bc77b2e",
+                       "method": "GET",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "data": "{\n  \"router\": {\n  \"status\": \"ACTIVE\",\n  \"external_gateway_info\": {\n  \"network_id\": \"e9330b1f-a2ef-4160-a991-169e56ab17f6\"\n  },\n  \"name\": \"another_router\",\n  \"admin_state_up\": true,\n  \"tenant_id\": \"60cd4f6dbc5f499982a284e7b83b5be3\",\n  \"id\": \"8604a0de-7f6b-409a-a47c-a1cc7bc77b2e\"\n  }\n}",
+                       "dataMode": "raw",
+                       "timestamp": 0,
+                       "version": 2,
+                       "time": 1407866340804,
+                       "synced": false
+               },
                {
                        "id": "9fe0d840-dcd3-6d3e-d410-e88538858e3a",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
                        "responses": [],
                        "synced": false
                },
+               {
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "id": "a209e7b3-9d00-bd9a-b920-39fd577b52c6",
+                       "name": "Post Add Neutron External Network",
+                       "description": "Post add Neutron v2.0 External Network",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/networks/",
+                       "method": "POST",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "data": "{\n   \"networks\":[\n      {\n         \"status\":\"ACTIVE\",\n         \"subnets\":[\n         ],\n         \"name\":\"sample_network_90\",\n         \"provider:physical_network\":null,\n   \"admin_state_up\":false,\n   \"tenant_id\":\"60cd4f6dbc5f499982a284e7b83b5be3\",\n   \"provider:network_type\":\"local\",\n   \"router:external\":true,\n   \"shared\":false,\n   \"id\":\"e9330b1f-a2ef-4160-a991-169e56ab17f6\",\n   \"provider:segmentation_id\":90\n}\n  ]\n}",
+                       "dataMode": "raw",
+                       "timestamp": 0,
+                       "version": 2,
+                       "time": 1407865757248,
+                       "synced": false,
+                       "isFromCollection": true,
+                       "collectionRequestId": "cac027e1-bbc9-f147-5142-5b48a4f02863"
+               },
                {
                        "id": "a483b6c9-2f07-f59e-effa-883591fee938",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
                        "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
                        "synced": false
                },
+               {
+                       "id": "b922977b-b639-04d5-1a84-a95dfea15139",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/subnets/",
+                       "preRequestScript": "",
+                       "pathVariables": {},
+                       "method": "GET",
+                       "data": [],
+                       "dataMode": "params",
+                       "version": 2,
+                       "tests": "",
+                       "time": 1407877015645,
+                       "name": "Get Neutron Subnets",
+                       "description": "Return a list of Neutron v2.0 API Subnets.",
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "responses": [],
+                       "synced": false
+               },
+               {
+                       "id": "ba73a129-a385-0554-7e6c-dc687ea78bbb",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/floatingips",
+                       "preRequestScript": "",
+                       "pathVariables": {},
+                       "method": "GET",
+                       "data": [],
+                       "dataMode": "params",
+                       "version": 2,
+                       "tests": "",
+                       "time": 1407944696947,
+                       "name": "Get Neutron Floating IPs",
+                       "description": "",
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "synced": false
+               },
+               {
+                       "id": "c8def042-8f03-4820-5c00-f01cd84281f4",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/ports/",
+                       "preRequestScript": "",
+                       "pathVariables": {},
+                       "method": "POST",
+                       "data": "{\n  \"port\": {\n    \"status\": \"DOWN\",\n    \"binding:host_id\": \"\",\n    \"name\": \"private-port\",\n    \"allowed_address_pairs\": [\n    ],\n    \"admin_state_up\": true,\n    \"network_id\": \"e9330b1f-a2ef-4160-a991-169e56ab17f5\",\n    \"tenant_id\": \"d6700c0c9ffa4f1cb322cd4a1f3906fa\",\n    \"binding:vif_details\": {\n    },\n    \"binding:vnic_type\": \"normal\",\n    \"binding:vif_type\": \"unbound\",\n    \"device_owner\": \"\",\n    \"mac_address\": \"fa:16:3e:c9:cb:f0\",\n    \"binding:profile\": {\n    },\n    \"fixed_ips\": [\n      {\n        \"subnet_id\": \"3b80198d-4f7b-4f77-9ef5-774d54e17126\",\n        \"ip_address\": \"192.168.199.20\"\n      }\n    ],\n    \"id\": \"65c0ee9f-d634-4522-8954-51021b570b0d\",\n    \"security_groups\": [\n      \"f0ac4394-7e4a-4409-9701-ba8be283dbc3\"\n    ],\n    \"device_id\": \"\"\n  }\n}",
+                       "dataMode": "raw",
+                       "version": 2,
+                       "tests": "",
+                       "time": 1407877181799,
+                       "name": "Post Add Neutron Network Port",
+                       "description": "Post a list of Neutron v2.0 Port",
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "responses": [],
+                       "synced": false
+               },
                {
                        "id": "c9cc2212-1f16-ead6-5dc0-073aed1e2c61",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
                        "responses": [],
                        "synced": false
                },
+               {
+                       "id": "e6b74bbb-cf2f-9eec-e530-537f1c065f8e",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/routers/8604a0de-7f6b-409a-a47c-a1cc7bc77b2e/add_router_interface",
+                       "preRequestScript": "",
+                       "pathVariables": {},
+                       "method": "PUT",
+                       "data": "{\n  \"subnet_id\": \"3b80198d-4f7b-4f77-9ef5-774d54e17126\",\n  \"port_id\": \"65c0ee9f-d634-4522-8954-51021b570b0d\"\n}",
+                       "dataMode": "raw",
+                       "version": 2,
+                       "tests": "",
+                       "time": 1407894571634,
+                       "name": "Post Add Neutron Router Interface",
+                       "description": "Add Neutron Router Interface",
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "synced": false
+               },
                {
                        "id": "eb1baf45-cdb2-7f50-a6aa-6fe934c1a355",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
                        "responses": [],
                        "synced": false
                },
+               {
+                       "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+                       "id": "ec4ca40c-be6e-d76b-81a3-8fd328180132",
+                       "name": "Get Neutron Routers",
+                       "description": "Get Neutron Routers",
+                       "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/routers",
+                       "method": "GET",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+                       "data": "{\n  \"firewall\": {\n    \"admin_state_up\": true,\n    \"description\": \"Example Neutron v2.0 Firewall Creation\",\n    \"firewall_policy_id\": \"c69933c1-b472-44f9-8226-30dc4ffd454c\",\n    \"id\": \"3b0ef8f4-82c7-44d4-a4fb-6177f9a21977\",\n    \"name\": \"Example FWaaS Firewall\",\n    \"status\": \"PENDING_CREATE\",\n    \"tenant_id\": \"45977fa2dbd7482098dd68d0d8970117\"\n  }\n}",
+                       "dataMode": "raw",
+                       "timestamp": 0,
+                       "version": 2,
+                       "time": 1407854898874,
+                       "synced": false
+               },
                {
                        "id": "ed8face9-6585-8a9b-9e09-870e3a5e5546",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",