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
This commit is contained in:
Angus Salkeld 2013-02-21 14:42:31 +11:00
parent 5890ca32b2
commit cc4b37cc77
2 changed files with 29 additions and 1 deletions

View File

@ -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',

View File

@ -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()