SDNVPN-99 NAT doesn't seem to work 05/57205/1
authorPeriyasamy Palanisamy <periyasamy.palanisamy@ericsson.com>
Tue, 8 May 2018 15:24:10 +0000 (17:24 +0200)
committerPeriyasamy Palanisamy <periyasamy.palanisamy@ericsson.com>
Wed, 9 May 2018 09:47:46 +0000 (09:47 +0000)
Currently ODL is not able to accomodate both network and router in a
BGPVPN instance (https://jira.opendaylight.org/browse/NETVIRT-932 - see
the comment section). So until the fix is available, testing NAT
functionality using router without bgpvpn instance across subnets.

Change-Id: I6bedfc8e818ddd542036a87245caf4949152d66f
Signed-off-by: Periyasamy Palanisamy <periyasamy.palanisamy@ericsson.com>
(cherry picked from commit 8ed9f216d4bee43cc214d73377b5d8291bfb9e8c)

sdnvpn/lib/openstack_utils.py
sdnvpn/test/functest/testcase_8.py

index 990fa7c..447e87b 100644 (file)
@@ -877,38 +877,38 @@ def create_network_full(neutron_client,
         logger.info("A network with name '%s' already exists..." % net_name)
     else:
         neutron_client.format = 'json'
-        logger.info('Creating neutron network %s...' % net_name)
-        network_id = create_neutron_net(neutron_client, net_name)
 
+        logger.info('Creating neutron network %s...' % net_name)
+        if network_id == '':
+            network_id = create_neutron_net(neutron_client, net_name)
         if not network_id:
             return False
-
         logger.debug("Network '%s' created successfully" % network_id)
+
         logger.debug('Creating Subnet....')
-        subnet_id = create_neutron_subnet(neutron_client, subnet_name,
-                                          cidr, network_id, dns)
+        if subnet_id == '':
+            subnet_id = create_neutron_subnet(neutron_client, subnet_name,
+                                              cidr, network_id, dns)
         if not subnet_id:
             return None
-
         logger.debug("Subnet '%s' created successfully" % subnet_id)
-        logger.debug('Creating Router...')
-        router_id = create_neutron_router(neutron_client, router_name)
 
+        logger.debug('Creating Router...')
+        if router_id == '':
+            router_id = create_neutron_router(neutron_client, router_name)
         if not router_id:
             return None
-
         logger.debug("Router '%s' created successfully" % router_id)
+
         logger.debug('Adding router to subnet...')
 
         if not add_interface_router(neutron_client, router_id, subnet_id):
             return None
-
         logger.debug("Interface added successfully.")
 
         logger.debug('Adding gateway to router...')
         if not add_gateway_router(neutron_client, router_id):
             return None
-
         logger.debug("Gateway added successfully.")
 
     network_dic = {'net_id': network_id,
index 10c0653..afdfef5 100644 (file)
@@ -59,17 +59,16 @@ def main():
             TESTCASE_CONFIG.subnet_1_name,
             TESTCASE_CONFIG.subnet_1_cidr,
             TESTCASE_CONFIG.router_1_name)
-        network_2_id = test_utils.create_net(
-            neutron_client,
-            TESTCASE_CONFIG.net_2_name)
 
-        subnet_2_id = test_utils.create_subnet(
+        network_2_id, subnet_2_id, router_1_id = test_utils.create_network(
             neutron_client,
+            TESTCASE_CONFIG.net_2_name,
             TESTCASE_CONFIG.subnet_2_name,
             TESTCASE_CONFIG.subnet_2_cidr,
-            network_2_id)
+            TESTCASE_CONFIG.router_1_name)
 
         interfaces.append(tuple((router_1_id, subnet_1_id)))
+        interfaces.append(tuple((router_1_id, subnet_2_id)))
         network_ids.extend([network_1_id, network_2_id])
         router_ids.append(router_1_id)
         subnet_ids.extend([subnet_1_id, subnet_2_id])
@@ -80,13 +79,19 @@ def main():
         test_utils.open_icmp(neutron_client, sg_id)
         test_utils.open_http_port(neutron_client, sg_id)
 
+        compute_nodes = test_utils.assert_and_get_compute_nodes(nova_client)
+        av_zone_1 = "nova:" + compute_nodes[0]
+        # spawning the VMs on the same compute because fib flow (21) entries
+        # are not created properly if vm1 and vm2 are attached to two
+        # different computes
         vm_2 = test_utils.create_instance(
             nova_client,
             TESTCASE_CONFIG.instance_2_name,
             image_id,
             network_2_id,
             sg_id,
-            secgroup_name=TESTCASE_CONFIG.secgroup_name)
+            secgroup_name=TESTCASE_CONFIG.secgroup_name,
+            compute_node=av_zone_1)
         vm_2_ip = test_utils.get_instance_ip(vm_2)
 
         u1 = test_utils.generate_ping_userdata([vm_2_ip])
