diff --git a/fuel_health/etc/heat_create_neutron_stack_template.yaml b/fuel_health/etc/heat_create_neutron_stack_template.yaml index 19c50d67..61f203db 100644 --- a/fuel_health/etc/heat_create_neutron_stack_template.yaml +++ b/fuel_health/etc/heat_create_neutron_stack_template.yaml @@ -18,3 +18,7 @@ resources: flavor_update_policy: REPLACE networks: - network: {Ref: network} +outputs: + servers: + value: + get_resource: Server diff --git a/fuel_health/etc/heat_create_nova_stack_template.yaml b/fuel_health/etc/heat_create_nova_stack_template.yaml index 21aa64ba..0bd67763 100644 --- a/fuel_health/etc/heat_create_nova_stack_template.yaml +++ b/fuel_health/etc/heat_create_nova_stack_template.yaml @@ -14,3 +14,7 @@ resources: image: {get_param: ImageId} flavor: {get_param: InstanceType} flavor_update_policy: REPLACE +outputs: + servers: + value: + get_resource: Server diff --git a/fuel_health/etc/heat_update_neutron_stack_template.yaml b/fuel_health/etc/heat_update_neutron_stack_template.yaml index 0c55d0d3..70622b89 100644 --- a/fuel_health/etc/heat_update_neutron_stack_template.yaml +++ b/fuel_health/etc/heat_update_neutron_stack_template.yaml @@ -24,3 +24,10 @@ resources: flavor: {get_param: InstanceType} networks: - network: {Ref: network} +outputs: + server1: + value: + get_resource: Server1 + server2: + value: + get_resource: Server2 diff --git a/fuel_health/etc/heat_update_nova_stack_template.yaml b/fuel_health/etc/heat_update_nova_stack_template.yaml index fe72b449..7ee05a24 100644 --- a/fuel_health/etc/heat_update_nova_stack_template.yaml +++ b/fuel_health/etc/heat_update_nova_stack_template.yaml @@ -17,3 +17,10 @@ resources: properties: image: {get_param: ImageId} flavor: {get_param: InstanceType} +outputs: + server1: + value: + get_resource: Server1 + server2: + value: + get_resource: Server2 diff --git a/fuel_health/heatmanager.py b/fuel_health/heatmanager.py index 1a764050..2b6570f0 100644 --- a/fuel_health/heatmanager.py +++ b/fuel_health/heatmanager.py @@ -196,7 +196,16 @@ class HeatBaseTest(fuel_health.nmanager.NovaNetworkScenarioTest): return '\n'.join(line for line in template.splitlines() if 'Ref: Subnet' not in line) - def _get_stack_instances(self, mask_name): + def _get_stack_instances(self, stack_id): + + servers = self.heat_client.stacks.get(stack_id).outputs + server_ids = [server['output_value'] for server in servers] + + LOG.info('SERVERS {0}'.format(server_ids)) + + return server_ids + + def _get_instances_by_name_mask(self, mask_name): self.instances = [] # find just created instance diff --git a/fuel_health/tests/platform_tests/test_heat.py b/fuel_health/tests/platform_tests/test_heat.py index 833512f3..d8d80273 100644 --- a/fuel_health/tests/platform_tests/test_heat.py +++ b/fuel_health/tests/platform_tests/test_heat.py @@ -74,7 +74,7 @@ class HeatSmokeTests(heatmanager.HeatBaseTest): "stack status becoming 'CREATE_COMPLETE'", stack.id, 'CREATE_COMPLETE') - instances = self._get_stack_instances("ost1-test_heat") + instances = self._get_stack_instances(stack.id) if not instances: self.fail("Failed step: 2 Instance for the {0} stack " @@ -92,7 +92,7 @@ class HeatSmokeTests(heatmanager.HeatBaseTest): stack.id, 'SUSPEND_COMPLETE') fail_msg = "Server is not in SUSPENDED status." - inst_status = self.compute_client.servers.get(instances[0].id).status + inst_status = self.compute_client.servers.get(instances[0]).status self.verify_response_body_content(inst_status, 'SUSPENDED', fail_msg, 4) @@ -108,7 +108,7 @@ class HeatSmokeTests(heatmanager.HeatBaseTest): stack.id, 'RESUME_COMPLETE') fail_msg = "Server is not in ACTIVE status." - inst_status = self.compute_client.servers.get(instances[0].id).status + inst_status = self.compute_client.servers.get(instances[0]).status self.verify_response_body_content(inst_status, 'ACTIVE', fail_msg, 6) @@ -314,7 +314,7 @@ class HeatSmokeTests(heatmanager.HeatBaseTest): "stack status becoming 'CREATE_COMPLETE'", stack.id, 'CREATE_COMPLETE') - instances = self._get_stack_instances("ost1-test_heat") + instances = self._get_stack_instances(stack.id) if not instances: self.fail("Failed step: 2 Instance for the {0} stack " @@ -338,7 +338,7 @@ class HeatSmokeTests(heatmanager.HeatBaseTest): stack.id, 'UPDATE_COMPLETE') new_instance_name = self.compute_client.servers.get( - instances[0].id).name + instances[0]).name if new_instance_name != "ost1-test_updated": self.fail("Failed step: 5 Stack update inplace wasn't " @@ -364,9 +364,12 @@ class HeatSmokeTests(heatmanager.HeatBaseTest): "stack status becoming 'UPDATE_COMPLETE'", stack.id, 'UPDATE_COMPLETE') - instances = self._get_stack_instances("ost1-test_updated") + instances = self._get_stack_instances(stack.id) + old_instance_id = instances[0] + + new_instance_flavor = self.compute_client.servers.get( + instances[0]).flavor['id'] - new_instance_flavor = instances[0].flavor['id'] if new_instance_flavor != flavor.id: self.fail("Failed step: 9 Stack update replace wasn't " "finished, instance flavor wasn't changed.") @@ -397,15 +400,13 @@ class HeatSmokeTests(heatmanager.HeatBaseTest): "stack status becoming 'UPDATE_COMPLETE'", stack.id, 'UPDATE_COMPLETE') - instances = self._get_stack_instances(stack.stack_name) + instances = self._get_stack_instances(stack.id) if len(instances) != 2: self.fail("Failed step: 12 There are more then two expected " "instances belonging test stack.") - instances = self._get_stack_instances("ost1-test_updated") - - if instances: + if old_instance_id in instances: self.fail("Failed step: 12 Previously create instance " "wasn't deleted during stack update.") @@ -492,7 +493,7 @@ class HeatSmokeTests(heatmanager.HeatBaseTest): reduced_stack_name = '{0}-{1}'.format( stack.stack_name[:2], stack.stack_name[-4:]) - instances = self._get_stack_instances(reduced_stack_name) + instances = self._get_instances_by_name_mask(reduced_stack_name) if not instances: self.fail("Failed step: 5 Instance for the {0} stack " @@ -595,8 +596,8 @@ class HeatSmokeTests(heatmanager.HeatBaseTest): "rolling back the stack after its creation failed", stack.id) - instances = [i for i in self.compute_client.servers.list() - if i.name.startswith(stack.stack_name)] + instances = self._get_instances_by_name_mask(stack.stack_name) + self.verify(20, self.assertTrue, 4, "The stack instance rollback failed.", "verifying if the instance was rolled back",