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:
parent
40c4b44d02
commit
a780bef9c3
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue