SDNVPN-184: resources are not cleaned if tc fails 77/44777/7
authorPeriyasamy Palanisamy <periyasamy.palanisamy@ericsson.com>
Wed, 11 Oct 2017 11:14:09 +0000 (13:14 +0200)
committerPeriyasamy Palanisamy <periyasamy.palanisamy@ericsson.com>
Mon, 16 Oct 2017 09:00:34 +0000 (11:00 +0200)
* moved the cleanup code inside the finally block in each test case

Change-Id: Ifc0fee58451923117c54040c716dad6827fbc7fa
Signed-off-by: Periyasamy Palanisamy <periyasamy.palanisamy@ericsson.com>
sdnvpn/test/functest/testcase_1.py
sdnvpn/test/functest/testcase_10.py
sdnvpn/test/functest/testcase_2.py
sdnvpn/test/functest/testcase_3.py
sdnvpn/test/functest/testcase_4.py
sdnvpn/test/functest/testcase_7.py
sdnvpn/test/functest/testcase_8.py

index 937ab7a..718f305 100644 (file)
@@ -38,176 +38,182 @@ def main():
     (floatingip_ids, instance_ids, router_ids, network_ids, image_ids,
      subnet_ids, interfaces, bgpvpn_ids) = ([] for i in range(8))
 
-    image_id = os_utils.create_glance_image(glance_client,
-                                            TESTCASE_CONFIG.image_name,
-                                            COMMON_CONFIG.image_path,
-                                            disk=COMMON_CONFIG.image_format,
-                                            container="bare",
-                                            public='public')
-    image_ids.append(image_id)
-
-    network_1_id = test_utils.create_net(neutron_client,
-                                         TESTCASE_CONFIG.net_1_name)
-    subnet_1_id = test_utils.create_subnet(neutron_client,
-                                           TESTCASE_CONFIG.subnet_1_name,
-                                           TESTCASE_CONFIG.subnet_1_cidr,
-                                           network_1_id)
-
-    network_2_id = test_utils.create_net(neutron_client,
-                                         TESTCASE_CONFIG.net_2_name)
-
-    subnet_2_id = test_utils.create_subnet(neutron_client,
-                                           TESTCASE_CONFIG.subnet_2_name,
-                                           TESTCASE_CONFIG.subnet_2_cidr,
+    try:
+        image_id = os_utils.create_glance_image(
+            glance_client, TESTCASE_CONFIG.image_name,
+            COMMON_CONFIG.image_path, disk=COMMON_CONFIG.image_format,
+            container="bare", public='public')
+        image_ids.append(image_id)
+
+        network_1_id = test_utils.create_net(neutron_client,
+                                             TESTCASE_CONFIG.net_1_name)
+        subnet_1_id = test_utils.create_subnet(neutron_client,
+                                               TESTCASE_CONFIG.subnet_1_name,
+                                               TESTCASE_CONFIG.subnet_1_cidr,
+                                               network_1_id)
+
+        network_2_id = test_utils.create_net(neutron_client,
+                                             TESTCASE_CONFIG.net_2_name)
+
+        subnet_2_id = test_utils.create_subnet(neutron_client,
+                                               TESTCASE_CONFIG.subnet_2_name,
+                                               TESTCASE_CONFIG.subnet_2_cidr,
+                                               network_2_id)
+        network_ids.extend([network_1_id, network_2_id])
+        subnet_ids.extend([subnet_1_id, subnet_2_id])
+
+        sg_id = os_utils.create_security_group_full(
+            neutron_client, TESTCASE_CONFIG.secgroup_name,
+            TESTCASE_CONFIG.secgroup_descr)
+
+        compute_nodes = test_utils.assert_and_get_compute_nodes(nova_client)
+
+        av_zone_1 = "nova:" + compute_nodes[0]
+        av_zone_2 = "nova:" + compute_nodes[1]
+
+        # boot INTANCES
+        vm_2 = test_utils.create_instance(
+            nova_client,
+            TESTCASE_CONFIG.instance_2_name,
+            image_id,
+            network_1_id,
+            sg_id,
+            secgroup_name=TESTCASE_CONFIG.secgroup_name,
+            compute_node=av_zone_1)
+        vm_2_ip = test_utils.get_instance_ip(vm_2)
+
+        vm_3 = test_utils.create_instance(
+            nova_client,
+            TESTCASE_CONFIG.instance_3_name,
+            image_id,
+            network_1_id,
+            sg_id,
+            secgroup_name=TESTCASE_CONFIG.secgroup_name,
+            compute_node=av_zone_2)
+        vm_3_ip = test_utils.get_instance_ip(vm_3)
+
+        vm_5 = test_utils.create_instance(
+            nova_client,
+            TESTCASE_CONFIG.instance_5_name,
+            image_id,
+            network_2_id,
+            sg_id,
+            secgroup_name=TESTCASE_CONFIG.secgroup_name,
+            compute_node=av_zone_2)
+        vm_5_ip = test_utils.get_instance_ip(vm_5)
+
+        # We boot vm5 first because we need vm5_ip for vm4 userdata
+        u4 = test_utils.generate_ping_userdata([vm_5_ip])
+        vm_4 = test_utils.create_instance(
+            nova_client,
+            TESTCASE_CONFIG.instance_4_name,
+            image_id,
+            network_2_id,
+            sg_id,
+            secgroup_name=TESTCASE_CONFIG.secgroup_name,
+            compute_node=av_zone_1,
+            userdata=u4)
+        vm_4_ip = test_utils.get_instance_ip(vm_4)
+
+        # We boot VM1 at the end because we need to get the IPs first
+        # to generate the userdata
+        u1 = test_utils.generate_ping_userdata([vm_2_ip,
+                                                vm_3_ip,
+                                                vm_4_ip,
+                                                vm_5_ip])
+        vm_1 = test_utils.create_instance(
+            nova_client,
+            TESTCASE_CONFIG.instance_1_name,
+            image_id,
+            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, vm_3.id, vm_4.id, vm_5.id])
+
+        msg = ("Create VPN with eRT<>iRT")
+        results.record_action(msg)
+        vpn_name = "sdnvpn-" + str(randint(100000, 999999))
+        kwargs = {
+            "import_targets": TESTCASE_CONFIG.targets1,
+            "export_targets": TESTCASE_CONFIG.targets2,
+            "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 network '%s' to the VPN." %
+               TESTCASE_CONFIG.net_1_name)
+        results.record_action(msg)
+        results.add_to_summary(0, "-")
+
+        test_utils.create_network_association(
+            neutron_client, bgpvpn_id, network_1_id)
+
+        # Wait for VMs to get ips.
+        instances_up = test_utils.wait_for_instances_up(vm_1, vm_2,
+                                                        vm_3, vm_4,
+                                                        vm_5)
+
+        if not instances_up:
+            logger.error("One or more instances is down")
+            # TODO: Handle this appropriately
+
+        results.get_ping_status(vm_1, vm_2, expected="PASS", timeout=200)
+        results.get_ping_status(vm_1, vm_3, expected="PASS", timeout=30)
+        results.get_ping_status(vm_1, vm_4, expected="FAIL", timeout=30)
+
+        msg = ("Associate network '%s' to the VPN." %
+               TESTCASE_CONFIG.net_2_name)
+        results.add_to_summary(0, "-")
+        results.record_action(msg)
+        results.add_to_summary(0, "-")
+        test_utils.create_network_association(
+            neutron_client, bgpvpn_id, network_2_id)
+
+        test_utils.wait_for_bgp_net_assocs(neutron_client,
+                                           bgpvpn_id,
+                                           network_1_id,
                                            network_2_id)
