Merge pull request #1509 from jimjshields/add-suspend-processes
Add suspend processes to AutoScaling service
This commit is contained in:
commit
35d69759ef
@ -50,3 +50,4 @@ Moto is written by Steve Pulec with contributions from:
|
|||||||
* [Jessie Nadler](https://github.com/nadlerjessie)
|
* [Jessie Nadler](https://github.com/nadlerjessie)
|
||||||
* [Alex Morken](https://github.com/alexmorken)
|
* [Alex Morken](https://github.com/alexmorken)
|
||||||
* [Clive Li](https://github.com/cliveli)
|
* [Clive Li](https://github.com/cliveli)
|
||||||
|
* [Jim Shields](https://github.com/jimjshields)
|
||||||
|
@ -179,6 +179,7 @@ class FakeAutoScalingGroup(BaseModel):
|
|||||||
self.placement_group = placement_group
|
self.placement_group = placement_group
|
||||||
self.termination_policies = termination_policies
|
self.termination_policies = termination_policies
|
||||||
|
|
||||||
|
self.suspended_processes = []
|
||||||
self.instance_states = []
|
self.instance_states = []
|
||||||
self.tags = tags if tags else []
|
self.tags = tags if tags else []
|
||||||
self.set_desired_capacity(desired_capacity)
|
self.set_desired_capacity(desired_capacity)
|
||||||
@ -621,6 +622,10 @@ class AutoScalingBackend(BaseBackend):
|
|||||||
asg_targets = [{'id': x.instance.id} for x in group.instance_states]
|
asg_targets = [{'id': x.instance.id} for x in group.instance_states]
|
||||||
self.elbv2_backend.deregister_targets(target_group, (asg_targets))
|
self.elbv2_backend.deregister_targets(target_group, (asg_targets))
|
||||||
|
|
||||||
|
def suspend_processes(self, group_name, scaling_processes):
|
||||||
|
group = self.autoscaling_groups[group_name]
|
||||||
|
group.suspended_processes = scaling_processes or []
|
||||||
|
|
||||||
|
|
||||||
autoscaling_backends = {}
|
autoscaling_backends = {}
|
||||||
for region, ec2_backend in ec2_backends.items():
|
for region, ec2_backend in ec2_backends.items():
|
||||||
|
@ -283,6 +283,13 @@ class AutoScalingResponse(BaseResponse):
|
|||||||
template = self.response_template(DETACH_LOAD_BALANCERS_TEMPLATE)
|
template = self.response_template(DETACH_LOAD_BALANCERS_TEMPLATE)
|
||||||
return template.render()
|
return template.render()
|
||||||
|
|
||||||
|
def suspend_processes(self):
|
||||||
|
autoscaling_group_name = self._get_param('AutoScalingGroupName')
|
||||||
|
scaling_processes = self._get_multi_param('ScalingProcesses.member')
|
||||||
|
self.autoscaling_backend.suspend_processes(autoscaling_group_name, scaling_processes)
|
||||||
|
template = self.response_template(SUSPEND_PROCESSES_TEMPLATE)
|
||||||
|
return template.render()
|
||||||
|
|
||||||
|
|
||||||
CREATE_LAUNCH_CONFIGURATION_TEMPLATE = """<CreateLaunchConfigurationResponse xmlns="http://autoscaling.amazonaws.com/doc/2011-01-01/">
|
CREATE_LAUNCH_CONFIGURATION_TEMPLATE = """<CreateLaunchConfigurationResponse xmlns="http://autoscaling.amazonaws.com/doc/2011-01-01/">
|
||||||
<ResponseMetadata>
|
<ResponseMetadata>
|
||||||
@ -463,7 +470,14 @@ DESCRIBE_AUTOSCALING_GROUPS_TEMPLATE = """<DescribeAutoScalingGroupsResponse xml
|
|||||||
</member>
|
</member>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</Tags>
|
</Tags>
|
||||||
<SuspendedProcesses/>
|
<SuspendedProcesses>
|
||||||
|
{% for suspended_process in group.suspended_processes %}
|
||||||
|
<member>
|
||||||
|
<ProcessName>{{suspended_process}}</ProcessName>
|
||||||
|
<SuspensionReason></SuspensionReason>
|
||||||
|
</member>
|
||||||
|
{% endfor %}
|
||||||
|
</SuspendedProcesses>
|
||||||
<AutoScalingGroupName>{{ group.name }}</AutoScalingGroupName>
|
<AutoScalingGroupName>{{ group.name }}</AutoScalingGroupName>
|
||||||
<HealthCheckType>{{ group.health_check_type }}</HealthCheckType>
|
<HealthCheckType>{{ group.health_check_type }}</HealthCheckType>
|
||||||
<CreatedTime>2013-05-06T17:47:15.107Z</CreatedTime>
|
<CreatedTime>2013-05-06T17:47:15.107Z</CreatedTime>
|
||||||
@ -644,6 +658,12 @@ DETACH_LOAD_BALANCERS_TEMPLATE = """<DetachLoadBalancersResponse xmlns="http://a
|
|||||||
</ResponseMetadata>
|
</ResponseMetadata>
|
||||||
</DetachLoadBalancersResponse>"""
|
</DetachLoadBalancersResponse>"""
|
||||||
|
|
||||||
|
SUSPEND_PROCESSES_TEMPLATE = """<SuspendProcessesResponse xmlns="http://autoscaling.amazonaws.com/doc/2011-01-01/">
|
||||||
|
<ResponseMetadata>
|
||||||
|
<RequestId>7c6e177f-f082-11e1-ac58-3714bEXAMPLE</RequestId>
|
||||||
|
</ResponseMetadata>
|
||||||
|
</SuspendProcessesResponse>"""
|
||||||
|
|
||||||
SET_INSTANCE_HEALTH_TEMPLATE = """<SetInstanceHealthResponse xmlns="http://autoscaling.amazonaws.com/doc/2011-01-01/">
|
SET_INSTANCE_HEALTH_TEMPLATE = """<SetInstanceHealthResponse xmlns="http://autoscaling.amazonaws.com/doc/2011-01-01/">
|
||||||
<SetInstanceHealthResponse></SetInstanceHealthResponse>
|
<SetInstanceHealthResponse></SetInstanceHealthResponse>
|
||||||
<ResponseMetadata>
|
<ResponseMetadata>
|
||||||
|
@ -1067,3 +1067,36 @@ def test_set_instance_health():
|
|||||||
|
|
||||||
instance1 = response['AutoScalingGroups'][0]['Instances'][0]
|
instance1 = response['AutoScalingGroups'][0]['Instances'][0]
|
||||||
instance1['HealthStatus'].should.equal('Unhealthy')
|
instance1['HealthStatus'].should.equal('Unhealthy')
|
||||||
|
|
||||||
|
@mock_autoscaling
|
||||||
|
def test_suspend_processes():
|
||||||
|
mocked_networking = setup_networking()
|
||||||
|
client = boto3.client('autoscaling', region_name='us-east-1')
|
||||||
|
client.create_launch_configuration(
|
||||||
|
LaunchConfigurationName='lc',
|
||||||
|
)
|
||||||
|
client.create_auto_scaling_group(
|
||||||
|
LaunchConfigurationName='lc',
|
||||||
|
AutoScalingGroupName='test-asg',
|
||||||
|
MinSize=1,
|
||||||
|
MaxSize=1,
|
||||||
|
VPCZoneIdentifier=mocked_networking['subnet1'],
|
||||||
|
)
|
||||||
|
|
||||||
|
# When we suspend the 'Launch' process on the ASG client
|
||||||
|
client.suspend_processes(
|
||||||
|
AutoScalingGroupName='test-asg',
|
||||||
|
ScalingProcesses=['Launch']
|
||||||
|
)
|
||||||
|
|
||||||
|
res = client.describe_auto_scaling_groups(
|
||||||
|
AutoScalingGroupNames=['test-asg']
|
||||||
|
)
|
||||||
|
|
||||||
|
# The 'Launch' process should, in fact, be suspended
|
||||||
|
launch_suspended = False
|
||||||
|
for proc in res['AutoScalingGroups'][0]['SuspendedProcesses']:
|
||||||
|
if proc.get('ProcessName') == 'Launch':
|
||||||
|
launch_suspended = True
|
||||||
|
|
||||||
|
assert launch_suspended is True
|
||||||
|
Loading…
Reference in New Issue
Block a user