From d81779daee14b1567f4f4a0a55509c8ba35909d4 Mon Sep 17 00:00:00 2001 From: tomsou Date: Tue, 24 Oct 2017 17:37:37 +0300 Subject: Fix instance boot when metadata exists The way that a instance is considered as UP is pretty strict and returns ERROR in case of instances with userdata This patch differentiates the instances that are supposed to boot till login prompt and those with userdata parameter JIRA: SDNVPN-177 Change-Id: Ic4755366df006669475c90cc0693ac802256f379 Signed-off-by: tomsou (cherry picked from commit a6e207c16430055eba8bcc8586b09a7081db3d04) --- sdnvpn/lib/utils.py | 19 +++++++++++-------- sdnvpn/test/functest/testcase_1.py | 11 +++++------ sdnvpn/test/functest/testcase_10.py | 13 +++++++------ sdnvpn/test/functest/testcase_2.py | 16 ++++++---------- sdnvpn/test/functest/testcase_4.py | 11 +++++------ sdnvpn/test/functest/testcase_7.py | 10 +++++++--- sdnvpn/test/functest/testcase_8.py | 10 +++++++--- 7 files changed, 48 insertions(+), 42 deletions(-) diff --git a/sdnvpn/lib/utils.py b/sdnvpn/lib/utils.py index 371f3ed..57cf722 100644 --- a/sdnvpn/lib/utils.py +++ b/sdnvpn/lib/utils.py @@ -247,13 +247,10 @@ def get_instance_ip(instance): return instance_ip -def wait_for_instance(instance): - logger.info("Waiting for instance %s to get a DHCP lease and " - "prompt for login..." % instance.id) - # The sleep this function replaced waited for 80s +def wait_for_instance(instance, pattern=".* login:"): + logger.info("Waiting for instance %s to boot up" % instance.id) tries = 40 sleep_time = 2 - pattern = ".* login:" expected_regex = re.compile(pattern) console_log = "" while tries > 0 and not expected_regex.search(console_log): @@ -262,14 +259,20 @@ def wait_for_instance(instance): tries -= 1 if not expected_regex.search(console_log): - logger.error("Instance %s seems not to boot up properly." + logger.error("Instance %s does not boot up properly." % instance.id) return False return True -def wait_for_instances_up(*args): - check = [wait_for_instance(instance) for instance in args] +def wait_for_instances_up(*instances): + check = [wait_for_instance(instance) for instance in instances] + return all(check) + + +def wait_for_instances_get_dhcp(*instances): + check = [wait_for_instance(instance, "Lease of .* obtained") + for instance in instances] return all(check) diff --git a/sdnvpn/test/functest/testcase_1.py b/sdnvpn/test/functest/testcase_1.py index 718f305..2c4ddbe 100644 --- a/sdnvpn/test/functest/testcase_1.py +++ b/sdnvpn/test/functest/testcase_1.py @@ -154,13 +154,12 @@ def main(): 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) + # Wait for VMs to be ready. + instances_up = test_utils.wait_for_instances_up(vm_2, vm_3, vm_5) + instances_dhcp_up = test_utils.wait_for_instances_get_dhcp(vm_1, vm_4) - if not instances_up: - logger.error("One or more instances is down") + if (not instances_up or not instances_dhcp_up): + logger.error("One or more instances are down") # TODO: Handle this appropriately results.get_ping_status(vm_1, vm_2, expected="PASS", timeout=200) diff --git a/sdnvpn/test/functest/testcase_10.py b/sdnvpn/test/functest/testcase_10.py index 557b658..5a88603 100644 --- a/sdnvpn/test/functest/testcase_10.py +++ b/sdnvpn/test/functest/testcase_10.py @@ -142,11 +142,11 @@ def main(): instance_ids.extend([vm_1.id, vm_3.id]) # Wait for VMs to get ips. - instances_up = test_utils.wait_for_instances_up(vm_1, vm_2, - vm_3) + instances_up = test_utils.wait_for_instances_up(vm_2) + instances_dhcp_up = test_utils.wait_for_instances_get_dhcp(vm_1, vm_3) - if not instances_up: - logger.error("One or more instances is down") + if (not instances_up or not instances_dhcp_up): + logger.error("One or more instances are down") # TODO: Handle this appropriately # Create monitor threads to monitor traffic between vm_1, vm_2 and vm_3 m = Manager() @@ -208,9 +208,10 @@ def main(): compute_node=av_zone_1, userdata=u4) instance_ids.append(vm_4.id) + # Wait for VMs to get ips. - instances_up = test_utils.wait_for_instances_up(vm_4) - if not instances_up: + instances_dhcp_up = test_utils.wait_for_instances_get_dhcp(vm_4) + if not instances_dhcp_up: logger.error("Instance vm_4 failed to start.") # TODO: Handle this appropriately # Create and start a new monitor thread for vm_4 diff --git a/sdnvpn/test/functest/testcase_2.py b/sdnvpn/test/functest/testcase_2.py index bc37c5c..928656e 100644 --- a/sdnvpn/test/functest/testcase_2.py +++ b/sdnvpn/test/functest/testcase_2.py @@ -200,16 +200,12 @@ def main(): 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) + instances_up = test_utils.wait_for_instances_up(vm_2) + instances_dhcp_up = test_utils.wait_for_instances_get_dhcp(vm_1, vm_4) + + if (not instances_up or not instances_dhcp_up): + logger.error("One or more instances are down") + # TODO: Handle this appropriately logger.info("Waiting for the VMs to connect to each other using the" " updated network configuration") diff --git a/sdnvpn/test/functest/testcase_4.py b/sdnvpn/test/functest/testcase_4.py index f6748f9..9b1c1fa 100644 --- a/sdnvpn/test/functest/testcase_4.py +++ b/sdnvpn/test/functest/testcase_4.py @@ -162,13 +162,12 @@ def main(): 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) + instances_up = test_utils.wait_for_instances_up(vm_2, vm_3, vm_5) + instances_dhcp_up = test_utils.wait_for_instances_get_dhcp(vm_1, vm_4) - if not instances_up: - logger.error("One or more instances is down") - # TODO Handle appropriately + if (not instances_up or not instances_dhcp_up): + logger.error("One or more instances are 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) diff --git a/sdnvpn/test/functest/testcase_7.py b/sdnvpn/test/functest/testcase_7.py index 65a77b6..e018022 100644 --- a/sdnvpn/test/functest/testcase_7.py +++ b/sdnvpn/test/functest/testcase_7.py @@ -132,9 +132,13 @@ def main(): 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") + # Wait for VMs to get ips. + instances_up = test_utils.wait_for_instances_up(vm_2) + instances_dhcp_up = test_utils.wait_for_instances_get_dhcp(vm_1) + + if (not instances_up or not instances_dhcp_up): + logger.error("One or more instances are down") + # TODO: Handle this appropriately logger.info("Waiting for the VMs to connect to each other using the" " updated network configuration") diff --git a/sdnvpn/test/functest/testcase_8.py b/sdnvpn/test/functest/testcase_8.py index abb111f..b166362 100644 --- a/sdnvpn/test/functest/testcase_8.py +++ b/sdnvpn/test/functest/testcase_8.py @@ -131,9 +131,13 @@ def main(): 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") + # Wait for VMs to get ips. + instances_up = test_utils.wait_for_instances_up(vm_2) + instances_dhcp_up = test_utils.wait_for_instances_get_dhcp(vm_1) + + if (not instances_up or not instances_dhcp_up): + logger.error("One or more instances are down") + # TODO: Handle this appropriately logger.info("Waiting for the VMs to connect to each other using the" " updated network configuration") -- cgit 1.2.3-korg