-    network_ids.extend([network_1_id, network_2_id])
-    subnet_ids.extend([subnet_1_id, subnet_2_id])
-
-    sg_id = os_utils.create_security_group_full(neutron_client,
-                                                TESTCASE_CONFIG.secgroup_name,
-                                                TESTCASE_CONFIG.secgroup_descr)
-
-    compute_nodes = test_utils.assert_and_get_compute_nodes(nova_client)
-
-    av_zone_1 = "nova:" + compute_nodes[0]
-    av_zone_2 = "nova:" + compute_nodes[1]
-
-    # boot INTANCES
-    vm_2 = test_utils.create_instance(
-        nova_client,
-        TESTCASE_CONFIG.instance_2_name,
-        image_id,
-        network_1_id,
-        sg_id,
-        secgroup_name=TESTCASE_CONFIG.secgroup_name,
-        compute_node=av_zone_1)
-    vm_2_ip = test_utils.get_instance_ip(vm_2)
-
-    vm_3 = test_utils.create_instance(
-        nova_client,
-        TESTCASE_CONFIG.instance_3_name,
-        image_id,
-        network_1_id,
-        sg_id,
-        secgroup_name=TESTCASE_CONFIG.secgroup_name,
-        compute_node=av_zone_2)
-    vm_3_ip = test_utils.get_instance_ip(vm_3)
-
-    vm_5 = test_utils.create_instance(
-        nova_client,
-        TESTCASE_CONFIG.instance_5_name,
-        image_id,
-        network_2_id,
-        sg_id,
-        secgroup_name=TESTCASE_CONFIG.secgroup_name,
-        compute_node=av_zone_2)
-    vm_5_ip = test_utils.get_instance_ip(vm_5)
-
-    # We boot vm5 first because we need vm5_ip for vm4 userdata
-    u4 = test_utils.generate_ping_userdata([vm_5_ip])
-    vm_4 = test_utils.create_instance(
-        nova_client,
-        TESTCASE_CONFIG.instance_4_name,
-        image_id,
-        network_2_id,
-        sg_id,
-        secgroup_name=TESTCASE_CONFIG.secgroup_name,
-        compute_node=av_zone_1,
-        userdata=u4)
-    vm_4_ip = test_utils.get_instance_ip(vm_4)
-
-    # We boot VM1 at the end because we need to get the IPs first to generate
-    # the userdata
-    u1 = test_utils.generate_ping_userdata([vm_2_ip,
-                                            vm_3_ip,
-                                            vm_4_ip,
-                                            vm_5_ip])
-    vm_1 = test_utils.create_instance(
-        nova_client,
-        TESTCASE_CONFIG.instance_1_name,
-        image_id,
-        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, vm_3.id, vm_4.id, vm_5.id])
-
-    msg = ("Create VPN with eRT<>iRT")
-    results.record_action(msg)
-    vpn_name = "sdnvpn-" + str(randint(100000, 999999))
-    kwargs = {
-        "import_targets": TESTCASE_CONFIG.targets1,
-        "export_targets": TESTCASE_CONFIG.targets2,
-        "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 network '%s' to the VPN." % TESTCASE_CONFIG.net_1_name)
-    results.record_action(msg)
-    results.add_to_summary(0, "-")
-
-    test_utils.create_network_association(
-        neutron_client, bgpvpn_id, network_1_id)
-
-    # Wait for VMs to get ips.
-    instances_up = test_utils.wait_for_instances_up(vm_1, vm_2,
-                                                    vm_3, vm_4,
-                                                    vm_5)
-
-    if not instances_up:
-        logger.error("One or more instances is down")
-        # TODO: Handle this appropriately
-
-    results.get_ping_status(vm_1, vm_2, expected="PASS", timeout=200)
-    results.get_ping_status(vm_1, vm_3, expected="PASS", timeout=30)
-    results.get_ping_status(vm_1, vm_4, expected="FAIL", timeout=30)
-
-    msg = ("Associate network '%s' to the VPN." % TESTCASE_CONFIG.net_2_name)
-    results.add_to_summary(0, "-")
-    results.record_action(msg)
-    results.add_to_summary(0, "-")
-    test_utils.create_network_association(
-        neutron_client, bgpvpn_id, network_2_id)
-
-    test_utils.wait_for_bgp_net_assocs(neutron_client,
-                                       bgpvpn_id,
-                                       network_1_id,
-                                       network_2_id)
-
-    logger.info("Waiting for the VMs to connect to each other using the"
-                " updated network configuration")
-    test_utils.wait_before_subtest()
-
-    results.get_ping_status(vm_4, vm_5, expected="PASS", timeout=30)
-    # TODO enable again when isolation in VPN with iRT != eRT works
-    # results.get_ping_status(vm_1, vm_4, expected="FAIL", timeout=30)
-    # results.get_ping_status(vm_1, vm_5, expected="FAIL", timeout=30)
-
-    msg = ("Update VPN with eRT=iRT ...")
-    results.add_to_summary(0, "-")
-    results.record_action(msg)
-    results.add_to_summary(0, "-")
-    kwargs = {"import_targets": TESTCASE_CONFIG.targets1,
-              "export_targets": TESTCASE_CONFIG.targets1,
-              "name": vpn_name}
-    bgpvpn = test_utils.update_bgpvpn(neutron_client, bgpvpn_id, **kwargs)
-
-    logger.info("Waiting for the VMs to connect to each other using the"
-                " updated network configuration")
-    test_utils.wait_before_subtest()
-
-    results.get_ping_status(vm_1, vm_4, expected="PASS", timeout=30)
-    results.get_ping_status(vm_1, vm_5, expected="PASS", timeout=30)
-
-    test_utils.cleanup_nova(nova_client, instance_ids, image_ids)
-    test_utils.cleanup_neutron(neutron_client, floatingip_ids, bgpvpn_ids,
-                               interfaces, subnet_ids, router_ids,
-                               network_ids)
+
+        logger.info("Waiting for the VMs to connect to each other using the"
+                    " updated network configuration")
+        test_utils.wait_before_subtest()
+
+        results.get_ping_status(vm_4, vm_5, expected="PASS", timeout=30)
+        # TODO enable again when isolation in VPN with iRT != eRT works
+        # results.get_ping_status(vm_1, vm_4, expected="FAIL", timeout=30)
+        # results.get_ping_status(vm_1, vm_5, expected="FAIL", timeout=30)
+
+        msg = ("Update VPN with eRT=iRT ...")
+        results.add_to_summary(0, "-")
+        results.record_action(msg)
+        results.add_to_summary(0, "-")
+        kwargs = {"import_targets": TESTCASE_CONFIG.targets1,
+                  "export_targets": TESTCASE_CONFIG.targets1,
+                  "name": vpn_name}
+        bgpvpn = test_utils.update_bgpvpn(neutron_client,
+                                          bgpvpn_id, **kwargs)
+
+        logger.info("Waiting for the VMs to connect to each other using the"
+                    " updated network configuration")
+        test_utils.wait_before_subtest()
+
+        results.get_ping_status(vm_1, vm_4, expected="PASS", timeout=30)
+        results.get_ping_status(vm_1, vm_5, expected="PASS", timeout=30)
+
+    except Exception as e:
+        logger.error("exception occurred while executing testcase_1: %s", e)
+        raise
+    finally:
+        test_utils.cleanup_nova(nova_client, instance_ids, image_ids)
+        test_utils.cleanup_neutron(neutron_client, floatingip_ids,
+                                   bgpvpn_ids, interfaces, subnet_ids,
+                                   router_ids, network_ids)
 
     return results.compile_summary()
 
index 5c0e99b..cbad82d 100644 (file)
@@ -13,7 +13,6 @@ import logging
 import re
 import sys
 import time
-import traceback
 
 from functest.utils import openstack_utils as os_utils
 from multiprocessing import Process, Manager, Lock
@@ -249,10 +248,9 @@ def main():
         else:
             results.add_failure(monitor_err_msg)
 
-    except:
-        logging.exception("======== EXCEPTION =========")
-        exc_type, exc_value, exc_tb = sys.exc_info()
-        traceback.print_exception(exc_type, exc_value, exc_tb)
+    except Exception as e:
+        logger.error("exception occurred while executing testcase_10: %s", e)
+        raise
     finally:
         # Give a stop signal to all threads
         logging.info("Sending stop signal to monitor thread")
@@ -262,10 +260,10 @@ def main():
         for thread in threads:
             thread.join()
 
-    test_utils.cleanup_nova(nova_client, instance_ids, image_ids)
-    test_utils.cleanup_neutron(neutron_client, floatingip_ids, bgpvpn_ids,
-                               interfaces, subnet_ids, router_ids,
-                               network_ids)
+        test_utils.cleanup_nova(nova_client, instance_ids, image_ids)
+        test_utils.cleanup_neutron(neutron_client, floatingip_ids, bgpvpn_ids,
+                                   interfaces, subnet_ids, router_ids,
+                                   network_ids)
 
     return results.compile_summary()
 
index 853e229..11ab041 100644 (file)
@@ -38,216 +38,229 @@ def main():
     (floatingip_ids, instance_ids, router_ids, network_ids, image_ids,
      subnet_ids, interfaces, bgpvpn_ids) = ([] for i in range(8))
 
