added update_and_create_tags() to autoscale groups
This commit is contained in:
parent
0efea0af2b
commit
1d2042876e
@ -441,12 +441,25 @@ class AutoScalingBackend(BaseBackend):
|
|||||||
self.elb_backend.deregister_instances(elb.name, elb_instace_ids - group_instance_ids)
|
self.elb_backend.deregister_instances(elb.name, elb_instace_ids - group_instance_ids)
|
||||||
|
|
||||||
def create_or_update_tags(self, tags):
|
def create_or_update_tags(self, tags):
|
||||||
|
|
||||||
for tag in tags:
|
for tag in tags:
|
||||||
group_name = tag["ResourceId"]
|
group_name = tag["resource_id"]
|
||||||
group = self.autoscaling_groups[group_name]
|
group = self.autoscaling_groups[group_name]
|
||||||
updated_tags = group.tags.copy()
|
old_tags = group.tags
|
||||||
updated_tags.update(tag)
|
|
||||||
group.tags = updated_tags
|
new_tags = []
|
||||||
|
#if key was in old_tags, update old tag
|
||||||
|
for old_tag in old_tags:
|
||||||
|
if old_tag["key"] == tag["key"]:
|
||||||
|
new_tags.append(tag)
|
||||||
|
else:
|
||||||
|
new_tags.append(old_tag)
|
||||||
|
|
||||||
|
#if key was never in old_tag's add it (create tag)
|
||||||
|
if not any(new_tag['key'] == tag['key'] for new_tag in new_tags):
|
||||||
|
new_tags.append(tag)
|
||||||
|
|
||||||
|
group.tags = new_tags
|
||||||
|
|
||||||
autoscaling_backends = {}
|
autoscaling_backends = {}
|
||||||
for region, ec2_backend in ec2_backends.items():
|
for region, ec2_backend in ec2_backends.items():
|
||||||
|
@ -106,9 +106,11 @@ class AutoScalingResponse(BaseResponse):
|
|||||||
return template.render()
|
return template.render()
|
||||||
|
|
||||||
def create_or_update_tags(self):
|
def create_or_update_tags(self):
|
||||||
tags = self._get_param('Tags')
|
tags = self._get_list_prefix('Tags.member')
|
||||||
|
|
||||||
self.autoscaling_backend.create_or_update_tags(tags)
|
self.autoscaling_backend.create_or_update_tags(tags)
|
||||||
return None
|
template = self.response_template(UPDATE_AUTOSCALING_GROUP_TEMPLATE)
|
||||||
|
return template.render()
|
||||||
|
|
||||||
def describe_auto_scaling_instances(self):
|
def describe_auto_scaling_instances(self):
|
||||||
instance_states = self.autoscaling_backend.describe_autoscaling_instances()
|
instance_states = self.autoscaling_backend.describe_autoscaling_instances()
|
||||||
|
@ -169,6 +169,48 @@ def test_autoscaling_update():
|
|||||||
group.vpc_zone_identifier.should.equal('subnet-5678efgh')
|
group.vpc_zone_identifier.should.equal('subnet-5678efgh')
|
||||||
|
|
||||||
|
|
||||||
|
@mock_autoscaling
|
||||||
|
def test_autoscaling_tags_update():
|
||||||
|
conn = boto.connect_autoscale()
|
||||||
|
config = LaunchConfiguration(
|
||||||
|
name='tester',
|
||||||
|
image_id='ami-abcd1234',
|
||||||
|
instance_type='t2.medium',
|
||||||
|
)
|
||||||
|
conn.create_launch_configuration(config)
|
||||||
|
|
||||||
|
group = AutoScalingGroup(
|
||||||
|
name='tester_group',
|
||||||
|
availability_zones=['us-east-1c', 'us-east-1b'],
|
||||||
|
desired_capacity=2,
|
||||||
|
max_size=2,
|
||||||
|
min_size=2,
|
||||||
|
launch_config=config,
|
||||||
|
vpc_zone_identifier='subnet-1234abcd',
|
||||||
|
tags=[Tag(
|
||||||
|
resource_id='tester_group',
|
||||||
|
key='test_key',
|
||||||
|
value='test_value',
|
||||||
|
propagate_at_launch=True
|
||||||
|
)],
|
||||||
|
)
|
||||||
|
conn.create_auto_scaling_group(group)
|
||||||
|
|
||||||
|
conn.create_or_update_tags(tags=[Tag(
|
||||||
|
resource_id='tester_group',
|
||||||
|
key='test_key',
|
||||||
|
value='new_test_value',
|
||||||
|
propagate_at_launch=True
|
||||||
|
), Tag(
|
||||||
|
resource_id='tester_group',
|
||||||
|
key='test_key2',
|
||||||
|
value='test_value2',
|
||||||
|
propagate_at_launch=True
|
||||||
|
)])
|
||||||
|
group = conn.get_all_groups()[0]
|
||||||
|
group.tags.should.have.length_of(2)
|
||||||
|
|
||||||
|
|
||||||
@mock_autoscaling
|
@mock_autoscaling
|
||||||
def test_autoscaling_group_delete():
|
def test_autoscaling_group_delete():
|
||||||
conn = boto.connect_autoscale()
|
conn = boto.connect_autoscale()
|
||||||
@ -420,6 +462,7 @@ def test_describe_autoscaling_groups_boto3():
|
|||||||
response['ResponseMetadata']['HTTPStatusCode'].should.equal(200)
|
response['ResponseMetadata']['HTTPStatusCode'].should.equal(200)
|
||||||
response['AutoScalingGroups'][0]['AutoScalingGroupName'].should.equal('test_asg')
|
response['AutoScalingGroups'][0]['AutoScalingGroupName'].should.equal('test_asg')
|
||||||
|
|
||||||
|
|
||||||
@mock_autoscaling
|
@mock_autoscaling
|
||||||
def test_update_autoscaling_group_boto3():
|
def test_update_autoscaling_group_boto3():
|
||||||
client = boto3.client('autoscaling', region_name='us-east-1')
|
client = boto3.client('autoscaling', region_name='us-east-1')
|
||||||
@ -443,3 +486,41 @@ def test_update_autoscaling_group_boto3():
|
|||||||
AutoScalingGroupNames=["test_asg"]
|
AutoScalingGroupNames=["test_asg"]
|
||||||
)
|
)
|
||||||
response['AutoScalingGroups'][0]['MinSize'].should.equal(1)
|
response['AutoScalingGroups'][0]['MinSize'].should.equal(1)
|
||||||
|
|
||||||
|
|
||||||
|
@mock_autoscaling
|
||||||
|
def test_autoscaling_taqs_update_boto3():
|
||||||
|
client = boto3.client('autoscaling', region_name='us-east-1')
|
||||||
|
_ = client.create_launch_configuration(
|
||||||
|
LaunchConfigurationName='test_launch_configuration'
|
||||||
|
)
|
||||||
|
_ = client.create_auto_scaling_group(
|
||||||
|
AutoScalingGroupName='test_asg',
|
||||||
|
LaunchConfigurationName='test_launch_configuration',
|
||||||
|
MinSize=0,
|
||||||
|
MaxSize=20,
|
||||||
|
DesiredCapacity=5,
|
||||||
|
Tags=[{
|
||||||
|
"ResourceId": 'test_asg',
|
||||||
|
"Key": 'test_key',
|
||||||
|
"Value": 'test_value',
|
||||||
|
"PropagateAtLaunch": True
|
||||||
|
}]
|
||||||
|
)
|
||||||
|
|
||||||
|
client.create_or_update_tags(Tags=[{
|
||||||
|
"ResourceId": 'test_asg',
|
||||||
|
"Key": 'test_key',
|
||||||
|
"Value": 'updated_test_value',
|
||||||
|
"PropagateAtLaunch": True
|
||||||
|
}, {
|
||||||
|
"ResourceId": 'test_asg',
|
||||||
|
"Key": 'test_key2',
|
||||||
|
"Value": 'test_value2',
|
||||||
|
"PropagateAtLaunch": True
|
||||||
|
}])
|
||||||
|
|
||||||
|
response = client.describe_auto_scaling_groups(
|
||||||
|
AutoScalingGroupNames=["test_asg"]
|
||||||
|
)
|
||||||
|
response['AutoScalingGroups'][0]['Tags'].should.have.length_of(2)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user