scheduler.TaskRunner(lb_resource.update, resolved_snippet)()
def FnGetRefId(self):
- return unicode(self.name)
+ return self.physical_resource_name()
def _resolve_attribute(self, name):
'''
'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:
(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,
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']
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))
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))
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))
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))
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))
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))
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'
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'
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()
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()
}
'''
+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):
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)
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()