-    logger.debug("Using private key %s injected to the VMs."
-                 % COMMON_CONFIG.keyfile_path)
-    keyfile = open(COMMON_CONFIG.keyfile_path, 'r')
-    key = keyfile.read()
-    keyfile.close()
-    files = {"/home/cirros/id_rsa": key}
-
-    image_id = os_utils.create_glance_image(glance_client,
-                                            TESTCASE_CONFIG.image_name,
-                                            COMMON_CONFIG.image_path,
-                                            disk=COMMON_CONFIG.image_format,
-                                            container="bare",
-                                            public='public')
-    image_ids.append(image_id)
-
-    network_1_id = test_utils.create_net(
-        neutron_client,
-        TESTCASE_CONFIG.net_1_name)
-    subnet_1a_id = test_utils.create_subnet(
-        neutron_client,
-        TESTCASE_CONFIG.subnet_1a_name,
-        TESTCASE_CONFIG.subnet_1a_cidr,
-        network_1_id)
-    subnet_1b_id = test_utils.create_subnet(
-        neutron_client,
-        TESTCASE_CONFIG.subnet_1b_name,
-        TESTCASE_CONFIG.subnet_1b_cidr,
-        network_1_id)
-
-    network_2_id = test_utils.create_net(
-        neutron_client,
-        TESTCASE_CONFIG.net_2_name)
-    subnet_2a_id = test_utils.create_subnet(
-        neutron_client,
-        TESTCASE_CONFIG.subnet_2a_name,
-        TESTCASE_CONFIG.subnet_2a_cidr,
-        network_2_id)
-    subnet_2b_id = test_utils.create_subnet(
-        neutron_client,
-        TESTCASE_CONFIG.subnet_2b_name,
-        TESTCASE_CONFIG.subnet_2b_cidr,
-        network_2_id)
-    network_ids.extend([network_1_id, network_2_id])
-    subnet_ids.extend([subnet_1a_id, subnet_1b_id, subnet_2a_id, subnet_2b_id])
-
-    sg_id = os_utils.create_security_group_full(neutron_client,
-                                                TESTCASE_CONFIG.secgroup_name,
-                                                TESTCASE_CONFIG.secgroup_descr)
-
-    compute_nodes = test_utils.assert_and_get_compute_nodes(nova_client)
-
-    av_zone_1 = "nova:" + compute_nodes[0]
-    av_zone_2 = "nova:" + compute_nodes[1]
-
-    # boot INTANCES
-    userdata_common = test_utils.generate_userdata_common()
-    vm_2 = test_utils.create_instance(
-        nova_client,
-        TESTCASE_CONFIG.instance_2_name,
-        image_id,
-        network_1_id,
-        sg_id,
-        fixed_ip=TESTCASE_CONFIG.instance_2_ip,
-        secgroup_name=TESTCASE_CONFIG.secgroup_name,
-        compute_node=av_zone_1,
-        userdata=userdata_common)
-
-    vm_3 = test_utils.create_instance(
-        nova_client,
-        TESTCASE_CONFIG.instance_3_name,
-        image_id,
-        network_1_id,
-        sg_id,
-        fixed_ip=TESTCASE_CONFIG.instance_3_ip,
-        secgroup_name=TESTCASE_CONFIG.secgroup_name,
-        compute_node=av_zone_2,
-        userdata=userdata_common)
-
-    vm_5 = test_utils.create_instance(
-        nova_client,
-        TESTCASE_CONFIG.instance_5_name,
-        image_id,
-        network_2_id,
-        sg_id,
-        fixed_ip=TESTCASE_CONFIG.instance_5_ip,
-        secgroup_name=TESTCASE_CONFIG.secgroup_name,
-        compute_node=av_zone_2,
-        userdata=userdata_common)
-
-    # We boot vm5 first because we need vm5_ip for vm4 userdata
-    u4 = test_utils.generate_userdata_with_ssh(
-        [TESTCASE_CONFIG.instance_1_ip,
-         TESTCASE_CONFIG.instance_3_ip,
-         TESTCASE_CONFIG.instance_5_ip])
-    vm_4 = test_utils.create_instance(
-        nova_client,
-        TESTCASE_CONFIG.instance_4_name,
-        image_id,
-        network_2_id,
-        sg_id,
-        fixed_ip=TESTCASE_CONFIG.instance_4_ip,
-        secgroup_name=TESTCASE_CONFIG.secgroup_name,
-        compute_node=av_zone_1,
-        userdata=u4,
-        files=files)
-
-    # We boot VM1 at the end because we need to get the IPs first to generate
-    # the userdata
-    u1 = test_utils.generate_userdata_with_ssh(
-        [TESTCASE_CONFIG.instance_2_ip,
-         TESTCASE_CONFIG.instance_3_ip,
-         TESTCASE_CONFIG.instance_4_ip,
-         TESTCASE_CONFIG.instance_5_ip])
-    vm_1 = test_utils.create_instance(
-        nova_client,
-        TESTCASE_CONFIG.instance_1_name,
-        image_id,
-        network_1_id,
-        sg_id,
-        fixed_ip=TESTCASE_CONFIG.instance_1_ip,
-        secgroup_name=TESTCASE_CONFIG.secgroup_name,
-        compute_node=av_zone_1,
-        userdata=u1,
-        files=files)
-    instance_ids.extend([vm_1.id, vm_2.id, vm_3.id, vm_4.id, vm_5.id])
-
-    msg = ("Create VPN1 with eRT=iRT")
-    results.record_action(msg)
-    vpn1_name = "sdnvpn-1-" + str(randint(100000, 999999))
-    kwargs = {"import_targets": TESTCASE_CONFIG.targets2,
-              "export_targets": TESTCASE_CONFIG.targets2,
-              "route_targets": TESTCASE_CONFIG.targets2,
-              "route_distinguishers": TESTCASE_CONFIG.route_distinguishers1,
-              "name": vpn1_name}
-    bgpvpn1 = test_utils.create_bgpvpn(neutron_client, **kwargs)
-    bgpvpn1_id = bgpvpn1['bgpvpn']['id']
-    logger.debug("VPN1 created details: %s" % bgpvpn1)
-    bgpvpn_ids.append(bgpvpn1_id)
-
-    msg = ("Associate network '%s' to the VPN." % TESTCASE_CONFIG.net_1_name)
-    results.record_action(msg)
-    results.add_to_summary(0, "-")
-
-    test_utils.create_network_association(
-        neutron_client, bgpvpn1_id, network_1_id)
-
-    # Wait for VMs to get ips.
-    instances_up = test_utils.wait_for_instances_up(vm_1, vm_2,
-                                                    vm_3, vm_4,
-                                                    vm_5)
-
-    if not instances_up:
-        logger.error("One or more instances is down")
-        sys.exit(-1)
-
-    logger.info("Waiting for the VMs to connect to each other using the"
-                " updated network configuration")
-    test_utils.wait_before_subtest()
-
-    # 10.10.10.12 should return sdnvpn-2 to sdnvpn-1
-    results.check_ssh_output(vm_1, vm_2,
-                             expected=TESTCASE_CONFIG.instance_2_name,
-                             timeout=200)
-    # 10.10.11.13 should return sdnvpn-3 to sdnvpn-1
-    results.check_ssh_output(vm_1, vm_3,
-                             expected=TESTCASE_CONFIG.instance_3_name,
-                             timeout=30)
-
-    results.add_to_summary(0, "-")
-    msg = ("Create VPN2 with eRT=iRT")
-    results.record_action(msg)
-    vpn2_name = "sdnvpn-2-" + str(randint(100000, 999999))
-    kwargs = {"import_targets": TESTCASE_CONFIG.targets1,
-              "export_targets": TESTCASE_CONFIG.targets1,
-              "route_targets": TESTCASE_CONFIG.targets1,
-              "route_distinguishers": TESTCASE_CONFIG.route_distinguishers2,
-              "name": vpn2_name}
-    bgpvpn2 = test_utils.create_bgpvpn(neutron_client, **kwargs)
-    bgpvpn2_id = bgpvpn2['bgpvpn']['id']
-    logger.debug("VPN created details: %s" % bgpvpn2)
-    bgpvpn_ids.append(bgpvpn2_id)
-
-    msg = ("Associate network '%s' to the VPN2." % TESTCASE_CONFIG.net_2_name)
-    results.record_action(msg)
-    results.add_to_summary(0, "-")
-
-    test_utils.create_network_association(
-        neutron_client, bgpvpn2_id, network_2_id)
-
-    test_utils.wait_for_bgp_net_assoc(neutron_client, bgpvpn1_id, network_1_id)
-    test_utils.wait_for_bgp_net_assoc(neutron_client, bgpvpn2_id, network_2_id)
-
-    logger.info("Waiting for the VMs to connect to each other using the"
-                " updated network configuration")
-    test_utils.wait_before_subtest()
-
-    # 10.10.11.13 should return sdnvpn-5 to sdnvpn-4
-    results.check_ssh_output(vm_4, vm_5,
-                             expected=TESTCASE_CONFIG.instance_5_name,
-                             timeout=30)
-
-    # 10.10.10.11 should return "not reachable" to sdnvpn-4
-    results.check_ssh_output(vm_4, vm_1,
-                             expected="not reachable",
-                             timeout=30)
-
-    test_utils.cleanup_nova(nova_client, instance_ids, image_ids)
-    test_utils.cleanup_neutron(neutron_client, floatingip_ids, bgpvpn_ids,
-                               interfaces, subnet_ids, router_ids,
-                               network_ids)
+    try:
+        logger.debug("Using private key %s injected to the VMs."
+                     % COMMON_CONFIG.keyfile_path)
+        keyfile = open(COMMON_CONFIG.keyfile_path, 'r')
+        key = keyfile.read()
+        keyfile.close()
+        files = {"/home/cirros/id_rsa": key}
+
+        image_id = os_utils.create_glance_image(
+            glance_client, TESTCASE_CONFIG.image_name,
+            COMMON_CONFIG.image_path, disk=COMMON_CONFIG.image_format,
+            container="bare", public='public')
+        image_ids.append(image_id)
+
+        network_1_id = test_utils.create_net(
+            neutron_client,
+            TESTCASE_CONFIG.net_1_name)
+        subnet_1a_id = test_utils.create_subnet(
+            neutron_client,
+            TESTCASE_CONFIG.subnet_1a_name,
+            TESTCASE_CONFIG.subnet_1a_cidr,
+            network_1_id)
+        subnet_1b_id = test_utils.create_subnet(
+            neutron_client,
+            TESTCASE_CONFIG.subnet_1b_name,
+            TESTCASE_CONFIG.subnet_1b_cidr,
+            network_1_id)
+
+        network_2_id = test_utils.create_net(
+            neutron_client,
+            TESTCASE_CONFIG.net_2_name)
+        subnet_2a_id = test_utils.create_subnet(
+            neutron_client,
+            TESTCASE_CONFIG.subnet_2a_name,
+            TESTCASE_CONFIG.subnet_2a_cidr,
+            network_2_id)
+        subnet_2b_id = test_utils.create_subnet(
+            neutron_client,
+            TESTCASE_CONFIG.subnet_2b_name,
+            TESTCASE_CONFIG.subnet_2b_cidr,
+            network_2_id)
+        network_ids.extend([network_1_id, network_2_id])
+        subnet_ids.extend([subnet_1a_id, subnet_1b_id, subnet_2a_id,
+                           subnet_2b_id])
+
+        sg_id = os_utils.create_security_group_full(
+            neutron_client, TESTCASE_CONFIG.secgroup_name,
+            TESTCASE_CONFIG.secgroup_descr)
+
+        compute_nodes = test_utils.assert_and_get_compute_nodes(nova_client)
+
+        av_zone_1 = "nova:" + compute_nodes[0]
+        av_zone_2 = "nova:" + compute_nodes[1]
+
+        # boot INTANCES
+        userdata_common = test_utils.generate_userdata_common()
+        vm_2 = test_utils.create_instance(
+            nova_client,
+            TESTCASE_CONFIG.instance_2_name,
+            image_id,
+            network_1_id,
+            sg_id,
+            fixed_ip=TESTCASE_CONFIG.instance_2_ip,
+            secgroup_name=TESTCASE_CONFIG.secgroup_name,
+            compute_node=av_zone_1,
+            userdata=userdata_common)
+
+        vm_3 = test_utils.create_instance(
+            nova_client,
+            TESTCASE_CONFIG.instance_3_name,
+            image_id,
+            network_1_id,
+            sg_id,
+            fixed_ip=TESTCASE_CONFIG.instance_3_ip,
+            secgroup_name=TESTCASE_CONFIG.secgroup_name,
+            compute_node=av_zone_2,
+            userdata=userdata_common)
+
+        vm_5 = test_utils.create_instance(
+            nova_client,
+            TESTCASE_CONFIG.instance_5_name,
+            image_id,
+            network_2_id,
+            sg_id,
+            fixed_ip=TESTCASE_CONFIG.instance_5_ip,
+            secgroup_name=TESTCASE_CONFIG.secgroup_name,
+            compute_node=av_zone_2,
+            userdata=userdata_common)
+
+        # We boot vm5 first because we need vm5_ip for vm4 userdata
+        u4 = test_utils.generate_userdata_with_ssh(
+            [TESTCASE_CONFIG.instance_1_ip,
+             TESTCASE_CONFIG.instance_3_ip,
+             TESTCASE_CONFIG.instance_5_ip])
+        vm_4 = test_utils.create_instance(
+            nova_client,
+            TESTCASE_CONFIG.instance_4_name,
+            image_id,
+            network_2_id,
+            sg_id,
+            fixed_ip=TESTCASE_CONFIG.instance_4_ip,
+            secgroup_name=TESTCASE_CONFIG.secgroup_name,
+            compute_node=av_zone_1,
+            userdata=u4,
+            files=files)
+
+        # We boot VM1 at the end because we need to get the IPs first
+        # to generate the userdata
+        u1 = test_utils.generate_userdata_with_ssh(
+            [TESTCASE_CONFIG.instance_2_ip,
+             TESTCASE_CONFIG.instance_3_ip,
+             TESTCASE_CONFIG.instance_4_ip,
+             TESTCASE_CONFIG.instance_5_ip])
+        vm_1 = test_utils.create_instance(
+            nova_client,
+            TESTCASE_CONFIG.instance_1_name,
+            image_id,
+            network_1_id,
+            sg_id,
+            fixed_ip=TESTCASE_CONFIG.instance_1_ip,
+            secgroup_name=TESTCASE_CONFIG.secgroup_name,
+            compute_node=av_zone_1,
+            userdata=u1,
+            files=files)
+        instance_ids.extend([vm_1.id, vm_2.id, vm_3.id, vm_4.id, vm_5.id])
+
+        msg = ("Create VPN1 with eRT=iRT")
+        results.record_action(msg)
+        vpn1_name = "sdnvpn-1-" + str(randint(100000, 999999))
+        kwargs = {
+            "import_targets": TESTCASE_CONFIG.targets2,
+            "export_targets": TESTCASE_CONFIG.targets2,
+            "route_targets": TESTCASE_CONFIG.targets2,
+            "route_distinguishers": TESTCASE_CONFIG.route_distinguishers1,
+            "name": vpn1_name
+        }
+        bgpvpn1 = test_utils.create_bgpvpn(neutron_client, **kwargs)
+        bgpvpn1_id = bgpvpn1['bgpvpn']['id']
+        logger.debug("VPN1 created details: %s" % bgpvpn1)
+        bgpvpn_ids.append(bgpvpn1_id)
+
+        msg = ("Associate network '%s' to the VPN." %
+               TESTCASE_CONFIG.net_1_name)
+        results.record_action(msg)
+        results.add_to_summary(0, "-")
+
+        test_utils.create_network_association(
+            neutron_client, bgpvpn1_id, network_1_id)
+
+        # Wait for VMs to get ips.
+        instances_up = test_utils.wait_for_instances_up(vm_1, vm_2,
+                                                        vm_3, vm_4,
+                                                        vm_5)
+
+        if not instances_up:
+            logger.error("One or more instances is down")
+            sys.exit(-1)
+
+        logger.info("Waiting for the VMs to connect to each other using the"
+                    " updated network configuration")
+        test_utils.wait_before_subtest()
+
+        # 10.10.10.12 should return sdnvpn-2 to sdnvpn-1
+        results.check_ssh_output(vm_1, vm_2,
+                                 expected=TESTCASE_CONFIG.instance_2_name,
+                                 timeout=200)
+        # 10.10.11.13 should return sdnvpn-3 to sdnvpn-1
+        results.check_ssh_output(vm_1, vm_3,
+                                 expected=TESTCASE_CONFIG.instance_3_name,
+                                 timeout=30)
+
+        results.add_to_summary(0, "-")
+        msg = ("Create VPN2 with eRT=iRT")
+        results.record_action(msg)
+        vpn2_name = "sdnvpn-2-" + str(randint(100000, 999999))
+        kwargs = {
+            "import_targets": TESTCASE_CONFIG.targets1,
+            "export_targets": TESTCASE_CONFIG.targets1,
+            "route_targets": TESTCASE_CONFIG.targets1,
+            "route_distinguishers": TESTCASE_CONFIG.route_distinguishers2,
+            "name": vpn2_name
+        }
+        bgpvpn2 = test_utils.create_bgpvpn(neutron_client, **kwargs)
+        bgpvpn2_id = bgpvpn2['bgpvpn']['id']
+        logger.debug("VPN created details: %s" % bgpvpn2)
+        bgpvpn_ids.append(bgpvpn2_id)
+
+        msg = ("Associate network '%s' to the VPN2." %
+               TESTCASE_CONFIG.net_2_name)
+        results.record_action(msg)
+        results.add_to_summary(0, "-")
+
+        test_utils.create_network_association(
+            neutron_client, bgpvpn2_id, network_2_id)
+
+        test_utils.wait_for_bgp_net_assoc(neutron_client,
+                                          bgpvpn1_id, network_1_id)
+        test_utils.wait_for_bgp_net_assoc(neutron_client,
+                                          bgpvpn2_id, network_2_id)
+
+        logger.info("Waiting for the VMs to connect to each other using the"
+                    " updated network configuration")
+        test_utils.wait_before_subtest()
+
+        # 10.10.11.13 should return sdnvpn-5 to sdnvpn-4
+        results.check_ssh_output(vm_4, vm_5,
+                                 expected=TESTCASE_CONFIG.instance_5_name,
+                                 timeout=30)
+
+        # 10.10.10.11 should return "not reachable" to sdnvpn-4
+        results.check_ssh_output(vm_4, vm_1,
+                                 expected="not reachable",
+                                 timeout=30)
+
+    except Exception as e:
+        logger.error("exception occurred while executing testcase_2: %s", e)
+        raise
+    finally:
+        test_utils.cleanup_nova(nova_client, instance_ids, image_ids)
+        test_utils.cleanup_neutron(neutron_client, floatingip_ids,
+                                   bgpvpn_ids, interfaces, subnet_ids,
+                                   router_ids, network_ids)
+
     return results.compile_summary()
 
 
