Use physical_resource_name as Ref for Instance/AS Group
This allows to distinguish groups by stack when using resource OS::Metering::Alarm with the rule: matching_metadata: { 'metadata.user_metadata.groupname': { 'Ref': 'WebServerASGroup'}} And add test for AutoScalingGroup Tags fixe bug #1215840 Change-Id: If3de5c4abddcfb49f711db223a0c1a8c70f3c15a
This commit is contained in:
parent
340dc1bdd2
commit
01fe090072
|
@ -249,7 +249,7 @@ class InstanceGroup(stack_resource.StackResource):
|
|||
scheduler.TaskRunner(lb_resource.update, resolved_snippet)()
|
||||
|
||||
def FnGetRefId(self):
|
||||
return unicode(self.name)
|
||||
return self.physical_resource_name()
|
||||
|
||||
def _resolve_attribute(self, name):
|
||||
'''
|
||||
|
@ -409,9 +409,6 @@ class AutoScalingGroup(InstanceGroup, CooldownMixin):
|
|||
'Value': self.FnGetRefId()}]
|
||||
return super(AutoScalingGroup, self)._tags() + autoscaling_tag
|
||||
|
||||
def FnGetRefId(self):
|
||||
return unicode(self.name)
|
||||
|
||||
def validate(self):
|
||||
res = super(AutoScalingGroup, self).validate()
|
||||
if res:
|
||||
|
@ -512,7 +509,8 @@ class ScalingPolicy(signal_responder.SignalResponder, CooldownMixin):
|
|||
(self.name, self.properties['Cooldown']))
|
||||
return
|
||||
|
||||
group = self.stack[self.properties['AutoScalingGroupName']]
|
||||
asgn_id = self.properties['AutoScalingGroupName']
|
||||
group = self.stack.resource_by_refid(asgn_id)
|
||||
|
||||
logger.info('%s Alarm, adjusting Group %s by %s' %
|
||||
(self.name, group.name,
|
||||
|
|
|
@ -237,7 +237,8 @@ class AutoScalingTest(HeatTestCase):
|
|||
self.m.ReplayAll()
|
||||
rsrc = self.create_scaling_group(t, stack, 'WebServerGroup')
|
||||
|
||||
self.assertEqual('WebServerGroup', rsrc.FnGetRefId())
|
||||
self.assertEqual(utils.PhysName(stack.name, rsrc.name),
|
||||
rsrc.FnGetRefId())
|
||||
self.assertEqual(['WebServerGroup-0'], rsrc.get_instance_names())
|
||||
update_snippet = copy.deepcopy(rsrc.parsed_template())
|
||||
update_snippet['Properties']['AvailabilityZones'] = ['foo']
|
||||
|
@ -257,7 +258,8 @@ class AutoScalingTest(HeatTestCase):
|
|||
self._stub_create(1)
|
||||
self.m.ReplayAll()
|
||||
rsrc = self.create_scaling_group(t, stack, 'WebServerGroup')
|
||||
self.assertEqual('WebServerGroup', rsrc.FnGetRefId())
|
||||
self.assertEqual(utils.PhysName(stack.name, rsrc.name),
|
||||
rsrc.FnGetRefId())
|
||||
self.assertEqual(['WebServerGroup-0'], rsrc.get_instance_names())
|
||||
self.assertEqual(rsrc.state, (rsrc.CREATE, rsrc.COMPLETE))
|
||||
|
||||
|
@ -288,7 +290,8 @@ class AutoScalingTest(HeatTestCase):
|
|||
self._stub_create(1)
|
||||
self.m.ReplayAll()
|
||||
rsrc = self.create_scaling_group(t, stack, 'WebServerGroup')
|
||||
self.assertEqual('WebServerGroup', rsrc.FnGetRefId())
|
||||
self.assertEqual(utils.PhysName(stack.name, rsrc.name),
|
||||
rsrc.FnGetRefId())
|
||||
self.assertEqual(['WebServerGroup-0'], rsrc.get_instance_names())
|
||||
self.assertEqual(rsrc.state, (rsrc.CREATE, rsrc.COMPLETE))
|
||||
|
||||
|
@ -325,7 +328,8 @@ class AutoScalingTest(HeatTestCase):
|
|||
self._stub_create(2)
|
||||
self.m.ReplayAll()
|
||||
rsrc = self.create_scaling_group(t, stack, 'WebServerGroup')
|
||||
self.assertEqual('WebServerGroup', rsrc.FnGetRefId())
|
||||
self.assertEqual(utils.PhysName(stack.name, rsrc.name),
|
||||
rsrc.FnGetRefId())
|
||||
self.assertEqual(['WebServerGroup-0', 'WebServerGroup-1'],
|
||||
rsrc.get_instance_names())
|
||||
self.assertEqual(rsrc.state, (rsrc.CREATE, rsrc.COMPLETE))
|
||||
|
@ -363,7 +367,8 @@ class AutoScalingTest(HeatTestCase):
|
|||
self._stub_create(2)
|
||||
self.m.ReplayAll()
|
||||
rsrc = self.create_scaling_group(t, stack, 'WebServerGroup')
|
||||
self.assertEqual('WebServerGroup', rsrc.FnGetRefId())
|
||||
self.assertEqual(utils.PhysName(stack.name, rsrc.name),
|
||||
rsrc.FnGetRefId())
|
||||
self.assertEqual(['WebServerGroup-0', 'WebServerGroup-1'],
|
||||
rsrc.get_instance_names())
|
||||
self.assertEqual(rsrc.state, (rsrc.CREATE, rsrc.COMPLETE))
|
||||
|
@ -403,7 +408,8 @@ class AutoScalingTest(HeatTestCase):
|
|||
self._stub_create(1)
|
||||
self.m.ReplayAll()
|
||||
rsrc = self.create_scaling_group(t, stack, 'WebServerGroup')
|
||||
self.assertEqual('WebServerGroup', rsrc.FnGetRefId())
|
||||
self.assertEqual(utils.PhysName(stack.name, rsrc.name),
|
||||
rsrc.FnGetRefId())
|
||||
self.assertEqual(['WebServerGroup-0'], rsrc.get_instance_names())
|
||||
self.assertEqual(rsrc.state, (rsrc.CREATE, rsrc.COMPLETE))
|
||||
|
||||
|
@ -434,7 +440,8 @@ class AutoScalingTest(HeatTestCase):
|
|||
self._stub_create(1)
|
||||
self.m.ReplayAll()
|
||||
rsrc = self.create_scaling_group(t, stack, 'WebServerGroup')
|
||||
self.assertEqual('WebServerGroup', rsrc.FnGetRefId())
|
||||
self.assertEqual(utils.PhysName(stack.name, rsrc.name),
|
||||
rsrc.FnGetRefId())
|
||||
self.assertEqual(['WebServerGroup-0'], rsrc.get_instance_names())
|
||||
self.assertEqual(rsrc.state, (rsrc.CREATE, rsrc.COMPLETE))
|
||||
|
||||
|
@ -615,7 +622,8 @@ class AutoScalingTest(HeatTestCase):
|
|||
self.m.ReplayAll()
|
||||
rsrc = self.create_scaling_group(t, stack, 'WebServerGroup')
|
||||
|
||||
self.assertEqual('WebServerGroup', rsrc.FnGetRefId())
|
||||
self.assertEqual(utils.PhysName(stack.name, rsrc.name),
|
||||
rsrc.FnGetRefId())
|
||||
self.assertEqual(['WebServerGroup-0'], rsrc.get_instance_names())
|
||||
update_snippet = copy.deepcopy(rsrc.parsed_template())
|
||||
update_snippet['Properties']['Cooldown'] = '61'
|
||||
|
@ -656,7 +664,8 @@ class AutoScalingTest(HeatTestCase):
|
|||
self.m.ReplayAll()
|
||||
|
||||
rsrc = self.create_scaling_group(t, stack, 'WebServerGroup')
|
||||
self.assertEqual('WebServerGroup', rsrc.FnGetRefId())
|
||||
self.assertEqual(utils.PhysName(stack.name, rsrc.name),
|
||||
rsrc.FnGetRefId())
|
||||
self.assertEqual(['WebServerGroup-0'], rsrc.get_instance_names())
|
||||
update_snippet = copy.deepcopy(rsrc.parsed_template())
|
||||
update_snippet['Properties']['Cooldown'] = '61'
|
||||
|
|
|
@ -102,7 +102,8 @@ class InstanceGroupTest(HeatTestCase):
|
|||
self.m.ReplayAll()
|
||||
conf = self.create_resource(t, stack, 'JobServerConfig')
|
||||
rsrc = self.create_resource(t, stack, 'JobServerGroup')
|
||||
self.assertEqual('JobServerGroup', rsrc.FnGetRefId())
|
||||
self.assertEqual(utils.PhysName(stack.name, rsrc.name),
|
||||
rsrc.FnGetRefId())
|
||||
self.assertEqual('1.2.3.4', rsrc.FnGetAtt('InstanceList'))
|
||||
|
||||
nested = rsrc.nested()
|
||||
|
@ -134,7 +135,8 @@ class InstanceGroupTest(HeatTestCase):
|
|||
self.m.ReplayAll()
|
||||
conf = self.create_resource(t, stack, 'JobServerConfig')
|
||||
rsrc = self.create_resource(t, stack, 'JobServerGroup')
|
||||
self.assertEqual('JobServerGroup', rsrc.FnGetRefId())
|
||||
self.assertEqual(utils.PhysName(stack.name, rsrc.name),
|
||||
rsrc.FnGetRefId())
|
||||
rsrc.delete()
|
||||
self.m.VerifyAll()
|
||||
|
||||
|
|
|
@ -84,6 +84,42 @@ group_template = '''
|
|||
}
|
||||
'''
|
||||
|
||||
autoscaling_template = '''
|
||||
{
|
||||
"AWSTemplateFormatVersion" : "2010-09-09",
|
||||
"Description" : "WordPress",
|
||||
"Parameters" : {
|
||||
"KeyName" : {
|
||||
"Description" : "KeyName",
|
||||
"Type" : "String",
|
||||
"Default" : "test"
|
||||
}
|
||||
},
|
||||
"Resources" : {
|
||||
"Config": {
|
||||
"Type": "AWS::AutoScaling::LaunchConfiguration",
|
||||
"Properties": {
|
||||
"ImageId" : "CentOS 5.2",
|
||||
"InstanceType" : "256 MB Server",
|
||||
"KeyName" : "test",
|
||||
"UserData" : "wordpress"
|
||||
}
|
||||
},
|
||||
|
||||
"WebServer": {
|
||||
"Type": "AWS::AutoScaling::AutoScalingGroup",
|
||||
"Properties": {
|
||||
"AvailabilityZones" : ["nova"],
|
||||
"LaunchConfigurationName": { "Ref": "Config" },
|
||||
"MinSize" : "1",
|
||||
"MaxSize" : "2",
|
||||
"Tags" : [{"Key" : "foo", "Value" : "42"}],
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
'''
|
||||
|
||||
|
||||
class ServerTagsTest(HeatTestCase):
|
||||
def setUp(self):
|
||||
|
@ -153,6 +189,9 @@ class ServerTagsTest(HeatTestCase):
|
|||
|
||||
group = stack.resources['WebServer']
|
||||
|
||||
nova_tags['metering.groupname'] = utils.PhysName(stack.name,
|
||||
group.name)
|
||||
|
||||
self.m.StubOutWithMock(instances.Instance, 'nova')
|
||||
instances.Instance.nova().MultipleTimes().AndReturn(self.fc)
|
||||
|
||||
|
@ -173,10 +212,61 @@ class ServerTagsTest(HeatTestCase):
|
|||
def test_group_tags(self):
|
||||
tags = [{'Key': 'Food', 'Value': 'yum'}]
|
||||
metadata = dict((tm['Key'], tm['Value']) for tm in tags)
|
||||
metadata['metering.groupname'] = 'WebServer'
|
||||
group = self._setup_test_group(intags=tags, nova_tags=metadata)
|
||||
self.m.ReplayAll()
|
||||
scheduler.TaskRunner(group.create)()
|
||||
# we are just using mock to verify that the tags get through to the
|
||||
# nova call.
|
||||
self.m.VerifyAll()
|
||||
|
||||
def _setup_test_group_autoscaling(self, intags=None, nova_tags=None):
|
||||
stack_name = 'tag_as_name'
|
||||
t = template_format.parse(autoscaling_template)
|
||||
template = parser.Template(t)
|
||||
stack = parser.Stack(utils.dummy_context(), stack_name, template,
|
||||
environment.Environment({'KeyName': 'test'}),
|
||||
stack_id=uuidutils.generate_uuid())
|
||||
t['Resources']['WebServer']['Properties']['Tags'] += intags
|
||||
|
||||
# create the launch configuration
|
||||
conf = stack.resources['Config']
|
||||
self.assertEqual(None, conf.validate())
|
||||
scheduler.TaskRunner(conf.create)()
|
||||
self.assertEqual((conf.CREATE, conf.COMPLETE), conf.state)
|
||||
group = stack.resources['WebServer']
|
||||
|
||||
group_refid = utils.PhysName(stack.name, group.name)
|
||||
|
||||
nova_tags['metering.groupname'] = group_refid
|
||||
nova_tags['AutoScalingGroupName'] = group_refid
|
||||
|
||||
self.m.StubOutWithMock(group, '_cooldown_timestamp')
|
||||
group._cooldown_timestamp(mox.IgnoreArg()).AndReturn(None)
|
||||
|
||||
self.m.StubOutWithMock(instances.Instance, 'nova')
|
||||
instances.Instance.nova().MultipleTimes().AndReturn(self.fc)
|
||||
|
||||
group.t = group.stack.resolve_runtime_data(group.t)
|
||||
|
||||
# need to resolve the template functions
|
||||
self.m.StubOutWithMock(self.fc.servers, 'create')
|
||||
self.fc.servers.create(
|
||||
image=1, flavor=1, key_name='test',
|
||||
name=mox.IgnoreArg(),
|
||||
security_groups=None,
|
||||
userdata=mox.IgnoreArg(), scheduler_hints=None,
|
||||
meta=nova_tags, nics=None, availability_zone=None).AndReturn(
|
||||
self.fc.servers.list()[1])
|
||||
|
||||
return group
|
||||
|
||||
def test_as_group_tags(self):
|
||||
tags = [{'Key': 'Food', 'Value': 'yum'}, {'Key': 'foo', 'Value': '42'}]
|
||||
metadata = dict((tm['Key'], tm['Value']) for tm in tags)
|
||||
group = self._setup_test_group_autoscaling(intags=[tags[0]],
|
||||
nova_tags=metadata)
|
||||
self.m.ReplayAll()
|
||||
scheduler.TaskRunner(group.create)()
|
||||
# we are just using mock to verify that the tags get through to the
|
||||
# nova call.
|
||||
self.m.VerifyAll()
|
||||
|
|
Loading…
Reference in New Issue