From a5cda7aeaf98e93c653668df0e017f1ed7937226 Mon Sep 17 00:00:00 2001 From: Jay Dobies Date: Wed, 25 May 2016 13:33:33 -0400 Subject: [PATCH] Added refs_map attribute to AutoScalingGroup Change-Id: I3085e72623b3c110c225224d17cff3fb2008140a Closes-Bug: #1585316 --- .../openstack/heat/autoscaling_group.py | 15 +++++++++++++-- .../autoscaling/test_heat_scaling_group.py | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/heat/engine/resources/openstack/heat/autoscaling_group.py b/heat/engine/resources/openstack/heat/autoscaling_group.py index f2c53585f..796042a17 100644 --- a/heat/engine/resources/openstack/heat/autoscaling_group.py +++ b/heat/engine/resources/openstack/heat/autoscaling_group.py @@ -47,9 +47,9 @@ class AutoScalingResourceGroup(aws_asg.AutoScalingGroup): ) ATTRIBUTES = ( - OUTPUTS, OUTPUTS_LIST, CURRENT_SIZE, REFS, + OUTPUTS, OUTPUTS_LIST, CURRENT_SIZE, REFS, REFS_MAP, ) = ( - 'outputs', 'outputs_list', 'current_size', 'refs', + 'outputs', 'outputs_list', 'current_size', 'refs', 'refs_map', ) properties_schema = { @@ -142,6 +142,13 @@ class AutoScalingResourceGroup(aws_asg.AutoScalingGroup): type=attributes.Schema.LIST, support_status=support.SupportStatus(version='7.0.0'), ), + REFS_MAP: attributes.Schema( + _("A map of resource names to IDs for the resources in " + "the group."), + type=attributes.Schema.MAP, + support_status=support.SupportStatus(version='7.0.0'), + ), + } update_policy_schema = {} @@ -173,6 +180,10 @@ class AutoScalingResourceGroup(aws_asg.AutoScalingGroup): if key == self.REFS: refs = grouputils.get_member_refids(self) return refs + if key == self.REFS_MAP: + members = grouputils.get_members(self) + refs_map = {m.name: m.resource_id for m in members} + return refs_map if path: members = grouputils.get_members(self) attrs = ((rsrc.name, rsrc.FnGetAtt(*path)) for rsrc in members) diff --git a/heat/tests/autoscaling/test_heat_scaling_group.py b/heat/tests/autoscaling/test_heat_scaling_group.py index c0a4457d9..ef7192779 100644 --- a/heat/tests/autoscaling/test_heat_scaling_group.py +++ b/heat/tests/autoscaling/test_heat_scaling_group.py @@ -413,6 +413,24 @@ class HeatScalingGroupAttrTest(common.HeatTestCase): self.assertEqual(expected, found) mock_get.assert_called_once_with(self.group) + def test_output_refs_map(self): + # Setup + mock_members = self.patchobject(grouputils, 'get_members') + members = [mock.MagicMock(), mock.MagicMock()] + members[0].name = 'resource-1-name' + members[0].resource_id = 'resource-1-id' + members[1].name = 'resource-2-name' + members[1].resource_id = 'resource-2-id' + mock_members.return_value = members + + # Test + found = self.group.FnGetAtt('refs_map') + + # Verify + expected = {'resource-1-name': 'resource-1-id', + 'resource-2-name': 'resource-2-id'} + self.assertEqual(expected, found) + def test_output_attribute_dict(self): mock_members = self.patchobject(grouputils, 'get_members') members = []