129 lines
6.0 KiB
Python
129 lines
6.0 KiB
Python
from __future__ import unicode_literals
|
|
from moto.core.responses import BaseResponse
|
|
|
|
|
|
class SpotFleets(BaseResponse):
|
|
|
|
def cancel_spot_fleet_requests(self):
|
|
spot_fleet_request_ids = self._get_multi_param("SpotFleetRequestId.")
|
|
terminate_instances = self._get_param("TerminateInstances")
|
|
spot_fleets = self.ec2_backend.cancel_spot_fleet_requests(
|
|
spot_fleet_request_ids, terminate_instances)
|
|
template = self.response_template(CANCEL_SPOT_FLEETS_TEMPLATE)
|
|
return template.render(spot_fleets=spot_fleets)
|
|
|
|
def describe_spot_fleet_instances(self):
|
|
spot_fleet_request_id = self._get_param("SpotFleetRequestId")
|
|
|
|
spot_requests = self.ec2_backend.describe_spot_fleet_instances(
|
|
spot_fleet_request_id)
|
|
template = self.response_template(
|
|
DESCRIBE_SPOT_FLEET_INSTANCES_TEMPLATE)
|
|
return template.render(spot_request_id=spot_fleet_request_id, spot_requests=spot_requests)
|
|
|
|
def describe_spot_fleet_requests(self):
|
|
spot_fleet_request_ids = self._get_multi_param("SpotFleetRequestId.")
|
|
|
|
requests = self.ec2_backend.describe_spot_fleet_requests(
|
|
spot_fleet_request_ids)
|
|
template = self.response_template(DESCRIBE_SPOT_FLEET_TEMPLATE)
|
|
return template.render(requests=requests)
|
|
|
|
def request_spot_fleet(self):
|
|
spot_config = self._get_dict_param("SpotFleetRequestConfig.")
|
|
spot_price = spot_config['spot_price']
|
|
target_capacity = spot_config['target_capacity']
|
|
iam_fleet_role = spot_config['iam_fleet_role']
|
|
allocation_strategy = spot_config['allocation_strategy']
|
|
|
|
launch_specs = self._get_list_prefix(
|
|
"SpotFleetRequestConfig.LaunchSpecifications")
|
|
|
|
request = self.ec2_backend.request_spot_fleet(
|
|
spot_price=spot_price,
|
|
target_capacity=target_capacity,
|
|
iam_fleet_role=iam_fleet_role,
|
|
allocation_strategy=allocation_strategy,
|
|
launch_specs=launch_specs,
|
|
)
|
|
|
|
template = self.response_template(REQUEST_SPOT_FLEET_TEMPLATE)
|
|
return template.render(request=request)
|
|
|
|
|
|
REQUEST_SPOT_FLEET_TEMPLATE = """<RequestSpotFleetResponse xmlns="http://ec2.amazonaws.com/doc/2016-09-15/">
|
|
<requestId>60262cc5-2bd4-4c8d-98ed-example</requestId>
|
|
<spotFleetRequestId>{{ request.id }}</spotFleetRequestId>
|
|
</RequestSpotFleetResponse>"""
|
|
|
|
DESCRIBE_SPOT_FLEET_TEMPLATE = """<DescribeSpotFleetRequestsResponse xmlns="http://ec2.amazonaws.com/doc/2016-09-15/">
|
|
<requestId>4d68a6cc-8f2e-4be1-b425-example</requestId>
|
|
<spotFleetRequestConfigSet>
|
|
{% for request in requests %}
|
|
<item>
|
|
<spotFleetRequestId>{{ request.id }}</spotFleetRequestId>
|
|
<spotFleetRequestState>{{ request.state }}</spotFleetRequestState>
|
|
<spotFleetRequestConfig>
|
|
<spotPrice>{{ request.spot_price }}</spotPrice>
|
|
<targetCapacity>{{ request.target_capacity }}</targetCapacity>
|
|
<iamFleetRole>{{ request.iam_fleet_role }}</iamFleetRole>
|
|
<allocationStrategy>{{ request.allocation_strategy }}</allocationStrategy>
|
|
<fulfilledCapacity>{{ request.fulfilled_capacity }}</fulfilledCapacity>
|
|
<launchSpecifications>
|
|
{% for launch_spec in request.launch_specs %}
|
|
<item>
|
|
<subnetId>{{ launch_spec.subnet_id }}</subnetId>
|
|
<ebsOptimized>{{ launch_spec.ebs_optimized }}</ebsOptimized>
|
|
<imageId>{{ launch_spec.image_id }}</imageId>
|
|
<instanceType>{{ launch_spec.instance_type }}</instanceType>
|
|
<iamInstanceProfile><arn>{{ launch_spec.iam_instance_profile }}</arn></iamInstanceProfile>
|
|
<keyName>{{ launch_spec.key_name }}</keyName>
|
|
<monitoring><enabled>{{ launch_spec.monitoring }}</enabled></monitoring>
|
|
<spotPrice>{{ launch_spec.spot_price }}</spotPrice>
|
|
<userData>{{ launch_spec.user_data }}</userData>
|
|
<weightedCapacity>{{ launch_spec.weighted_capacity }}</weightedCapacity>
|
|
<groupSet>
|
|
{% for group in launch_spec.group_set %}
|
|
<item>
|
|
<groupId>{{ group }}</groupId>
|
|
</item>
|
|
{% endfor %}
|
|
</groupSet>
|
|
</item>
|
|
{% endfor %}
|
|
</launchSpecifications>
|
|
</spotFleetRequestConfig>
|
|
</item>
|
|
{% endfor %}
|
|
</spotFleetRequestConfigSet>
|
|
</DescribeSpotFleetRequestsResponse>"""
|
|
|
|
DESCRIBE_SPOT_FLEET_INSTANCES_TEMPLATE = """<DescribeSpotFleetInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2016-09-15/">
|
|
<requestId>cfb09950-45e2-472d-a6a9-example</requestId>
|
|
<spotFleetRequestId>{{ spot_request_id }}</spotFleetRequestId>
|
|
<activeInstanceSet>
|
|
{% for spot_request in spot_requests %}
|
|
<item>
|
|
<instanceId>{{ spot_request.instance.id }}</instanceId>
|
|
<spotInstanceRequestId>{{ spot_request.id }}</spotInstanceRequestId>
|
|
<instanceType>{{ spot_request.instance.instance_type }}</instanceType>
|
|
</item>
|
|
{% endfor %}
|
|
</activeInstanceSet>
|
|
</DescribeSpotFleetInstancesResponse>
|
|
"""
|
|
|
|
CANCEL_SPOT_FLEETS_TEMPLATE = """<CancelSpotFleetRequestsResponse xmlns="http://ec2.amazonaws.com/doc/2016-09-15/">
|
|
<requestId>e12d2fe5-6503-4b4b-911c-example</requestId>
|
|
<unsuccessfulFleetRequestSet/>
|
|
<successfulFleetRequestSet>
|
|
{% for spot_fleet in spot_fleets %}
|
|
<item>
|
|
<spotFleetRequestId>{{ spot_fleet.id }}</spotFleetRequestId>
|
|
<currentSpotFleetRequestState>cancelled_terminating</currentSpotFleetRequestState>
|
|
<previousSpotFleetRequestState>active</previousSpotFleetRequestState>
|
|
</item>
|
|
{% endfor %}
|
|
</successfulFleetRequestSet>
|
|
</CancelSpotFleetRequestsResponse>"""
|