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