index e7b8207..7e14505 100644 (file)
@@ -145,139 +145,147 @@ def main():
     (floatingip_ids, instance_ids, router_ids, network_ids, image_ids,
      subnet_ids, interfaces, bgpvpn_ids) = ([] for i in range(8))
 
-    sg_id = os_utils.create_security_group_full(neutron_client,
-                                                TESTCASE_CONFIG.secgroup_name,
-                                                TESTCASE_CONFIG.secgroup_descr)
-    test_utils.open_icmp(neutron_client, sg_id)
-    test_utils.open_http_port(neutron_client, sg_id)
-
-    test_utils.open_bgp_port(neutron_client, sg_id)
-    net_id, subnet_1_id, router_1_id = test_utils.create_network(
-        neutron_client,
-        TESTCASE_CONFIG.net_1_name,
-        TESTCASE_CONFIG.subnet_1_name,
-        TESTCASE_CONFIG.subnet_1_cidr,
-        TESTCASE_CONFIG.router_1_name)
-
-    quagga_net_id, subnet_quagga_id, \
-        router_quagga_id = test_utils.create_network(
-            neutron_client,
-            TESTCASE_CONFIG.quagga_net_name,
-            TESTCASE_CONFIG.quagga_subnet_name,
-            TESTCASE_CONFIG.quagga_subnet_cidr,
-            TESTCASE_CONFIG.quagga_router_name)
-
-    interfaces.append(tuple((router_1_id, subnet_1_id)))
-    interfaces.append(tuple((router_quagga_id, subnet_quagga_id)))
-    network_ids.extend([net_id, quagga_net_id])
-    router_ids.extend([router_1_id, router_quagga_id])
-    subnet_ids.extend([subnet_1_id, subnet_quagga_id])
-
-    installer_type = str(os.environ['INSTALLER_TYPE'].lower())
-    if installer_type == "fuel":
-        disk = 'raw'
-    elif installer_type == "apex":
-        disk = 'qcow2'
-    else:
-        logger.error("Incompatible installer type")
-
-    ubuntu_image_id = os_utils.create_glance_image(
-        glance_client,
-        COMMON_CONFIG.ubuntu_image_name,
-        COMMON_CONFIG.ubuntu_image_path,
-        disk,
-        container="bare",
-        public="public")
-
-    image_ids.append(ubuntu_image_id)
-
-    # NOTE(rski) The order of this seems a bit weird but
-    # there is a reason for this, namely
-    # https://jira.opnfv.org/projects/SDNVPN/issues/SDNVPN-99
-    # so we create the quagga instance using cloud-init
-    # and immediately give it a floating IP.
-    # The cloud-init script should contain a small sleep for
-    # this to work.
-    # We also create the FIP first because it is used in the
-    # cloud-init script.
-    fip = os_utils.create_floating_ip(neutron_client)
-    # fake_fip is needed to bypass NAT
-    # see below for the reason why.
-    fake_fip = os_utils.create_floating_ip(neutron_client)
-
-    floatingip_ids.extend([fip['fip_id'], fake_fip['fip_id']])
-    # pin quagga to some compute
-    compute_node = nova_client.hypervisors.list()[0]
-    quagga_compute_node = "nova:" + compute_node.hypervisor_hostname
-    # Map the hypervisor used above to a compute handle
-    # returned by releng's manager
-    for comp in computes:
-        if compute_node.host_ip in comp.run_cmd("sudo ip a"):
-            compute = comp
-            break
-    quagga_bootstrap_script = quagga.gen_quagga_setup_script(
-        controller_ext_ip,
-        fake_fip['fip_addr'],
-        ext_net_mask)
-
-    test_utils.create_custom_flavor()
-
-    quagga_vm = test_utils.create_instance(
-        nova_client,
-        TESTCASE_CONFIG.quagga_instance_name,
-        ubuntu_image_id,
-        quagga_net_id,
-        sg_id,
-        fixed_ip=TESTCASE_CONFIG.quagga_instance_ip,
-        flavor=COMMON_CONFIG.custom_flavor_name,
-        userdata=quagga_bootstrap_script,
-        compute_node=quagga_compute_node)
-
-    instance_ids.append(quagga_vm)
-
-    fip_added = os_utils.add_floating_ip(nova_client,
-                                         quagga_vm.id,
-                                         fip['fip_addr'])
-
-    msg = "Assign a Floating IP to %s " % TESTCASE_CONFIG.quagga_instance_name
-    if fip_added:
-        results.add_success(msg)
-    else:
-        results.add_failure(msg)
-    test_utils.attach_instance_to_ext_br(quagga_vm, compute)
-
     try:
