<packaging>pom</packaging>
<name>ovsdb Distribution</name>
<dependencies>
+ <dependency>
+ <groupId>org.opendaylight.openflowjava</groupId>
+ <artifactId>openflow-protocol-api</artifactId>
+ <version>0.5-SNAPSHOT</version>
+ </dependency>
+
+ <!-- openflowjava -->
+ <dependency>
+ <groupId>org.opendaylight.openflowjava</groupId>
+ <artifactId>openflow-protocol-impl</artifactId>
+ <version>0.5-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.openflowjava</groupId>
+ <artifactId>openflow-protocol-spi</artifactId>
+ <version>0.5-SNAPSHOT</version>
+ </dependency>
+ <!-- openflowplugin -->
+ <dependency>
+ <groupId>org.opendaylight.openflowplugin</groupId>
+ <artifactId>openflowplugin</artifactId>
+ <version>0.0.3-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.openflowplugin</groupId>
+ <artifactId>openflowplugin-controller-config</artifactId>
+ <version>0.0.3-SNAPSHOT</version>
+ </dependency>
<dependency>
<groupId>org.opendaylight.ovsdb</groupId>
<artifactId>ovsdb</artifactId>
<version>0.5.1-SNAPSHOT</version>
</dependency>
<dependency>
- <groupId>org.opendaylight.integration</groupId>
- <artifactId>distributions-virtualization</artifactId>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>distribution.opendaylight</artifactId>
<version>0.1.2-SNAPSHOT</version>
<classifier>osgipackage</classifier>
<type>zip</type>
<phase>generate-resources</phase>
<configuration>
<outputDirectory>${project.build.directory}/generated-resources</outputDirectory>
- <includeArtifactIds>distributions-virtualization</includeArtifactIds>
- <includeGroupIds>org.opendaylight.integration</includeGroupIds>
+ <includeArtifactIds>distribution.opendaylight</includeArtifactIds>
+ <includeGroupIds>org.opendaylight.controller</includeGroupIds>
+ <excludeTransitive>true</excludeTransitive>
+ <ignorePermissions>false</ignorePermissions>
+ </configuration>
+ </execution>
+ <execution>
+ <id>unpack-provided-configs</id>
+ <goals>
+ <goal>unpack-dependencies</goal>
+ </goals>
+ <phase>generate-resources</phase>
+ <configuration>
+ <outputDirectory>${project.build.directory}/provided-configs</outputDirectory>
+ <includeArtifactIds>openflowplugin-controller-config</includeArtifactIds>
+ <includes>**\/*.xml</includes>
<excludeTransitive>true</excludeTransitive>
<ignorePermissions>false</ignorePermissions>
</configuration>
<url>https://wiki.opendaylight.org/view/OVSDB_Integration:Main</url>
</scm>
</project>
-
-
<outputDirectory>/</outputDirectory>
<excludes>
<exclude>opendaylight/plugins/*ovsdb*</exclude>
+ <exclude>opendaylight/run.sh</exclude>
+ </excludes>
+ </fileSet>
+ <fileSet>
+ <directory>${project.build.directory}/provided-configs/initial</directory>
+ <outputDirectory>/opendaylight/configuration/initial.available</outputDirectory>
+ <excludes>
+ <exclude>**/META-INF/**</exclude>
</excludes>
</fileSet>
</fileSets>
+ <files>
+ <file>
+ <source>${project.build.directory}/generated-resources/opendaylight/run.sh</source>
+ <outputDirectory>/opendaylight/</outputDirectory>
+ <destName>run.internal.sh</destName>
+ <fileMode>0755</fileMode>
+ </file>
+ <file>
+ <source>${basedir}/src/assemble/resources/run.sh</source>
+ <outputDirectory>/opendaylight/</outputDirectory>
+ <fileMode>0755</fileMode>
+ </file>
+ <file>
+ <source>${basedir}/src/assemble/resources/run.base.sh</source>
+ <outputDirectory>/opendaylight/</outputDirectory>
+ <fileMode>0755</fileMode>
+ </file>
+ </files>
<dependencySets>
<dependencySet>
<outputDirectory>opendaylight/plugins</outputDirectory>
- <excludes>
- <exclude>equinoxSDK381:org.eclipse.osgi</exclude>
- <exclude>equinoxSDK381:org.eclipse.equinox.console</exclude>
- <exclude>equinoxSDK381:org.eclipse.equinox.launcher</exclude>
- <exclude>equinoxSDK381:org.eclipse.equinox.ds</exclude>
- <exclude>equinoxSDK381:org.eclipse.equinox.util</exclude>
- <exclude>equinoxSDK381:org.eclipse.osgi.services</exclude>
- <exclude>virgomirror:org.eclipse.jdt.core.compiler.batch</exclude>
- <exclude>org.apache.felix:org.apache.felix.fileinstall</exclude>
- <exclude>geminiweb:org.eclipse.virgo.kernel.equinox.extensions</exclude>
- <exclude>org.slf4j:slf4j-api</exclude>
- <exclude>ch.qos.logback:logback-core</exclude>
- <exclude>ch.qos.logback:logback-classic</exclude>
- <exclude>com.sun.jersey:jersey-core</exclude>
- <exclude>com.sun.jersey:jersey-json</exclude>
- <exclude>com.sun.jersey:jersey-server</exclude>
- </excludes>
<outputFileNameMapping>
${artifact.groupId}.${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}
</outputFileNameMapping>
--- /dev/null
+#!/bin/bash
+
+# Use same path for run.internal.sh
+RUNSH_DIR=$(dirname $0)
+CONTROLLER_RUNSH=${RUNSH_DIR}/run.internal.sh
+
+OF_FILTER=
+
+# Be extra careful to pass on usage from run.internal.sh, but add our
+# usage as well in the standard way
+function usage {
+ $CONTROLLER_RUNSH -help | sed 's/\[-help\]/\[-help\] \[-of13\] \[-bundlefilter \<bundlefilter\> \]/' | sed "s;$CONTROLLER_RUNSH;$0;"
+ exit 1
+}
+
+OF13=0
+BUNDLEFILTER=
+while true ; do
+ (( i += 1 ))
+ case "${@:$i:1}" in
+ -of13) OF13=1 ;;
+ -bundlefilter) (( i += 1 )); BUNDLEFILTER="|${@:$i:1}";;
+ -help) usage ;;
+ "") break ;;
+ esac
+done
+
+# clean available optional configurations (links)
+find configuration/initial -type l -exec rm {} \;
+
+# OF Filter selection
+OF_FILTER="org.opendaylight.(openflowplugin|openflowjava)"
+if (( $OF13 != 0 )); then
+ OF_FILTER="org.opendaylight.controller.(thirdparty.org.openflow|protocol_plugins.openflow)"
+ while read ofConfig; do
+ ln -s ../initial.available/$(basename ${ofConfig}) configuration/initial/
+ done < <(find configuration/initial.available -name '*openflowplugin.xml')
+fi
+
+# Make sure we suck out our additional args so as to not confuse
+# run.internal.sh
+NEWARGS=`echo $@|sed 's/-of13//'|sed 's/-bundlefilter[ ]*[^ ]*//'`
+
+# Build the filter string
+FILTERBEGINING='^(?!'
+FILTERENDING=').*'
+FILTER=${FILTERBEGINING}${OF_FILTER}${BUNDLEFILTER}${FILTERENDING}
+
+# Run the command
+$CONTROLLER_RUNSH -Dfelix.fileinstall.filter="$FILTER" $NEWARGS
--- /dev/null
+#!/bin/bash
+
+# Use same path for run.base.sh
+RUNSH_DIR=$(dirname $0)
+RUN_BASE_SH=${RUNSH_DIR}/run.base.sh
+
+function usage {
+ echo -e "You must select one of the 3 supported network virtualization technologies:\n\tovsdb | opendove | vtn"
+ echo "Usage: $0 -virt {ovsdb | opendove | vtn | affinity} [advanced options]"
+ echo "Advanced options: $($RUN_BASE_SH -help | sed "s;Usage: $RUN_BASE_SH ;;")"
+ exit 1
+}
+
+virtIndex=0
+while true ; do
+ (( i += 1 ))
+ case "${@:$i:1}" in
+ -virt) virtIndex=$i ;;
+ "") break ;;
+ esac
+done
+
+# Virtualization edition select
+if [ ${virtIndex} -eq 0 ]; then
+ usage
+fi
+
+virt=${@:$virtIndex+1:1}
+if [ "${virt}" == "" ]; then
+ usage
+else
+ if [ "${virt}" == "ovsdb" ]; then
+ ODL_VIRT_FILTER="opendove|vtn"
+ elif [ "${virt}" == "opendove" ]; then
+ ODL_VIRT_FILTER="ovsdb|vtn"
+ elif [ "${virt}" == "vtn" ]; then
+ ODL_VIRT_FILTER="affinity|opendove|ovsdb.ovsdb.neutron|controller.(arphandler|samples)"
+ elif [ "${virt}" == "affinity" ]; then
+ ODL_VIRT_FILTER="vtn|opendove|controller.samples"
+ else
+ usage
+ fi
+fi
+
+$RUN_BASE_SH -bundlefilter "org.opendaylight.(${ODL_VIRT_FILTER})" "${@:1:$virtIndex-1}" "${@:virtIndex+2}"
* provider_mappings=physnet1:eth1[,physnet2:eth2]
*/
public String getPhysicalInterfaceName (Node node, String physicalNetwork) {
- String phyIf = null;
+ String phyIf = null;
- try {
- OVSDBConfigService ovsdbConfig = (OVSDBConfigService) ServiceHelper.getGlobalInstance(OVSDBConfigService.class, this);
+ OVSDBConfigService ovsdbConfig = (OVSDBConfigService) ServiceHelper.getGlobalInstance(OVSDBConfigService.class, this);
+ try {
Map<String, Table<?>> ovsTable = ovsdbConfig.getRows(node, Open_vSwitch.NAME.getName());
if (ovsTable == null) {
}
}
}
- break;
+
+ if (phyIf != null) {
+ break;
+ }
}
} catch (Exception e) {
logger.error("Unable to find physical interface for Node: {}, Network {}",
/*******************************************************************************
- * Copyright (c) 2013 Hewlett-Packard Development Company, L.P.
+ * Copyright (c) 2013 Hewlett-Packard Development Company, L.P. and others
* All rights reserved. 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
*
* Contributors:
* Dave Tucker (HP) - Added unit tests for the AdminConfigManager class.
+ * Sam Hague - Added unit tests for getPhysicalInterfaceName.
*******************************************************************************/
package org.opendaylight.ovsdb.neutron;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Matchers.anyString;
public class AdminConfigManagerTest {
AdminConfigManager adminConfigManager;
+ private OVSDBConfigService ovsdbConfig;
+ private Node node;
+ private Open_vSwitch ovsTable;
+ private ConcurrentMap<String, Table<?>> ovsMap;
+ private OvsDBMap map;
+
+ private static String OPENVSWITCH = "Open_vSwitch";
+ private static String PROVIDER_MAPPINGS = "provider_mappings";
+ private static String PHYSNET1 = "physnet1";
+ private static String ETH1 = "eth1";
+ private static String PHYSNET2 = "physnet2";
+ private static String ETH2 = "eth2";
+ private static String PHYSNET3 = "physnet3";
+ private static String ETH3 = "eth3";
+ private static String LOCAL_IP = "local_ip";
+ private static String IPADDR = "10.10.10.10";
@Before
public void setUp(){
adminConfigManager = new AdminConfigManager();
+
+ node = mock(Node.class);
+ ovsdbConfig = mock(ConfigurationService.class);
+ PowerMockito.mockStatic(ServiceHelper.class);
+ when(ServiceHelper.getGlobalInstance(eq(OVSDBConfigService.class), anyObject())).thenReturn(ovsdbConfig);
+
+ ovsTable = new Open_vSwitch();
+ ovsMap = new ConcurrentHashMap<>();
+ map = new OvsDBMap();
}
@Test
// Success...
assertEquals(testAddress, adminConfigManager.getTunnelEndPoint(mockNode));
}
+
+ // Add key:value pairs to the map.
+ // Calling again with the same key will overwrite the current pair.
+ private void initMap (String key, String value) {
+ map.put(key, value);
+ ovsTable.setOther_config(map);
+ ovsMap.put(OPENVSWITCH, ovsTable);
+ }
+
+ @Test
+ public void testGetPhysicalInterfaceName () throws Exception {
+ when(ovsdbConfig.getRows(any(Node.class), anyString())).thenReturn(ovsMap);
+
+ // Check if match can be found with a single pair
+ initMap(PROVIDER_MAPPINGS, PHYSNET1 + ":" + ETH1);
+ assertEquals("Failed to find " + ETH1 + " in " + map.toString(),
+ ETH1, adminConfigManager.getPhysicalInterfaceName(node, PHYSNET1));
+
+ // Check if match can be found with different pairs
+ initMap(PROVIDER_MAPPINGS, PHYSNET1 + ":" + ETH1 + "," + PHYSNET2 + ":" + ETH2);
+ assertEquals("Failed to find " + ETH2 + " in " + map.toString(),
+ ETH2, adminConfigManager.getPhysicalInterfaceName(node, PHYSNET2));
+
+ // Check if match can be found with duplicate pairs
+ initMap(PROVIDER_MAPPINGS, PHYSNET1 + ":" + ETH1 + "," + PHYSNET2 + ":" + ETH2 + "," + PHYSNET2 + ":" + ETH2);
+ assertEquals("Failed to find " + ETH2 + " in " + map.toString(),
+ ETH2, adminConfigManager.getPhysicalInterfaceName(node, PHYSNET2));
+
+ // Check if match can be found with multiple pairs and extra other_config
+ initMap(LOCAL_IP, IPADDR);
+ assertEquals("Failed to find " + ETH2 + " in " + map.toString(),
+ ETH2, adminConfigManager.getPhysicalInterfaceName(node, PHYSNET2));
+ }
+
+ @Test
+ public void testGetPhysicalInterfaceNameNegative () throws Exception {
+ when(ovsdbConfig.getRows(any(Node.class), anyString())).thenReturn(null)
+ .thenReturn(ovsMap);
+
+ // Add a null row, an empty row and a good row to the table
+ Open_vSwitch nullRow = new Open_vSwitch();
+ Open_vSwitch emptyRow = new Open_vSwitch();
+ OvsDBMap emptyProviderMap = new OvsDBMap();
+ emptyRow.setOther_config(emptyProviderMap);
+ ovsMap.put("0", nullRow);
+ ovsMap.put("1", emptyRow);
+ initMap(PROVIDER_MAPPINGS, PHYSNET1 + ":" + ETH1);
+
+ // Check if no rows/no table is handled
+ assertEquals("Failed to return null when ovsdb table is null",
+ null, adminConfigManager.getTunnelEndPoint(node));
+
+ // Check if the null and empty rows are ignored
+ System.out.println("map = " + map.toString());
+ System.out.println("ovsMap = " + ovsMap.toString());
+ assertEquals("Failed to find " + ETH1 + " in " + map.toString(),
+ ETH1, adminConfigManager.getPhysicalInterfaceName(node, PHYSNET1));
+
+ // Should not be able to find match
+ initMap(PROVIDER_MAPPINGS, PHYSNET1 + ":" + ETH1 + "," + PHYSNET2 + ":" + ETH2);
+ assertNull("Found " + ETH3 + " in " + map.toString(),
+ adminConfigManager.getPhysicalInterfaceName(node, PHYSNET3));
+
+ // Should not be able to find match with mal-formed values
+ initMap(PROVIDER_MAPPINGS, PHYSNET1 + "-" + ETH1);
+ assertNull("Found " + ETH1 + " in " + map.toString(),
+ adminConfigManager.getPhysicalInterfaceName(node, PHYSNET1));
+ }
}
--- /dev/null
+{
+ "id": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+ "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": [
+ "55aab7d7-6159-c4fb-5b3f-42cbb55c4e7b",
+ "1215e515-a4ff-7d7e-acbf-905c6706db86",
+ "f9de4b7d-8b08-fb14-d557-3cf81d7465f4",
+ "9fe0d840-dcd3-6d3e-d410-e88538858e3a",
+ "c9cc2212-1f16-ead6-5dc0-073aed1e2c61",
+ "1387de10-9981-2ecb-32b8-4cc4806894cf",
+ "56d38607-d1dc-adba-a3fd-7e4d63e6c75d",
+ "4f72cdab-70f1-dba9-3986-3305c7ef18c8",
+ "f01b7f99-0aeb-739f-eb4a-cd467320b85c",
+ "747f9a54-e64f-57f6-ce6d-8ad358817696",
+ "7ef5413c-7f22-ac12-5444-f9be6a7c029e",
+ "ed8face9-6585-8a9b-9e09-870e3a5e5546",
+ "09bcfbe4-b01a-3615-820f-7fc3a2261e05",
+ "a1efd833-3d79-1621-9aa5-61b0fecec94a",
+ "a183a8b3-bddb-dc04-ae73-3beb11af4d04",
+ "ef3c7339-ba4d-124d-7e1f-67d9ab638277"
+ ],
+ "folders": [],
+ "timestamp": 1394529177458,
+ "synced": false,
+ "requests": [
+ {
+ "id": "09bcfbe4-b01a-3615-820f-7fc3a2261e05",
+ "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+ "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/fw/firewalls_rules",
+ "pathVariables": {},
+ "method": "GET",
+ "data": [],
+ "dataMode": "params",
+ "version": 2,
+ "tests": "",
+ "time": 1401139182979,
+ "name": "Get Neutron FWaaS Rules",
+ "description": "Return a list of Neutron v2.0 API FWaaS rules.",
+ "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+ "responses": [],
+ "synced": false
+ },
+ {
+ "id": "1215e515-a4ff-7d7e-acbf-905c6706db86",
+ "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+ "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/networks/",
+ "pathVariables": {},
+ "method": "GET",
+ "data": [],
+ "dataMode": "params",
+ "version": 2,
+ "tests": "",
+ "time": 1401139794797,
+ "name": "Get Neutron Networks",
+ "description": "Return a list of Neutron v2.0 Networks",
+ "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+ "responses": [],
+ "synced": false
+ },
+ {
+ "id": "1387de10-9981-2ecb-32b8-4cc4806894cf",
+ "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+ "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/security-groups/",
+ "pathVariables": {},
+ "method": "POST",
+ "data": "{\n \"security_group\":{\n \"name\":\"TCP Port Range\",\n \"description\":\"Example TCP port range security group\",\n \"tenant_id\":\"3B82FF05-72A2-413E-B051-222222222222\",\n \"id\":\"C9F5924D-4D08-4819-BFC4-444444444444\"\n }\n}",
+ "dataMode": "raw",
+ "version": 2,
+ "tests": "",
+ "time": 1401137715163,
+ "name": "Post Add Security Group Port Range",
+ "description": "Example Neutron v2.0 Add Security Group with a TCP Port Range",
+ "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+ "responses": [],
+ "synced": false
+ },
+ {
+ "id": "4f72cdab-70f1-dba9-3986-3305c7ef18c8",
+ "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+ "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/security-groups/",
+ "pathVariables": {},
+ "method": "GET",
+ "data": [],
+ "dataMode": "params",
+ "version": 2,
+ "tests": "",
+ "time": 1401139154340,
+ "name": "Get Neutron Security Groups",
+ "description": "Return a list of Neutron v2.0 API security groups.",
+ "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",
+ "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/networks/",
+ "pathVariables": {},
+ "method": "POST",
+ "data": "{\n \"networks\":[\n {\n \"status\":\"ACTIVE\",\n \"subnets\":[\n ],\n \"name\":\"sample_network_89\",\n \"provider:physical_network\":null,\n \"admin_state_up\":false,\n \"tenant_id\":\"60cd4f6dbc5f499982a284e7b83b5be3\",\n \"provider:network_type\":\"local\",\n \"router:external\":false,\n \"shared\":false,\n \"id\":\"e9330b1f-a2ef-4160-a991-169e56ab17f5\",\n \"provider:segmentation_id\":89\n}\n ]\n}",
+ "dataMode": "raw",
+ "version": 2,
+ "tests": "",
+ "time": 1401139810802,
+ "name": "Post Add Neutron Network",
+ "description": "Post a list of Neutron v2.0 Networks",
+ "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+ "responses": [],
+ "synced": false
+ },
+ {
+ "id": "56d38607-d1dc-adba-a3fd-7e4d63e6c75d",
+ "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+ "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/security-group-rules/",
+ "pathVariables": {},
+ "method": "POST",
+ "data": "{\n \"security_group_rule\":{\n \"id\":\"A9F6424D-4D08-4819-BFC4-333333333333\",\n \"direction\":\"ingress\",\n \"port_range_min\":\"5000\",\n \"ethertype\":\"IPv4\",\n \"port_range_max\":\"6000\",\n \"protocol\":\"tcp\",\n \"remote_ip_prefix\":\"172.16.10.0/24\",\n \"remote_group_id\":\"85cc3048-abc3-43cc-89b3-377341426ac5\",\n \"security_group_id\":\"C9F5924D-4D08-4819-BFC4-444444444444\",\n \"tenant_id\":\"3B82FF05-72A2-413E-B051-222222222222\"\n }\n}\n",
+ "dataMode": "raw",
+ "name": "Post Add Security Rule Port Range",
+ "description": "Neutron v2.0 Add a Neutron Security Rule with a TCP Port Range.",
+ "descriptionFormat": "html",
+ "time": 1401138106104,
+ "version": 2,
+ "responses": [],
+ "tests": "",
+ "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",
+ "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/fw/firewalls",
+ "pathVariables": {},
+ "method": "POST",
+ "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",
+ "version": 2,
+ "tests": "",
+ "time": 1401140100321,
+ "name": "Post Add Neutron FWaaS Firewall",
+ "description": "Example posting of a Neutron v2.0 Neutron FWaaS firewall.",
+ "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+ "responses": [],
+ "synced": false
+ },
+ {
+ "id": "7ef5413c-7f22-ac12-5444-f9be6a7c029e",
+ "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+ "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/fw/firewalls",
+ "pathVariables": {},
+ "method": "GET",
+ "data": [],
+ "dataMode": "params",
+ "version": 2,
+ "tests": "",
+ "time": 1401139224214,
+ "name": "Get Neutron FWaaS Firewalls",
+ "description": "Return a list of Neutron FWaaS v2.0 API FWaaS firewalls.",
+ "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+ "responses": [],
+ "synced": false
+ },
+ {
+ "id": "9fe0d840-dcd3-6d3e-d410-e88538858e3a",
+ "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+ "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/security-group-rules/",
+ "pathVariables": {},
+ "method": "POST",
+ "data": "{\n \"security_group_rule\":{\n \"id\":\"A9F6424D-4D08-4819-BFC4-444444444444\",\n \"direction\":\"ingress\",\n \"port_range_min\":\"80\",\n \"ethertype\":\"IPv4\",\n \"port_range_max\":\"80\",\n \"protocol\":\"tcp\",\n \"remote_ip_prefix\":\"172.0.0.0/24\",\n \"remote_group_id\":\"85cc3048-abc3-43cc-89b3-377341426ac5\",\n \"security_group_id\":\"C9F5924D-4D08-4819-BFC4-111111111111\",\n \"tenant_id\":\"3B82FF05-72A2-413E-B051-222222222222\"\n }\n}\n",
+ "dataMode": "raw",
+ "version": 2,
+ "tests": "",
+ "time": 1401137905549,
+ "name": "Post Add Security Rules Frontend Tier",
+ "description": "Example Neutron v2.0 security rule for a front web tier.",
+ "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+ "responses": [],
+ "synced": false
+ },
+ {
+ "id": "a183a8b3-bddb-dc04-ae73-3beb11af4d04",
+ "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+ "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/fw/firewalls_policies",
+ "pathVariables": {},
+ "method": "GET",
+ "data": [],
+ "dataMode": "params",
+ "version": 2,
+ "tests": "",
+ "time": 1397457663853,
+ "name": "Get Neutron FWaaS Policies",
+ "description": "Return a list of Neutron v2.0 Neutron FWaaS Firewall policies.",
+ "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+ "responses": [],
+ "synced": false
+ },
+ {
+ "id": "a1efd833-3d79-1621-9aa5-61b0fecec94a",
+ "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+ "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/fw/firewalls_policies",
+ "pathVariables": {},
+ "method": "POST",
+ "data": "{\n \"firewall_policies\": [\n {\n \"audited\": false,\n \"description\": \"\",\n \"firewall_rules\": [\n \"8722e0e0-9cc9-4490-9660-8c9a5732fbb0\"\n ],\n \"id\": \"c69933c1-b472-44f9-8226-30dc4ffd454c\",\n \"name\": \"Example FWaaS Policy\",\n \"shared\": false,\n \"tenant_id\": \"45977fa2dbd7482098dd68d0d8970117\"\n }\n ]\n}",
+ "dataMode": "raw",
+ "version": 2,
+ "tests": "",
+ "time": 1401139374457,
+ "name": "Post Add Neutron FWaaS Policy",
+ "description": "Example posting of a Neutron v2.0 FWaaS policy.",
+ "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",
+ "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/security-group-rules/",
+ "pathVariables": {},
+ "method": "POST",
+ "data": "{\n \"security_group_rule\":{\n \"id\":\"A9F6424D-4D08-4819-BFC4-333333333333\",\n \"direction\":\"ingress\",\n \"port_range_min\":\"3306\",\n \"ethertype\":\"IPv4\",\n \"port_range_max\":\"3306\",\n \"protocol\":\"tcp\",\n \"remote_ip_prefix\":\"10.0.0.0/24\",\n \"remote_group_id\":\"85cc3048-abc3-43cc-89b3-377341426ac5\",\n \"security_group_id\":\"C9F5924D-4D08-4819-BFC4-111111111111\",\n \"tenant_id\":\"3B82FF05-72A2-413E-B051-222222222222\"\n }\n}\n",
+ "dataMode": "raw",
+ "version": 2,
+ "tests": "",
+ "time": 1401137493078,
+ "name": "Post Add Security Rule Backend Tier",
+ "description": "Neutron v2.0 Add a Neutron Security Rule for a backend database tier example",
+ "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+ "responses": [],
+ "synced": false
+ },
+ {
+ "id": "ed8face9-6585-8a9b-9e09-870e3a5e5546",
+ "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+ "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/fw/firewalls_rules",
+ "pathVariables": {},
+ "method": "POST",
+ "data": "{\n \"firewall_rules\": [\n {\n \"action\": \"allow\",\n \"description\": \"Example FWaaS Rule\",\n \"destination_ip_address\": null,\n \"destination_port\": \"22\",\n \"enabled\": true,\n \"firewall_policy_id\": \"c69933c1-b472-44f9-8226-30dc4ffd454c\",\n \"id\": \"8722e0e0-9cc9-4490-9660-8c9a5732fbb0\",\n \"ip_version\": 4,\n \"name\": \"ALLOW_SSH\",\n \"position\": 1,\n \"protocol\": \"tcp\",\n \"shared\": false,\n \"source_ip_address\": null,\n \"source_port\": null,\n \"tenant_id\": \"45977fa2dbd7482098dd68d0d8970117\"\n }\n ]\n}",
+ "dataMode": "raw",
+ "version": 2,
+ "tests": "",
+ "time": 1401139588833,
+ "name": "Post Add Neutron FWaaS Rule",
+ "description": "Example posting of a Neutron v2.0 Neutron FWaaS firewall rule.",
+ "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+ "responses": [],
+ "synced": false
+ },
+ {
+ "id": "ef3c7339-ba4d-124d-7e1f-67d9ab638277",
+ "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+ "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/ports/",
+ "pathVariables": {},
+ "method": "GET",
+ "data": [],
+ "dataMode": "params",
+ "version": 2,
+ "tests": "",
+ "time": 1401139136358,
+ "name": "Get Neutron Ports",
+ "description": "Return a list of Neutron v2.0 API ports.",
+ "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+ "responses": [],
+ "synced": false
+ },
+ {
+ "id": "f01b7f99-0aeb-739f-eb4a-cd467320b85c",
+ "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+ "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/security-group-rules/",
+ "pathVariables": {},
+ "method": "GET",
+ "data": [],
+ "dataMode": "params",
+ "version": 2,
+ "tests": "",
+ "time": 1401139648839,
+ "name": "Get Neutron Security Rules",
+ "description": "Return a list of Neutron v2.0 security rules.",
+ "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+ "responses": [],
+ "synced": false
+ },
+ {
+ "id": "f9de4b7d-8b08-fb14-d557-3cf81d7465f4",
+ "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nAccept: application/json\nContent-Type: application/json\n",
+ "url": "http://127.0.0.1:8080/controller/nb/v2/neutron/security-groups/",
+ "pathVariables": {},
+ "method": "POST",
+ "data": "{\n \"security_group\":{\n \"name\":\"backend_databases\",\n \"description\":\"Example security group for backend_databases\",\n \"tenant_id\":\"3B82FF05-72A2-413E-B051-222222222222\",\n \"id\":\"C9F5924D-4D08-4819-BFC4-111111111111\"\n }\n}",
+ "dataMode": "raw",
+ "version": 2,
+ "tests": "",
+ "time": 1401136080941,
+ "name": "Post Add Security Group Web Tiers",
+ "description": "Neutron v2.0 Add a web tier security group",
+ "collectionId": "bd9b142f-e3ad-452d-f088-eed1b741b937",
+ "responses": [],
+ "synced": false
+ }
+ ]
+}
\ No newline at end of file