@@ -97,37 +102,39 @@ def main():
             network_1_id,
             sg_id,
             secgroup_name=TESTCASE_CONFIG.secgroup_name,
+            compute_node=av_zone_1,
             userdata=u1)
         instance_ids.extend([vm_1.id, vm_2.id])
-
-        results.record_action("Create VPN with eRT==iRT")
-        vpn_name = "sdnvpn-8"
-        kwargs = {
-            "import_targets": TESTCASE_CONFIG.targets,
-            "export_targets": TESTCASE_CONFIG.targets,
-            "route_distinguishers": TESTCASE_CONFIG.route_distinguishers,
-            "name": vpn_name
-        }
-        bgpvpn = test_utils.create_bgpvpn(neutron_client, **kwargs)
-        bgpvpn_id = bgpvpn['bgpvpn']['id']
-        logger.debug("VPN created details: %s" % bgpvpn)
-        bgpvpn_ids.append(bgpvpn_id)
-
-        msg = ("Associate router '%s' and net '%s' to the VPN."
-               % (TESTCASE_CONFIG.router_1_name,
-                  TESTCASE_CONFIG.net_2_name))
-        results.record_action(msg)
-        results.add_to_summary(0, "-")
-
-        test_utils.create_router_association(
-            neutron_client, bgpvpn_id, router_1_id)
-        test_utils.create_network_association(
-            neutron_client, bgpvpn_id, network_2_id)
-
-        test_utils.wait_for_bgp_router_assoc(
-            neutron_client, bgpvpn_id, router_1_id)
-        test_utils.wait_for_bgp_net_assoc(
-            neutron_client, bgpvpn_id, network_2_id)
+        # TODO: uncomment the lines 107-134 once ODL fixes
+        # the bug https://jira.opendaylight.org/browse/NETVIRT-932
+        # results.record_action("Create VPN with eRT==iRT")
+        # vpn_name = "sdnvpn-8"
+        # kwargs = {
+        #     "import_targets": TESTCASE_CONFIG.targets,
+        #     "export_targets": TESTCASE_CONFIG.targets,
+        #     "route_distinguishers": TESTCASE_CONFIG.route_distinguishers,
+        #     "name": vpn_name
+        # }
+        # bgpvpn = test_utils.create_bgpvpn(neutron_client, **kwargs)
+        # bgpvpn_id = bgpvpn['bgpvpn']['id']
+        # logger.debug("VPN created details: %s" % bgpvpn)
+        # bgpvpn_ids.append(bgpvpn_id)
+
+        # msg = ("Associate router '%s' and net '%s' to the VPN."
+        #        % (TESTCASE_CONFIG.router_1_name,
+        #           TESTCASE_CONFIG.net_2_name))
+        # results.record_action(msg)
+        # results.add_to_summary(0, "-")
+
+        # test_utils.create_router_association(
+        #     neutron_client, bgpvpn_id, router_1_id)
+        # test_utils.create_network_association(
+        #     neutron_client, bgpvpn_id, network_2_id)
+
+        # test_utils.wait_for_bgp_router_assoc(
+        #     neutron_client, bgpvpn_id, router_1_id)
+        # test_utils.wait_for_bgp_net_assoc(
+        #     neutron_client, bgpvpn_id, network_2_id)
 
         # Wait for VMs to get ips.
         instances_up = test_utils.wait_for_instances_up(vm_2)