-        testcase = "Bootstrap quagga inside an OpenStack instance"
-        cloud_init_success = test_utils.wait_for_cloud_init(quagga_vm)
-        if cloud_init_success:
-            results.add_success(testcase)
+        sg_id = os_utils.create_security_group_full(
+            neutron_client, TESTCASE_CONFIG.secgroup_name,
+            TESTCASE_CONFIG.secgroup_descr)
+        test_utils.open_icmp(neutron_client, sg_id)
+        test_utils.open_http_port(neutron_client, sg_id)
+
+        test_utils.open_bgp_port(neutron_client, sg_id)
+        net_id, subnet_1_id, router_1_id = test_utils.create_network(
+            neutron_client,
+            TESTCASE_CONFIG.net_1_name,
+            TESTCASE_CONFIG.subnet_1_name,
+            TESTCASE_CONFIG.subnet_1_cidr,
+            TESTCASE_CONFIG.router_1_name)
+
+        quagga_net_id, subnet_quagga_id, \
+            router_quagga_id = test_utils.create_network(
+                neutron_client,
+                TESTCASE_CONFIG.quagga_net_name,
+                TESTCASE_CONFIG.quagga_subnet_name,
+                TESTCASE_CONFIG.quagga_subnet_cidr,
+                TESTCASE_CONFIG.quagga_router_name)
+
+        interfaces.append(tuple((router_1_id, subnet_1_id)))
+        interfaces.append(tuple((router_quagga_id, subnet_quagga_id)))
+        network_ids.extend([net_id, quagga_net_id])
+        router_ids.extend([router_1_id, router_quagga_id])
+        subnet_ids.extend([subnet_1_id, subnet_quagga_id])
+
+        installer_type = str(os.environ['INSTALLER_TYPE'].lower())
+        if installer_type == "fuel":
+            disk = 'raw'
+        elif installer_type == "apex":
+            disk = 'qcow2'
         else:
-            results.add_failure(testcase)
-        results.add_to_summary(0, "=")
-
-        results.add_to_summary(0, '-')
-        results.add_to_summary(1, "Peer Quagga with OpenDaylight")
-        results.add_to_summary(0, '-')
-
-        neighbor = quagga.odl_add_neighbor(fake_fip['fip_addr'],
-                                           controller_ext_ip,
-                                           controller)
-        peer = quagga.check_for_peering(controller)
+            logger.error("Incompatible installer type")
+
+        ubuntu_image_id = os_utils.create_glance_image(
+            glance_client,
+            COMMON_CONFIG.ubuntu_image_name,
+            COMMON_CONFIG.ubuntu_image_path,
+            disk,
+            container="bare",
+            public="public")
+
+        image_ids.append(ubuntu_image_id)
+
+        # NOTE(rski) The order of this seems a bit weird but
+        # there is a reason for this, namely
+        # https://jira.opnfv.org/projects/SDNVPN/issues/SDNVPN-99
+        # so we create the quagga instance using cloud-init
+        # and immediately give it a floating IP.
+        # The cloud-init script should contain a small sleep for
+        # this to work.
+        # We also create the FIP first because it is used in the
+        # cloud-init script.
+        fip = os_utils.create_floating_ip(neutron_client)
+        # fake_fip is needed to bypass NAT
+        # see below for the reason why.
+        fake_fip = os_utils.create_floating_ip(neutron_client)
+
+        floatingip_ids.extend([fip['fip_id'], fake_fip['fip_id']])
+        # pin quagga to some compute
+        compute_node = nova_client.hypervisors.list()[0]
+        quagga_compute_node = "nova:" + compute_node.hypervisor_hostname
+        # Map the hypervisor used above to a compute handle
+        # returned by releng's manager
+        for comp in computes:
+            if compute_node.host_ip in comp.run_cmd("sudo ip a"):
+                compute = comp
+                break
+        quagga_bootstrap_script = quagga.gen_quagga_setup_script(
+            controller_ext_ip,
+            fake_fip['fip_addr'],
+            ext_net_mask)
+
+        test_utils.create_custom_flavor()
+
+        quagga_vm = test_utils.create_instance(
+            nova_client,
+            TESTCASE_CONFIG.quagga_instance_name,
+            ubuntu_image_id,
+            quagga_net_id,
+            sg_id,
+            fixed_ip=TESTCASE_CONFIG.quagga_instance_ip,
+            flavor=COMMON_CONFIG.custom_flavor_name,
+            userdata=quagga_bootstrap_script,
+            compute_node=quagga_compute_node)
+
+        instance_ids.append(quagga_vm)
+
+        fip_added = os_utils.add_floating_ip(nova_client,
+                                             quagga_vm.id,
+                                             fip['fip_addr'])
+
+        msg = ("Assign a Floating IP to %s " %
+               TESTCASE_CONFIG.quagga_instance_name)
+        if fip_added:
+            results.add_success(msg)
+        else:
+            results.add_failure(msg)
+        test_utils.attach_instance_to_ext_br(quagga_vm, compute)
+
+        try:
+            testcase = "Bootstrap quagga inside an OpenStack instance"
+            cloud_init_success = test_utils.wait_for_cloud_init(quagga_vm)
+            if cloud_init_success:
+                results.add_success(testcase)
+            else:
+                results.add_failure(testcase)
+            results.add_to_summary(0, "=")
+
+            results.add_to_summary(0, '-')
+            results.add_to_summary(1, "Peer Quagga with OpenDaylight")
+            results.add_to_summary(0, '-')
+
+            neighbor = quagga.odl_add_neighbor(fake_fip['fip_addr'],
+                                               controller_ext_ip,
+                                               controller)
+            peer = quagga.check_for_peering(controller)
+
+        finally:
+            test_utils.detach_instance_from_ext_br(quagga_vm, compute)
+
+        if neighbor and peer:
+            results.add_success("Peering with quagga")
+        else:
+            results.add_failure("Peering with quagga")
 
+    except Exception as e:
+        logger.error("exception occurred while executing testcase_3: %s", e)
+        raise
     finally:
-        test_utils.detach_instance_from_ext_br(quagga_vm, compute)
+        test_utils.cleanup_nova(nova_client, instance_ids, image_ids)
+        test_utils.cleanup_neutron(neutron_client, floatingip_ids,
+                                   bgpvpn_ids, interfaces, subnet_ids,
+                                   router_ids, network_ids)
 
