]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Add an attribute to InstanceGroup and AutoScalingGroup to return the ips
authorAngus Salkeld <asalkeld@redhat.com>
Thu, 21 Feb 2013 03:42:31 +0000 (14:42 +1100)
committerAngus Salkeld <asalkeld@redhat.com>
Thu, 21 Feb 2013 03:44:28 +0000 (14:44 +1100)
This is so you can make a custom loadbalancer that can reference the
group's instance ip's.

fixes bug #1131025
Change-Id: I32d76d3627704ad503e2ec06bf0da39cf79f33d2

heat/engine/resources/autoscaling.py
heat/tests/test_instance_group.py

index 2630ce05654356e4fd986b93682d8a5fd37e2bbd..fd16ceceb4d6c03d56995e1515770a7a56696419 100644 (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',
index 92347d415253d727e9c22039c1b4547fd7e4ca52..fdc255ee170bdd43d730107cab36d1019246ab04 100644 (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()