Merge pull request #976 from carleton-stripe/asg-tags

Improve instance tag handling for ASGs
This commit is contained in:
Jack Danger 2017-06-09 15:29:11 -07:00 committed by GitHub
commit e079fab9e3
2 changed files with 33 additions and 2 deletions

View File

@ -9,6 +9,8 @@ from moto.elb.exceptions import LoadBalancerNotFoundError
# http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/AS_Concepts.html#Cooldown
DEFAULT_COOLDOWN = 300
ASG_NAME_TAG = "aws:autoscaling:groupName"
class InstanceState(object):
@ -169,8 +171,8 @@ class FakeAutoScalingGroup(BaseModel):
self.termination_policies = termination_policies
self.instance_states = []
self.set_desired_capacity(desired_capacity)
self.tags = tags if tags else []
self.set_desired_capacity(desired_capacity)
@classmethod
def create_from_cloudformation_json(cls, resource_name, cloudformation_json, region_name):
@ -261,12 +263,17 @@ class FakeAutoScalingGroup(BaseModel):
# Need more instances
count_needed = int(self.desired_capacity) - \
int(curr_instance_count)
propagated_tags = {t['key']: t['value'] for t in self.tags
if t['propagate_at_launch'] == 'true'}
propagated_tags[ASG_NAME_TAG] = self.name
reservation = self.autoscaling_backend.ec2_backend.add_instances(
self.launch_config.image_id,
count_needed,
self.launch_config.user_data,
self.launch_config.security_groups,
instance_type=self.launch_config.instance_type,
tags={'instance': propagated_tags}
)
for instance in reservation.instances:
instance.autoscaling_group = self

View File

@ -8,7 +8,7 @@ from boto.ec2.autoscale import Tag
import boto.ec2.elb
import sure # noqa
from moto import mock_autoscaling, mock_ec2_deprecated, mock_elb_deprecated, mock_autoscaling_deprecated
from moto import mock_autoscaling, mock_ec2_deprecated, mock_elb_deprecated, mock_autoscaling_deprecated, mock_ec2
from tests.helpers import requires_boto_gte
@ -138,6 +138,30 @@ def test_list_many_autoscaling_groups():
groups.should.have.length_of(51)
assert 'NextToken' not in response2.keys()
@mock_autoscaling
@mock_ec2
def test_list_many_autoscaling_groups():
conn = boto3.client('autoscaling', region_name='us-east-1')
conn.create_launch_configuration(LaunchConfigurationName='TestLC')
conn.create_auto_scaling_group(AutoScalingGroupName='TestGroup1',
MinSize=1,
MaxSize=2,
LaunchConfigurationName='TestLC',
Tags=[{
"ResourceId": 'TestGroup1',
"ResourceType": "auto-scaling-group",
"PropagateAtLaunch": True,
"Key": 'TestTagKey1',
"Value": 'TestTagValue1'
}])
ec2 = boto3.client('ec2', region_name='us-east-1')
instances = ec2.describe_instances()
tags = instances['Reservations'][0]['Instances'][0]['Tags']
tags.should.contain({u'Value': 'TestTagValue1', u'Key': 'TestTagKey1'})
tags.should.contain({u'Value': 'TestGroup1', u'Key': 'aws:autoscaling:groupName'})
@mock_autoscaling_deprecated
def test_autoscaling_group_describe_filter():