From: Angus Salkeld Date: Thu, 21 Feb 2013 03:42:31 +0000 (+1100) Subject: Add an attribute to InstanceGroup and AutoScalingGroup to return the ips X-Git-Tag: 2014.1~873^2 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=cc4b37cc775d67a87b26b4e270a028778ac86d09;p=openstack-build%2Fheat-build.git Add an attribute to InstanceGroup and AutoScalingGroup to return the ips This is so you can make a custom loadbalancer that can reference the group's instance ip's. fixes bug #1131025 Change-Id: I32d76d3627704ad503e2ec06bf0da39cf79f33d2 --- diff --git a/heat/engine/resources/autoscaling.py b/heat/engine/resources/autoscaling.py index 2630ce05..fd16cece 100644 --- a/heat/engine/resources/autoscaling.py +++ b/heat/engine/resources/autoscaling.py @@ -195,6 +195,21 @@ class InstanceGroup(resource.Resource): def FnGetRefId(self): return unicode(self.name) + def FnGetAtt(self, key): + ''' + heat extension: "InstanceList" returns comma delimited list of server + ip addresses. + ''' + if key == 'InstanceList': + if self.resource_id is None: + return '' + name_list = sorted(self.resource_id.split(',')) + inst_list = [] + for name in name_list: + inst = self._make_instance(name) + inst_list.append(inst.FnGetAtt('PublicIp')) + return unicode(','.join(inst_list)) + class AutoScalingGroup(InstanceGroup, CooldownMixin): tags_schema = {'Key': {'Type': 'String', diff --git a/heat/tests/test_instance_group.py b/heat/tests/test_instance_group.py index 92347d41..fdc255ee 100644 --- a/heat/tests/test_instance_group.py +++ b/heat/tests/test_instance_group.py @@ -82,10 +82,14 @@ class InstanceGroupTest(unittest.TestCase): # start with min then delete self._stub_create(1) + self.m.StubOutWithMock(instance.Instance, 'FnGetAtt') + instance.Instance.FnGetAtt('PublicIp').AndReturn('1.2.3.4') + self.m.ReplayAll() resource = self.create_instance_group(t, stack, 'JobServerGroup') self.assertEqual('JobServerGroup', resource.FnGetRefId()) + self.assertEqual('1.2.3.4', resource.FnGetAtt('InstanceList')) self.assertEqual('JobServerGroup-0', resource.resource_id) self.assertEqual(asc.InstanceGroup.UPDATE_REPLACE, resource.handle_update({})) @@ -112,7 +116,7 @@ class InstanceGroupTest(unittest.TestCase): self.m.VerifyAll() - def test_upate_size(self): + def test_update_size(self): t = self.load_template() properties = t['Resources']['JobServerGroup']['Properties'] properties['Size'] = '2' @@ -129,6 +133,13 @@ class InstanceGroupTest(unittest.TestCase): # Increase min size to 5 self._stub_create(3) + self.m.StubOutWithMock(instance.Instance, 'FnGetAtt') + instance.Instance.FnGetAtt('PublicIp').AndReturn('10.0.0.2') + instance.Instance.FnGetAtt('PublicIp').AndReturn('10.0.0.3') + instance.Instance.FnGetAtt('PublicIp').AndReturn('10.0.0.4') + instance.Instance.FnGetAtt('PublicIp').AndReturn('10.0.0.5') + instance.Instance.FnGetAtt('PublicIp').AndReturn('10.0.0.6') + self.m.ReplayAll() update_snippet = copy.deepcopy(resource.parsed_template()) @@ -138,6 +149,8 @@ class InstanceGroupTest(unittest.TestCase): assert_str = ','.join(['JobServerGroup-%s' % x for x in range(5)]) self.assertEqual(assert_str, resource.resource_id) + self.assertEqual('10.0.0.2,10.0.0.3,10.0.0.4,10.0.0.5,10.0.0.6', + resource.FnGetAtt('InstanceList')) resource.delete() self.m.VerifyAll()