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:
parent
5890ca32b2
commit
cc4b37cc77
@ -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',
|
||||
|
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user