autoscaling fix LoadBalancer reload static resolve

Since https://review.openstack.org/#/c/31083/ we're using the
Resource.update() method to update the LoadBalancer, which requires
the resource snippet to be statically resolved (as is done in
parser.Stack for stack updates)

Fixes bug #1191705

Change-Id: Id2017a912472ddb48245682c5b6392cbcb9e4c60
This commit is contained in:
Steven Hardy 2013-06-17 15:54:51 +01:00
parent 40c4b44d02
commit a780bef9c3
2 changed files with 39 additions and 1 deletions

View File

@ -210,7 +210,9 @@ class InstanceGroup(resource.Resource):
for lb in self.properties['LoadBalancerNames']:
self.stack[lb].json_snippet['Properties']['Instances'] = \
inst_list
self.stack[lb].update(self.stack[lb].json_snippet)
resolved_snippet = self.stack.resolve_static_data(
self.stack[lb].json_snippet)
self.stack[lb].update(resolved_snippet)
def FnGetRefId(self):
return unicode(self.name)

View File

@ -21,6 +21,7 @@ from heat.common import template_format
from heat.engine.resources import autoscaling as asc
from heat.engine.resources import loadbalancer
from heat.engine.resources import instance
from heat.engine import parser
from heat.engine import resource
from heat.engine import scheduler
from heat.engine.resource import Metadata
@ -312,6 +313,41 @@ class AutoScalingTest(HeatTestCase):
rsrc.delete()
self.m.VerifyAll()
def test_lb_reload_static_resolve(self):
t = template_format.parse(as_template)
properties = t['Resources']['ElasticLoadBalancer']['Properties']
properties['AvailabilityZones'] = {'Fn::GetAZs': ''}
self.m.StubOutWithMock(parser.Stack, 'get_availability_zones')
parser.Stack.get_availability_zones().MultipleTimes().AndReturn(
['abc', 'xyz'])
# Check that the Fn::GetAZs is correctly resolved
expected = {u'Type': u'AWS::ElasticLoadBalancing::LoadBalancer',
u'Properties': {'Instances': ['WebServerGroup-0'],
u'Listeners': [{u'InstancePort': u'80',
u'LoadBalancerPort': u'80',
u'Protocol': u'HTTP'}],
u'AvailabilityZones': ['abc', 'xyz']}}
self.m.StubOutWithMock(loadbalancer.LoadBalancer, 'update')
loadbalancer.LoadBalancer.update(expected).AndReturn(None)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 1')
self._stub_create(1)
self.m.ReplayAll()
stack = parse_stack(t)
rsrc = self.create_scaling_group(t, stack, 'WebServerGroup')
self.assertEqual('WebServerGroup', rsrc.FnGetRefId())
self.assertEqual('WebServerGroup-0', rsrc.resource_id)
update_snippet = copy.deepcopy(rsrc.parsed_template())
update_snippet['Properties']['Cooldown'] = '61'
self.assertEqual(None, rsrc.update(update_snippet))
rsrc.delete()
self.m.VerifyAll()
def test_scaling_group_adjust(self):
t = template_format.parse(as_template)
stack = parse_stack(t)