-    if neighbor and peer:
-        results.add_success("Peering with quagga")
-    else:
-        results.add_failure("Peering with quagga")
-
-    test_utils.cleanup_nova(nova_client, instance_ids, image_ids)
-    test_utils.cleanup_neutron(neutron_client, floatingip_ids, bgpvpn_ids,
-                               interfaces, subnet_ids, router_ids,
-                               network_ids)
     return results.compile_summary()
 
+
 if __name__ == '__main__':
     logging.basicConfig(level=logging.INFO)
     sys.exit(main())
index e87cd6d..f6748f9 100644 (file)
@@ -39,183 +39,192 @@ def main():
     (floatingip_ids, instance_ids, router_ids, network_ids, image_ids,
      subnet_ids, interfaces, bgpvpn_ids) = ([] for i in range(8))
 
-    image_id = os_utils.create_glance_image(glance_client,
-                                            TESTCASE_CONFIG.image_name,
-                                            COMMON_CONFIG.image_path,
-                                            disk=COMMON_CONFIG.image_format,
-                                            container="bare",
-                                            public='public')
-    image_ids.append(image_id)
-
-    network_1_id, subnet_1_id, router_1_id = test_utils.create_network(
-        neutron_client,
-        TESTCASE_CONFIG.net_1_name,
-        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(
-        neutron_client,
-        TESTCASE_CONFIG.subnet_2_name,
-        TESTCASE_CONFIG.subnet_2_cidr,
-        network_2_id)
-    interfaces.append(tuple((router_1_id, subnet_1_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])
-
-    sg_id = os_utils.create_security_group_full(
-        neutron_client,
-        TESTCASE_CONFIG.secgroup_name,
-        TESTCASE_CONFIG.secgroup_descr)
-
-    compute_nodes = test_utils.assert_and_get_compute_nodes(nova_client)
-
-    av_zone_1 = "nova:" + compute_nodes[0]
-    av_zone_2 = "nova:" + compute_nodes[1]
-
-    # boot INTANCES
-    vm_2 = test_utils.create_instance(
-        nova_client,
-        TESTCASE_CONFIG.instance_2_name,
-        image_id,
-        network_1_id,
-        sg_id,
-        secgroup_name=TESTCASE_CONFIG.secgroup_name,
-        compute_node=av_zone_1)
-    vm_2_ip = test_utils.get_instance_ip(vm_2)
-
-    vm_3 = test_utils.create_instance(
-        nova_client,
-        TESTCASE_CONFIG.instance_3_name,
-        image_id,
-        network_1_id,
-        sg_id,
-        secgroup_name=TESTCASE_CONFIG.secgroup_name,
-        compute_node=av_zone_2)
-    vm_3_ip = test_utils.get_instance_ip(vm_3)
-
-    vm_5 = test_utils.create_instance(
-        nova_client,
-        TESTCASE_CONFIG.instance_5_name,
-        image_id,
-        network_2_id,
-        sg_id,
-        secgroup_name=TESTCASE_CONFIG.secgroup_name,
-        compute_node=av_zone_2)
-    vm_5_ip = test_utils.get_instance_ip(vm_5)
-
-    # We boot vm5 first because we need vm5_ip for vm4 userdata
-    u4 = test_utils.generate_ping_userdata([vm_5_ip])
-    vm_4 = test_utils.create_instance(
-        nova_client,
-        TESTCASE_CONFIG.instance_4_name,
-        image_id,
-        network_2_id,
-        sg_id,
-        secgroup_name=TESTCASE_CONFIG.secgroup_name,
-        compute_node=av_zone_1,
-        userdata=u4)
-    vm_4_ip = test_utils.get_instance_ip(vm_4)
-
-    # We boot VM1 at the end because we need to get the IPs first to generate
-    # the userdata
-    u1 = test_utils.generate_ping_userdata([vm_2_ip,
-                                            vm_3_ip,
-                                            vm_4_ip,
-                                            vm_5_ip])
-    vm_1 = test_utils.create_instance(
-        nova_client,
-        TESTCASE_CONFIG.instance_1_name,
-        image_id,
-        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, vm_3.id, vm_4.id, vm_5.id])
-
-    msg = ("Create VPN with eRT<>iRT")
-    results.record_action(msg)
-    vpn_name = "sdnvpn-" + str(randint(100000, 999999))
-    kwargs = {"import_targets": TESTCASE_CONFIG.targets1,
-              "export_targets": TESTCASE_CONFIG.targets2,
-              "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' to the VPN." % TESTCASE_CONFIG.router_1_name)
-    results.record_action(msg)
-    results.add_to_summary(0, "-")
-
-    test_utils.create_router_association(
-        neutron_client, bgpvpn_id, router_1_id)
-
-    # Wait for VMs to get ips.
-    instances_up = test_utils.wait_for_instances_up(vm_1, vm_2,
-                                                    vm_3, vm_4,
-                                                    vm_5)
-
-    if not instances_up:
-        logger.error("One or more instances is down")
-        # TODO Handle appropriately
-
-    results.get_ping_status(vm_1, vm_2, expected="PASS", timeout=200)
-    results.get_ping_status(vm_1, vm_3, expected="PASS", timeout=30)
-    results.get_ping_status(vm_1, vm_4, expected="FAIL", timeout=30)
-
-    msg = ("Associate network '%s' to the VPN." % TESTCASE_CONFIG.net_2_name)
-    results.add_to_summary(0, "-")
-    results.record_action(msg)
-    results.add_to_summary(0, "-")
-    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)
-
-    logger.info("Waiting for the VMs to connect to each other using the"
-                " updated network configuration")
-    test_utils.wait_before_subtest()
-
-    results.get_ping_status(vm_4, vm_5, expected="PASS", timeout=30)
-    # TODO enable again when isolation in VPN with iRT != eRT works
-    # results.get_ping_status(vm_1, vm_4, expected="FAIL", timeout=30)
-    # results.get_ping_status(vm_1, vm_5, expected="FAIL", timeout=30)
-
-    msg = ("Update VPN with eRT=iRT ...")
-    results.add_to_summary(0, "-")
-    results.record_action(msg)
-    results.add_to_summary(0, "-")
-    kwargs = {"import_targets": TESTCASE_CONFIG.targets1,
-              "export_targets": TESTCASE_CONFIG.targets1,
-              "name": vpn_name}
-    bgpvpn = test_utils.update_bgpvpn(neutron_client, bgpvpn_id, **kwargs)
-
-    logger.info("Waiting for the VMs to connect to each other using the"
-                " updated network configuration")
-    test_utils.wait_before_subtest()
-
-    results.get_ping_status(vm_1, vm_4, expected="PASS", timeout=30)
-    results.get_ping_status(vm_1, vm_5, expected="PASS", timeout=30)
+    try:
+        image_id = os_utils.create_glance_image(
+            glance_client, TESTCASE_CONFIG.image_name,
+            COMMON_CONFIG.image_path, disk=COMMON_CONFIG.image_format,
+            container="bare", public='public')
+        image_ids.append(image_id)
+
+        network_1_id, subnet_1_id, router_1_id = test_utils.create_network(
+            neutron_client,
+            TESTCASE_CONFIG.net_1_name,
+            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(
+            neutron_client,
+            TESTCASE_CONFIG.subnet_2_name,
+            TESTCASE_CONFIG.subnet_2_cidr,
+            network_2_id)
+        interfaces.append(tuple((router_1_id, subnet_1_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])
+
+        sg_id = os_utils.create_security_group_full(
+            neutron_client,
+            TESTCASE_CONFIG.secgroup_name,
+            TESTCASE_CONFIG.secgroup_descr)
+
+        compute_nodes = test_utils.assert_and_get_compute_nodes(nova_client)
+
+        av_zone_1 = "nova:" + compute_nodes[0]
+        av_zone_2 = "nova:" + compute_nodes[1]
+
+        # boot INTANCES
+        vm_2 = test_utils.create_instance(
+            nova_client,
+            TESTCASE_CONFIG.instance_2_name,
+            image_id,
+            network_1_id,
+            sg_id,
+            secgroup_name=TESTCASE_CONFIG.secgroup_name,
+            compute_node=av_zone_1)
+        vm_2_ip = test_utils.get_instance_ip(vm_2)
+
+        vm_3 = test_utils.create_instance(
+            nova_client,
+            TESTCASE_CONFIG.instance_3_name,
+            image_id,
+            network_1_id,
+            sg_id,
+            secgroup_name=TESTCASE_CONFIG.secgroup_name,
+            compute_node=av_zone_2)
+        vm_3_ip = test_utils.get_instance_ip(vm_3)
+
+        vm_5 = test_utils.create_instance(
+            nova_client,
+            TESTCASE_CONFIG.instance_5_name,
+            image_id,
+            network_2_id,
+            sg_id,
+            secgroup_name=TESTCASE_CONFIG.secgroup_name,
+            compute_node=av_zone_2)
+        vm_5_ip = test_utils.get_instance_ip(vm_5)
+
+        # We boot vm5 first because we need vm5_ip for vm4 userdata
+        u4 = test_utils.generate_ping_userdata([vm_5_ip])
+        vm_4 = test_utils.create_instance(
+            nova_client,
+            TESTCASE_CONFIG.instance_4_name,
+            image_id,
+            network_2_id,
+            sg_id,
+            secgroup_name=TESTCASE_CONFIG.secgroup_name,
+            compute_node=av_zone_1,
+            userdata=u4)
+        vm_4_ip = test_utils.get_instance_ip(vm_4)
+
+        # We boot VM1 at the end because we need to get the IPs
+        # first to generate the userdata
+        u1 = test_utils.generate_ping_userdata([vm_2_ip,
+                                                vm_3_ip,
+                                                vm_4_ip,
+                                                vm_5_ip])
+        vm_1 = test_utils.create_instance(
+            nova_client,
+            TESTCASE_CONFIG.instance_1_name,
+            image_id,
+            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, vm_3.id, vm_4.id, vm_5.id])
+
+        msg = ("Create VPN with eRT<>iRT")
+        results.record_action(msg)
+        vpn_name = "sdnvpn-" + str(randint(100000, 999999))
+        kwargs = {
+            "import_targets": TESTCASE_CONFIG.targets1,
+            "export_targets": TESTCASE_CONFIG.targets2,
+            "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' to the VPN." %
+               TESTCASE_CONFIG.router_1_name)
+        results.record_action(msg)
+        results.add_to_summary(0, "-")
+
+        test_utils.create_router_association(
+            neutron_client, bgpvpn_id, router_1_id)
+
+        # Wait for VMs to get ips.
+        instances_up = test_utils.wait_for_instances_up(vm_1, vm_2,
+                                                        vm_3, vm_4,
+                                                        vm_5)
+
+        if not instances_up:
+            logger.error("One or more instances is down")
+            # TODO Handle appropriately
+
+        results.get_ping_status(vm_1, vm_2, expected="PASS", timeout=200)
+        results.get_ping_status(vm_1, vm_3, expected="PASS", timeout=30)
+        results.get_ping_status(vm_1, vm_4, expected="FAIL", timeout=30)
+
+        msg = ("Associate network '%s' to the VPN." %
+               TESTCASE_CONFIG.net_2_name)
+        results.add_to_summary(0, "-")
+        results.record_action(msg)
+        results.add_to_summary(0, "-")
+        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)
+
+        logger.info("Waiting for the VMs to connect to each other using the"
+                    " updated network configuration")
+        test_utils.wait_before_subtest()
+
+        results.get_ping_status(vm_4, vm_5, expected="PASS", timeout=30)
+        # TODO enable again when isolation in VPN with iRT != eRT works
+        # results.get_ping_status(vm_1, vm_4, expected="FAIL", timeout=30)
+        # results.get_ping_status(vm_1, vm_5, expected="FAIL", timeout=30)
+
+        msg = ("Update VPN with eRT=iRT ...")
+        results.add_to_summary(0, "-")
+        results.record_action(msg)
+        results.add_to_summary(0, "-")
+        kwargs = {"import_targets": TESTCASE_CONFIG.targets1,
+                  "export_targets": TESTCASE_CONFIG.targets1,
+                  "name": vpn_name}
+        bgpvpn = test_utils.update_bgpvpn(neutron_client,
+                                          bgpvpn_id, **kwargs)
+
+        logger.info("Waiting for the VMs to connect to each other using the"
+                    " updated network configuration")
+        test_utils.wait_before_subtest()
+
+        results.get_ping_status(vm_1, vm_4, expected="PASS", timeout=30)
+        results.get_ping_status(vm_1, vm_5, expected="PASS", timeout=30)
+
+        results.add_to_summary(0, "=")
+        logger.info("\n%s" % results.summary)
+
+    except Exception as e:
+        logger.error("exception occurred while executing testcase_4: %s", e)
+        raise
+    finally:
+        test_utils.cleanup_nova(nova_client, instance_ids, image_ids)
+        test_utils.cleanup_neutron(neutron_client, floatingip_ids,
+                                   bgpvpn_ids, interfaces, subnet_ids,
+                                   router_ids, network_ids)
 
