2014-08-27 11:17:06 -04:00
|
|
|
from __future__ import unicode_literals
|
2013-12-29 08:40:38 -05:00
|
|
|
from moto.core.responses import BaseResponse
|
2017-09-16 17:08:21 +05:30
|
|
|
from moto.ec2.utils import filters_from_querystring
|
2013-02-21 23:13:01 -05:00
|
|
|
|
|
|
|
|
2013-12-29 08:40:38 -05:00
|
|
|
class ElasticNetworkInterfaces(BaseResponse):
|
2013-02-21 23:13:01 -05:00
|
|
|
def create_network_interface(self):
|
2019-10-31 08:44:26 -07:00
|
|
|
subnet_id = self._get_param("SubnetId")
|
|
|
|
private_ip_address = self._get_param("PrivateIpAddress")
|
2019-11-08 16:40:17 +00:00
|
|
|
private_ip_addresses = self._get_multi_param("PrivateIpAddresses")
|
2019-10-31 08:44:26 -07:00
|
|
|
groups = self._get_multi_param("SecurityGroupId")
|
2014-10-30 22:46:24 -04:00
|
|
|
subnet = self.ec2_backend.get_subnet(subnet_id)
|
2019-10-31 08:44:26 -07:00
|
|
|
description = self._get_param("Description")
|
|
|
|
if self.is_not_dryrun("CreateNetworkInterface"):
|
2017-02-23 21:37:43 -05:00
|
|
|
eni = self.ec2_backend.create_network_interface(
|
2019-11-08 16:40:17 +00:00
|
|
|
subnet, private_ip_address, private_ip_addresses, groups, description
|
2019-10-31 08:44:26 -07:00
|
|
|
)
|
|
|
|
template = self.response_template(CREATE_NETWORK_INTERFACE_RESPONSE)
|
2016-10-15 23:08:44 +10:00
|
|
|
return template.render(eni=eni)
|
2013-02-21 23:13:01 -05:00
|
|
|
|
|
|
|
def delete_network_interface(self):
|
2019-10-31 08:44:26 -07:00
|
|
|
eni_id = self._get_param("NetworkInterfaceId")
|
|
|
|
if self.is_not_dryrun("DeleteNetworkInterface"):
|
2016-10-15 23:08:44 +10:00
|
|
|
self.ec2_backend.delete_network_interface(eni_id)
|
2019-10-31 08:44:26 -07:00
|
|
|
template = self.response_template(DELETE_NETWORK_INTERFACE_RESPONSE)
|
2016-10-15 23:08:44 +10:00
|
|
|
return template.render()
|
2013-02-21 23:13:01 -05:00
|
|
|
|
|
|
|
def describe_network_interface_attribute(self):
|
2017-02-23 21:37:43 -05:00
|
|
|
raise NotImplementedError(
|
2019-10-31 08:44:26 -07:00
|
|
|
"ElasticNetworkInterfaces(AmazonVPC).describe_network_interface_attribute is not yet implemented"
|
|
|
|
)
|
2013-02-21 23:13:01 -05:00
|
|
|
|
|
|
|
def describe_network_interfaces(self):
|
2019-10-31 08:44:26 -07:00
|
|
|
eni_ids = self._get_multi_param("NetworkInterfaceId")
|
2014-09-08 16:50:18 -07:00
|
|
|
filters = filters_from_querystring(self.querystring)
|
2016-05-08 00:19:01 +02:00
|
|
|
enis = self.ec2_backend.get_all_network_interfaces(eni_ids, filters)
|
2014-12-12 12:46:07 -08:00
|
|
|
template = self.response_template(DESCRIBE_NETWORK_INTERFACES_RESPONSE)
|
2014-09-08 16:50:18 -07:00
|
|
|
return template.render(enis=enis)
|
2013-02-21 23:13:01 -05:00
|
|
|
|
2014-09-12 10:53:37 -07:00
|
|
|
def attach_network_interface(self):
|
2019-10-31 08:44:26 -07:00
|
|
|
eni_id = self._get_param("NetworkInterfaceId")
|
|
|
|
instance_id = self._get_param("InstanceId")
|
|
|
|
device_index = self._get_param("DeviceIndex")
|
|
|
|
if self.is_not_dryrun("AttachNetworkInterface"):
|
2017-02-23 21:37:43 -05:00
|
|
|
attachment_id = self.ec2_backend.attach_network_interface(
|
2019-10-31 08:44:26 -07:00
|
|
|
eni_id, instance_id, device_index
|
|
|
|
)
|
|
|
|
template = self.response_template(ATTACH_NETWORK_INTERFACE_RESPONSE)
|
2016-10-15 23:08:44 +10:00
|
|
|
return template.render(attachment_id=attachment_id)
|
2014-09-12 10:53:37 -07:00
|
|
|
|
2013-02-21 23:13:01 -05:00
|
|
|
def detach_network_interface(self):
|
2019-10-31 08:44:26 -07:00
|
|
|
attachment_id = self._get_param("AttachmentId")
|
|
|
|
if self.is_not_dryrun("DetachNetworkInterface"):
|
2016-10-15 23:08:44 +10:00
|
|
|
self.ec2_backend.detach_network_interface(attachment_id)
|
2019-10-31 08:44:26 -07:00
|
|
|
template = self.response_template(DETACH_NETWORK_INTERFACE_RESPONSE)
|
2016-10-15 23:08:44 +10:00
|
|
|
return template.render()
|
2013-02-21 23:13:01 -05:00
|
|
|
|
|
|
|
def modify_network_interface_attribute(self):
|
2019-10-31 08:44:26 -07:00
|
|
|
eni_id = self._get_param("NetworkInterfaceId")
|
2021-05-07 13:50:26 +01:00
|
|
|
group_ids = self._get_multi_param("SecurityGroupId")
|
2019-10-31 08:44:26 -07:00
|
|
|
if self.is_not_dryrun("ModifyNetworkInterface"):
|
2021-05-07 13:50:26 +01:00
|
|
|
self.ec2_backend.modify_network_interface_attribute(eni_id, group_ids)
|
2016-10-15 23:08:44 +10:00
|
|
|
return MODIFY_NETWORK_INTERFACE_ATTRIBUTE_RESPONSE
|
2013-02-21 23:13:01 -05:00
|
|
|
|
|
|
|
def reset_network_interface_attribute(self):
|
2019-10-31 08:44:26 -07:00
|
|
|
if self.is_not_dryrun("ResetNetworkInterface"):
|
2017-02-23 21:37:43 -05:00
|
|
|
raise NotImplementedError(
|
2019-10-31 08:44:26 -07:00
|
|
|
"ElasticNetworkInterfaces(AmazonVPC).reset_network_interface_attribute is not yet implemented"
|
|
|
|
)
|
2017-02-23 21:37:43 -05:00
|
|
|
|
2014-09-08 16:50:18 -07:00
|
|
|
|
|
|
|
CREATE_NETWORK_INTERFACE_RESPONSE = """
|
2016-02-02 16:15:18 +03:00
|
|
|
<CreateNetworkInterfaceResponse xmlns="http://ec2.amazonaws.com/doc/2013-10-15/">
|
2014-09-08 16:50:18 -07:00
|
|
|
<requestId>2c6021ec-d705-445a-9780-420d0c7ab793</requestId>
|
|
|
|
<networkInterface>
|
|
|
|
<networkInterfaceId>{{ eni.id }}</networkInterfaceId>
|
|
|
|
<subnetId>{{ eni.subnet.id }}</subnetId>
|
|
|
|
<vpcId>{{ eni.subnet.vpc_id }}</vpcId>
|
|
|
|
<availabilityZone>us-west-2a</availabilityZone>
|
2019-07-15 00:01:37 +02:00
|
|
|
{% if eni.description %}
|
|
|
|
<description>{{ eni.description }}</description>
|
|
|
|
{% else %}
|
2014-09-08 16:50:18 -07:00
|
|
|
<description/>
|
2019-07-15 00:01:37 +02:00
|
|
|
{% endif %}
|
2014-09-08 16:50:18 -07:00
|
|
|
<ownerId>498654062920</ownerId>
|
|
|
|
<requesterManaged>false</requesterManaged>
|
|
|
|
<status>pending</status>
|
|
|
|
<macAddress>02:07:a9:b6:12:51</macAddress>
|
|
|
|
{% if eni.private_ip_address %}
|
|
|
|
<privateIpAddress>{{ eni.private_ip_address }}</privateIpAddress>
|
|
|
|
{% endif %}
|
2014-10-22 15:11:37 -07:00
|
|
|
{% if eni.instance %}
|
|
|
|
<sourceDestCheck>{{ eni.instance.source_dest_check }}</sourceDestCheck>
|
|
|
|
{% endif %}
|
2014-09-08 16:50:18 -07:00
|
|
|
<groupSet>
|
|
|
|
{% for group in eni.group_set %}
|
|
|
|
<item>
|
|
|
|
<groupId>{{ group.id }}</groupId>
|
|
|
|
<groupName>{{ group.name }}</groupName>
|
|
|
|
</item>
|
|
|
|
{% endfor %}
|
|
|
|
</groupSet>
|
|
|
|
<tagSet/>
|
|
|
|
{% if eni.private_ip_address %}
|
|
|
|
<privateIpAddressesSet>
|
|
|
|
<item>
|
|
|
|
<privateIpAddress>{{ eni.private_ip_address }}</privateIpAddress>
|
|
|
|
<primary>true</primary>
|
|
|
|
</item>
|
|
|
|
</privateIpAddressesSet>
|
|
|
|
{% else %}
|
|
|
|
<privateIpAddressesSet/>
|
|
|
|
{% endif %}
|
|
|
|
</networkInterface>
|
|
|
|
</CreateNetworkInterfaceResponse>
|
|
|
|
"""
|
|
|
|
|
2016-02-02 16:15:18 +03:00
|
|
|
DESCRIBE_NETWORK_INTERFACES_RESPONSE = """<DescribeNetworkInterfacesResponse xmlns="http://ec2.amazonaws.com/doc/2013-10-15/">
|
2014-09-08 16:50:18 -07:00
|
|
|
<requestId>ddb0aaf1-8b65-4f0a-94fa-654b18b8a204</requestId>
|
|
|
|
<networkInterfaceSet>
|
|
|
|
{% for eni in enis %}
|
|
|
|
<item>
|
|
|
|
<networkInterfaceId>{{ eni.id }}</networkInterfaceId>
|
|
|
|
<subnetId>{{ eni.subnet.id }}</subnetId>
|
2014-09-09 21:14:16 -04:00
|
|
|
<vpcId>{{ eni.subnet.vpc_id }}</vpcId>
|
2014-09-08 16:50:18 -07:00
|
|
|
<availabilityZone>us-west-2a</availabilityZone>
|
2019-07-15 00:01:37 +02:00
|
|
|
<description>{{ eni.description }}</description>
|
2014-09-08 16:50:18 -07:00
|
|
|
<ownerId>190610284047</ownerId>
|
|
|
|
<requesterManaged>false</requesterManaged>
|
2016-05-08 00:19:01 +02:00
|
|
|
{% if eni.attachment_id %}
|
|
|
|
<status>in-use</status>
|
|
|
|
{% else %}
|
|
|
|
<status>available</status>
|
|
|
|
{% endif %}
|
2014-09-08 16:50:18 -07:00
|
|
|
<macAddress>0e:a3:a7:7b:95:a7</macAddress>
|
|
|
|
{% if eni.private_ip_address %}
|
|
|
|
<privateIpAddress>{{ eni.private_ip_address }}</privateIpAddress>
|
|
|
|
{% endif %}
|
|
|
|
<privateDnsName>ip-10-0-0-134.us-west-2.compute.internal</privateDnsName>
|
2014-10-22 15:11:37 -07:00
|
|
|
{% if eni.instance %}
|
|
|
|
<sourceDestCheck>{{ eni.instance.source_dest_check }}</sourceDestCheck>
|
|
|
|
{% endif %}
|
2014-09-08 16:50:18 -07:00
|
|
|
<groupSet>
|
|
|
|
{% for group in eni.group_set %}
|
|
|
|
<item>
|
|
|
|
<groupId>{{ group.id }}</groupId>
|
|
|
|
<groupName>{{ group.name }}</groupName>
|
|
|
|
</item>
|
|
|
|
{% endfor %}
|
|
|
|
</groupSet>
|
2016-05-08 00:19:01 +02:00
|
|
|
<tagSet>
|
|
|
|
{% for tag in eni.get_tags() %}
|
|
|
|
<item>
|
|
|
|
<key>{{ tag.key }}</key>
|
|
|
|
<value>{{ tag.value }}</value>
|
|
|
|
</item>
|
|
|
|
{% endfor %}
|
|
|
|
</tagSet>
|
2014-09-12 10:53:37 -07:00
|
|
|
{% if eni.instance %}
|
|
|
|
<attachment>
|
|
|
|
<attachmentId>{{ eni.attachment_id }}</attachmentId>
|
|
|
|
<instanceId>{{ eni.instance.id }}</instanceId>
|
|
|
|
<instanceOwnerId>190610284047</instanceOwnerId>
|
|
|
|
<deviceIndex>{{ eni.device_index }}</deviceIndex>
|
|
|
|
<status>attached</status>
|
|
|
|
<attachTime>2013-10-04T17:38:53.000Z</attachTime>
|
|
|
|
<deleteOnTermination>true</deleteOnTermination>
|
|
|
|
</attachment>
|
|
|
|
{% endif %}
|
2014-09-08 16:50:18 -07:00
|
|
|
<association>
|
|
|
|
<publicIp>{{ eni.public_ip }}</publicIp>
|
|
|
|
<publicDnsName>ec2-54-200-86-47.us-west-2.compute.amazonaws.com</publicDnsName>
|
|
|
|
<ipOwnerId>amazon</ipOwnerId>
|
|
|
|
</association>
|
|
|
|
{% if eni.private_ip_address %}
|
|
|
|
<privateIpAddressesSet>
|
|
|
|
<item>
|
|
|
|
<privateIpAddress>{{ eni.private_ip_address }}</privateIpAddress>
|
|
|
|
<privateDnsName>ip-10-0-0-134.us-west-2.compute.internal</privateDnsName>
|
|
|
|
<primary>true</primary>
|
|
|
|
{% if eni.public_ip %}
|
|
|
|
<association>
|
|
|
|
<publicIp>{{ eni.public_ip }}</publicIp>
|
|
|
|
<publicDnsName>ec2-54-200-86-47.us-west-2.compute.amazonaws.com</publicDnsName>
|
|
|
|
<ipOwnerId>amazon</ipOwnerId>
|
|
|
|
</association>
|
|
|
|
{% endif %}
|
|
|
|
</item>
|
|
|
|
</privateIpAddressesSet>
|
|
|
|
{% else %}
|
|
|
|
<privateIpAddressesSet/>
|
|
|
|
{% endif %}
|
|
|
|
</item>
|
|
|
|
{% endfor %}
|
|
|
|
</networkInterfaceSet>
|
|
|
|
</DescribeNetworkInterfacesResponse>"""
|
|
|
|
|
2016-02-02 16:15:18 +03:00
|
|
|
ATTACH_NETWORK_INTERFACE_RESPONSE = """<AttachNetworkInterfaceResponse xmlns="http://ec2.amazonaws.com/doc/2013-10-15/">
|
2014-09-12 10:53:37 -07:00
|
|
|
<requestId>59dbff89-35bd-4eac-99ed-be587EXAMPLE</requestId>
|
|
|
|
<attachmentId>{{ attachment_id }}</attachmentId>
|
|
|
|
</AttachNetworkInterfaceResponse>"""
|
|
|
|
|
2016-02-02 16:15:18 +03:00
|
|
|
DETACH_NETWORK_INTERFACE_RESPONSE = """<DetachNetworkInterfaceResponse xmlns="http://ec2.amazonaws.com/doc/2013-10-15/">
|
2014-09-12 10:53:37 -07:00
|
|
|
<requestId>59dbff89-35bd-4eac-99ed-be587EXAMPLE</requestId>
|
|
|
|
<return>true</return>
|
|
|
|
</DetachNetworkInterfaceResponse>"""
|
|
|
|
|
2016-02-02 16:15:18 +03:00
|
|
|
MODIFY_NETWORK_INTERFACE_ATTRIBUTE_RESPONSE = """<ModifyNetworkInterfaceAttributeResponse xmlns="http://ec2.amazonaws.com/doc/2013-10-15/">
|
2014-09-08 16:50:18 -07:00
|
|
|
<requestId>59dbff89-35bd-4eac-99ed-be587EXAMPLE</requestId>
|
|
|
|
<return>true</return>
|
|
|
|
</ModifyNetworkInterfaceAttributeResponse>"""
|
|
|
|
|
|
|
|
DELETE_NETWORK_INTERFACE_RESPONSE = """
|
2016-02-02 16:15:18 +03:00
|
|
|
<DeleteNetworkInterfaceResponse xmlns="http://ec2.amazonaws.com/doc/2013-10-15/">
|
2014-09-08 16:50:18 -07:00
|
|
|
<requestId>34b5b3b4-d0c5-49b9-b5e2-a468ef6adcd8</requestId>
|
|
|
|
<return>true</return>
|
|
|
|
</DeleteNetworkInterfaceResponse>"""
|