120 lines
4.6 KiB
Python
120 lines
4.6 KiB
Python
from ._base_response import EC2BaseResponse
|
|
|
|
|
|
class HostsResponse(EC2BaseResponse):
|
|
def allocate_hosts(self) -> str:
|
|
params = self._get_params()
|
|
quantity = int(params.get("Quantity")) # type: ignore
|
|
host_recovery = params.get("HostRecovery")
|
|
zone = params.get("AvailabilityZone")
|
|
instance_type = params.get("InstanceType")
|
|
instance_family = params.get("InstanceFamily")
|
|
auto_placement = params.get("AutoPlacement")
|
|
tags = self._parse_tag_specification()
|
|
host_tags = tags.get("dedicated-host", {})
|
|
host_ids = self.ec2_backend.allocate_hosts(
|
|
quantity,
|
|
host_recovery,
|
|
zone,
|
|
instance_type,
|
|
instance_family,
|
|
auto_placement,
|
|
host_tags,
|
|
)
|
|
template = self.response_template(EC2_ALLOCATE_HOSTS)
|
|
return template.render(host_ids=host_ids)
|
|
|
|
def describe_hosts(self) -> str:
|
|
host_ids = list(self._get_params().get("HostId", {}).values())
|
|
filters = self._filters_from_querystring()
|
|
hosts = self.ec2_backend.describe_hosts(host_ids, filters)
|
|
template = self.response_template(EC2_DESCRIBE_HOSTS)
|
|
return template.render(account_id=self.current_account, hosts=hosts)
|
|
|
|
def modify_hosts(self) -> str:
|
|
params = self._get_params()
|
|
host_ids = list(self._get_params().get("HostId", {}).values())
|
|
auto_placement = params.get("AutoPlacement")
|
|
host_recovery = params.get("HostRecovery")
|
|
instance_type = params.get("InstanceType")
|
|
instance_family = params.get("InstanceFamily")
|
|
self.ec2_backend.modify_hosts(
|
|
host_ids, auto_placement, host_recovery, instance_type, instance_family
|
|
)
|
|
template = self.response_template(EC2_MODIFY_HOSTS)
|
|
return template.render(host_ids=host_ids)
|
|
|
|
def release_hosts(self) -> str:
|
|
host_ids = list(self._get_params().get("HostId", {}).values())
|
|
self.ec2_backend.release_hosts(host_ids)
|
|
template = self.response_template(EC2_RELEASE_HOSTS)
|
|
return template.render(host_ids=host_ids)
|
|
|
|
|
|
EC2_ALLOCATE_HOSTS = """<AllocateHostsResult xmlns="http://ec2.amazonaws.com/doc/2013-10-15/">
|
|
<requestId>fdcdcab1-ae5c-489e-9c33-4637c5dda355</requestId>
|
|
<hostIdSet>
|
|
{% for host_id in host_ids %}
|
|
<item>{{ host_id }}</item>
|
|
{% endfor %}
|
|
</hostIdSet>
|
|
</AllocateHostsResult>"""
|
|
|
|
|
|
EC2_DESCRIBE_HOSTS = """<DescribeHostsResult xmlns="http://ec2.amazonaws.com/doc/2013-10-15/">
|
|
<requestId>fdcdcab1-ae5c-489e-9c33-4637c5dda355</requestId>
|
|
<hostSet>
|
|
{% for host in hosts %}
|
|
<item>
|
|
<allocationTime>{{ host.allocation_time }}</allocationTime>
|
|
<autoPlacement>{{ host.auto_placement }}</autoPlacement>
|
|
<availabilityZone>{{ host.zone }}</availabilityZone>
|
|
<availableCapacity></availableCapacity>
|
|
<hostId>{{ host.id }}</hostId>
|
|
<state>{{ host.state }}</state>
|
|
<hostProperties>
|
|
{% if host.instance_type %}
|
|
<instanceType>{{ host.instance_type }}</instanceType>
|
|
{% endif %}
|
|
{% if host.instance_family %}
|
|
<instanceFamily>{{ host.instance_family }}</instanceFamily>
|
|
{% endif %}
|
|
</hostProperties>
|
|
<hostReservationId>reserv_id</hostReservationId>
|
|
<instances>
|
|
</instances>
|
|
<ownerId>{{ account_id }}</ownerId>
|
|
<hostRecovery>{{ host.host_recovery }}</hostRecovery>
|
|
<tagSet>
|
|
{% for tag in host.get_tags() %}
|
|
<item>
|
|
<key>{{ tag.key }}</key>
|
|
<value>{{ tag.value }}</value>
|
|
</item>
|
|
{% endfor %}
|
|
</tagSet>
|
|
</item>
|
|
{% endfor %}
|
|
</hostSet>
|
|
</DescribeHostsResult>"""
|
|
|
|
|
|
EC2_MODIFY_HOSTS = """<ModifyHostsResult xmlns="http://ec2.amazonaws.com/doc/2013-10-15/">
|
|
<requestId>fdcdcab1-ae5c-489e-9c33-4637c5dda355</requestId>
|
|
<successful>
|
|
{% for host_id in host_ids %}
|
|
<item>{{ host_id }}</item>
|
|
{% endfor %}
|
|
</successful>
|
|
</ModifyHostsResult>"""
|
|
|
|
|
|
EC2_RELEASE_HOSTS = """<ReleaseHostsResult xmlns="http://ec2.amazonaws.com/doc/2013-10-15/">
|
|
<requestId>fdcdcab1-ae5c-489e-9c33-4637c5dda355</requestId>
|
|
<successful>
|
|
{% for host_id in host_ids %}
|
|
<item>{{ host_id }}</item>
|
|
{% endfor %}
|
|
</successful>
|
|
</ReleaseHostsResult>"""
|