-    results.add_to_summary(0, "=")
-    logger.info("\n%s" % results.summary)
-
-    test_utils.cleanup_nova(nova_client, instance_ids, image_ids)
-    test_utils.cleanup_neutron(neutron_client, floatingip_ids, bgpvpn_ids,
-                               interfaces, subnet_ids, router_ids,
-                               network_ids)
     return results.compile_summary()
 
 
index abee8c8..65a77b6 100644 (file)
@@ -48,120 +48,126 @@ def main():
     (floatingip_ids, instance_ids, router_ids, network_ids, image_ids,
      subnet_ids, interfaces, bgpvpn_ids) = ([] for i in range(8))
 
-    image_id = os_utils.create_glance_image(glance_client,
-                                            TESTCASE_CONFIG.image_name,
-                                            COMMON_CONFIG.image_path,
-                                            disk=COMMON_CONFIG.image_format,
-                                            container="bare",
-                                            public='public')
-    image_ids.append(image_id)
-
-    network_1_id, subnet_1_id, router_1_id = test_utils.create_network(
-        neutron_client,
-        TESTCASE_CONFIG.net_1_name,
-        TESTCASE_CONFIG.subnet_1_name,
-        TESTCASE_CONFIG.subnet_1_cidr,
-        TESTCASE_CONFIG.router_1_name)
-
-    network_2_id, subnet_2_id, router_2_id = test_utils.create_network(
-        neutron_client,
-        TESTCASE_CONFIG.net_2_name,
-        TESTCASE_CONFIG.subnet_2_name,
-        TESTCASE_CONFIG.subnet_2_cidr,
-        TESTCASE_CONFIG.router_2_name)
-
-    interfaces.append(tuple((router_1_id, subnet_1_id)))
-    interfaces.append(tuple((router_2_id, subnet_2_id)))
-    network_ids.extend([network_1_id, network_2_id])
-    router_ids.extend([router_1_id, router_2_id])
-    subnet_ids.extend([subnet_1_id, subnet_2_id])
-
-    sg_id = os_utils.create_security_group_full(neutron_client,
-                                                TESTCASE_CONFIG.secgroup_name,
-                                                TESTCASE_CONFIG.secgroup_descr)
-    test_utils.open_icmp(neutron_client, sg_id)
-    test_utils.open_http_port(neutron_client, sg_id)
-
-    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)
-    vm_2_ip = test_utils.get_instance_ip(vm_2)
-
-    u1 = test_utils.generate_ping_userdata([vm_2_ip])
-    vm_1 = test_utils.create_instance(
-        nova_client,
-        TESTCASE_CONFIG.instance_1_name,
-        image_id,
-        network_1_id,
-        sg_id,
-        secgroup_name=TESTCASE_CONFIG.secgroup_name,
-        userdata=u1)
-
-    instance_ids.extend([vm_1.id, vm_2.id])
-
-    msg = ("Create VPN with eRT==iRT")
-    results.record_action(msg)
-    vpn_name = "sdnvpn-7"
-    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 networks '%s', '%s' to the VPN."
-           % (TESTCASE_CONFIG.net_1_name,
-              TESTCASE_CONFIG.net_2_name))
-    results.record_action(msg)
-    results.add_to_summary(0, "-")
-
-    test_utils.create_network_association(
-        neutron_client, bgpvpn_id, network_1_id)
-    test_utils.create_network_association(
-        neutron_client, bgpvpn_id, network_2_id)
-
-    test_utils.wait_for_bgp_net_assoc(
-        neutron_client, bgpvpn_id, network_1_id)
-    test_utils.wait_for_bgp_net_assoc(
-        neutron_client, bgpvpn_id, network_2_id)
-
-    instances_up = test_utils.wait_for_instances_up(vm_1, vm_2)
-    if not instances_up:
-        logger.error("One or more instances is down")
-
-    logger.info("Waiting for the VMs to connect to each other using the"
-                " updated network configuration")
-    test_utils.wait_before_subtest()
-
-    results.get_ping_status(vm_1, vm_2, expected="PASS", timeout=200)
-    results.add_to_summary(0, "=")
-
-    msg = "Assign a Floating IP to %s and ping it" % vm_2.name
-    results.record_action(msg)
-    results.add_to_summary(0, '-')
-
-    fip = os_utils.create_floating_ip(neutron_client)
-    fip_added = os_utils.add_floating_ip(nova_client, vm_2.id,
-                                         fip['fip_addr'])
-    if fip_added:
-        results.add_success(msg)
-    else:
-        results.add_failure(msg)
-
-    results.ping_ip_test(fip['fip_addr'])
-
-    floatingip_ids.append(fip['fip_id'])
+    try:
+        image_id = os_utils.create_glance_image(
+            glance_client, TESTCASE_CONFIG.image_name,
+            COMMON_CONFIG.image_path, disk=COMMON_CONFIG.image_format,
+            container="bare", public='public')
+        image_ids.append(image_id)
+
+        network_1_id, subnet_1_id, router_1_id = test_utils.create_network(
+            neutron_client,
+            TESTCASE_CONFIG.net_1_name,
+            TESTCASE_CONFIG.subnet_1_name,
+            TESTCASE_CONFIG.subnet_1_cidr,
+            TESTCASE_CONFIG.router_1_name)
+
+        network_2_id, subnet_2_id, router_2_id = test_utils.create_network(
+            neutron_client,
+            TESTCASE_CONFIG.net_2_name,
+            TESTCASE_CONFIG.subnet_2_name,
+            TESTCASE_CONFIG.subnet_2_cidr,
+            TESTCASE_CONFIG.router_2_name)
+
+        interfaces.append(tuple((router_1_id, subnet_1_id)))
+        interfaces.append(tuple((router_2_id, subnet_2_id)))
+        network_ids.extend([network_1_id, network_2_id])
+        router_ids.extend([router_1_id, router_2_id])
+        subnet_ids.extend([subnet_1_id, subnet_2_id])
+
+        sg_id = os_utils.create_security_group_full(
+            neutron_client, TESTCASE_CONFIG.secgroup_name,
+            TESTCASE_CONFIG.secgroup_descr)
+        test_utils.open_icmp(neutron_client, sg_id)
+        test_utils.open_http_port(neutron_client, sg_id)
+
+        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)
+        vm_2_ip = test_utils.get_instance_ip(vm_2)
+
+        u1 = test_utils.generate_ping_userdata([vm_2_ip])
+        vm_1 = test_utils.create_instance(
+            nova_client,
+            TESTCASE_CONFIG.instance_1_name,
+            image_id,
+            network_1_id,
+            sg_id,
+            secgroup_name=TESTCASE_CONFIG.secgroup_name,
+            userdata=u1)
+
+        instance_ids.extend([vm_1.id, vm_2.id])
+
+        msg = ("Create VPN with eRT==iRT")
+        results.record_action(msg)
+        vpn_name = "sdnvpn-7"
+        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 networks '%s', '%s' to the VPN."
+               % (TESTCASE_CONFIG.net_1_name,
+                  TESTCASE_CONFIG.net_2_name))
+        results.record_action(msg)
+        results.add_to_summary(0, "-")
+
+        test_utils.create_network_association(
+            neutron_client, bgpvpn_id, network_1_id)
+        test_utils.create_network_association(
+            neutron_client, bgpvpn_id, network_2_id)
+
+        test_utils.wait_for_bgp_net_assoc(
+            neutron_client, bgpvpn_id, network_1_id)
+        test_utils.wait_for_bgp_net_assoc(
+            neutron_client, bgpvpn_id, network_2_id)
+
+        instances_up = test_utils.wait_for_instances_up(vm_1, vm_2)
+        if not instances_up:
+            logger.error("One or more instances is down")
+
+        logger.info("Waiting for the VMs to connect to each other using the"
+                    " updated network configuration")
+        test_utils.wait_before_subtest()
+
+        results.get_ping_status(vm_1, vm_2, expected="PASS", timeout=200)
+        results.add_to_summary(0, "=")
+
+        msg = "Assign a Floating IP to %s and ping it" % vm_2.name
+        results.record_action(msg)
+        results.add_to_summary(0, '-')
+
+        fip = os_utils.create_floating_ip(neutron_client)
+        fip_added = os_utils.add_floating_ip(nova_client, vm_2.id,
+                                             fip['fip_addr'])
+        if fip_added:
+            results.add_success(msg)
+        else:
+            results.add_failure(msg)
+
+        results.ping_ip_test(fip['fip_addr'])
+
+        floatingip_ids.append(fip['fip_id'])
+
+    except Exception as e:
+        logger.error("exception occurred while executing testcase_7: %s", e)
+        raise
+    finally:
+        test_utils.cleanup_nova(nova_client, instance_ids, image_ids)
+        test_utils.cleanup_neutron(neutron_client, floatingip_ids,
+                                   bgpvpn_ids, interfaces, subnet_ids,
+                                   router_ids, network_ids)
 
-    test_utils.cleanup_nova(nova_client, instance_ids, image_ids)
-    test_utils.cleanup_neutron(neutron_client, floatingip_ids, bgpvpn_ids,
-                               interfaces, subnet_ids, router_ids,
-                               network_ids)
     return results.compile_summary()
 
 
index bab767d..abb111f 100644 (file)
@@ -48,121 +48,127 @@ def main():
     (floatingip_ids, instance_ids, router_ids, network_ids, image_ids,
      subnet_ids, interfaces, bgpvpn_ids) = ([] for i in range(8))
 
-    image_id = os_utils.create_glance_image(glance_client,
-                                            TESTCASE_CONFIG.image_name,
-                                            COMMON_CONFIG.image_path,
-                                            disk=COMMON_CONFIG.image_format,
-                                            container="bare",
-                                            public='public')
-    image_ids.append(image_id)
-
-    network_1_id, subnet_1_id, router_1_id = test_utils.create_network(
-        neutron_client,
-        TESTCASE_CONFIG.net_1_name,
-        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(
-        neutron_client,
-        TESTCASE_CONFIG.subnet_2_name,
-        TESTCASE_CONFIG.subnet_2_cidr,
-        network_2_id)
-
-    interfaces.append(tuple((router_1_id, subnet_1_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])
-
-    sg_id = os_utils.create_security_group_full(neutron_client,
-                                                TESTCASE_CONFIG.secgroup_name,
-                                                TESTCASE_CONFIG.secgroup_descr)
-    test_utils.open_icmp(neutron_client, sg_id)
-    test_utils.open_http_port(neutron_client, sg_id)
-
-    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)
-    vm_2_ip = test_utils.get_instance_ip(vm_2)
-
-    u1 = test_utils.generate_ping_userdata([vm_2_ip])
-    vm_1 = test_utils.create_instance(
-        nova_client,
-        TESTCASE_CONFIG.instance_1_name,
-        image_id,
-        network_1_id,
-        sg_id,
-        secgroup_name=TESTCASE_CONFIG.secgroup_name,
-        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)
-
-    instances_up = test_utils.wait_for_instances_up(vm_1, vm_2)
-    if not instances_up:
-        logger.error("One or more instances is down")
-
-    logger.info("Waiting for the VMs to connect to each other using the"
-                " updated network configuration")
-    test_utils.wait_before_subtest()
-
-    results.get_ping_status(vm_1, vm_2, expected="PASS", timeout=200)
-    results.add_to_summary(0, "=")
-
-    msg = "Assign a Floating IP to %s" % vm_1.name
-    results.record_action(msg)
-
-    fip = os_utils.create_floating_ip(neutron_client)
-
-    fip_added = os_utils.add_floating_ip(nova_client, vm_1.id, fip['fip_addr'])
-    if fip_added:
-        results.add_success(msg)
-    else:
-        results.add_failure(msg)
-
-    results.add_to_summary(0, "=")
-    results.record_action("Ping %s via Floating IP" % vm_1.name)
-    results.add_to_summary(0, "-")
-    results.ping_ip_test(fip['fip_addr'])
-
-    floatingip_ids.append(fip['fip_id'])
-
-    test_utils.cleanup_nova(nova_client, instance_ids, image_ids)
-    test_utils.cleanup_neutron(neutron_client, floatingip_ids, bgpvpn_ids,
-                               interfaces, subnet_ids, router_ids,
-                               network_ids)
+    try:
+        image_id = os_utils.create_glance_image(
+            glance_client, TESTCASE_CONFIG.image_name,
+            COMMON_CONFIG.image_path, disk=COMMON_CONFIG.image_format,
+            container="bare", public='public')
+        image_ids.append(image_id)
+
+        network_1_id, subnet_1_id, router_1_id = test_utils.create_network(
+            neutron_client,
+            TESTCASE_CONFIG.net_1_name,
+            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(
+            neutron_client,
+            TESTCASE_CONFIG.subnet_2_name,
+            TESTCASE_CONFIG.subnet_2_cidr,
+            network_2_id)
+
+        interfaces.append(tuple((router_1_id, subnet_1_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])
+
+        sg_id = os_utils.create_security_group_full(
+            neutron_client, TESTCASE_CONFIG.secgroup_name,
+            TESTCASE_CONFIG.secgroup_descr)
+        test_utils.open_icmp(neutron_client, sg_id)
+        test_utils.open_http_port(neutron_client, sg_id)
+
+        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)
+        vm_2_ip = test_utils.get_instance_ip(vm_2)
+
+        u1 = test_utils.generate_ping_userdata([vm_2_ip])
+        vm_1 = test_utils.create_instance(
+            nova_client,
+            TESTCASE_CONFIG.instance_1_name,
+            image_id,
+            network_1_id,
+            sg_id,
+            secgroup_name=TESTCASE_CONFIG.secgroup_name,
+            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)
+
+        instances_up = test_utils.wait_for_instances_up(vm_1, vm_2)
+        if not instances_up:
+            logger.error("One or more instances is down")
+
+        logger.info("Waiting for the VMs to connect to each other using the"
+                    " updated network configuration")
+        test_utils.wait_before_subtest()
+
+        results.get_ping_status(vm_1, vm_2, expected="PASS", timeout=200)
+        results.add_to_summary(0, "=")
+
+        msg = "Assign a Floating IP to %s" % vm_1.name
+        results.record_action(msg)
+
+        fip = os_utils.create_floating_ip(neutron_client)
+
+        fip_added = os_utils.add_floating_ip(nova_client,
+                                             vm_1.id, fip['fip_addr'])
+        if fip_added:
+            results.add_success(msg)
+        else:
+            results.add_failure(msg)
+
+        results.add_to_summary(0, "=")
+        results.record_action("Ping %s via Floating IP" % vm_1.name)
+        results.add_to_summary(0, "-")
+        results.ping_ip_test(fip['fip_addr'])
+
+        floatingip_ids.append(fip['fip_id'])
+
+    except Exception as e:
+        logger.error("exception occurred while executing testcase_8: %s", e)
+        raise
+    finally:
+        test_utils.cleanup_nova(nova_client, instance_ids, image_ids)
+        test_utils.cleanup_neutron(neutron_client, floatingip_ids,
+                                   bgpvpn_ids, interfaces, subnet_ids,
+                                   router_ids, network_ids)
 
     return results.compile_summary()