from __future__ import unicode_literals
from moto.core.responses import BaseResponse
from moto.ec2.utils import filters_from_querystring
class ElasticNetworkInterfaces(BaseResponse):
def create_network_interface(self):
subnet_id = self._get_param("SubnetId")
private_ip_address = self._get_param("PrivateIpAddress")
private_ip_addresses = self._get_multi_param("PrivateIpAddresses")
groups = self._get_multi_param("SecurityGroupId")
subnet = self.ec2_backend.get_subnet(subnet_id)
description = self._get_param("Description")
if self.is_not_dryrun("CreateNetworkInterface"):
eni = self.ec2_backend.create_network_interface(
subnet, private_ip_address, private_ip_addresses, groups, description
)
template = self.response_template(CREATE_NETWORK_INTERFACE_RESPONSE)
return template.render(eni=eni)
def delete_network_interface(self):
eni_id = self._get_param("NetworkInterfaceId")
if self.is_not_dryrun("DeleteNetworkInterface"):
self.ec2_backend.delete_network_interface(eni_id)
template = self.response_template(DELETE_NETWORK_INTERFACE_RESPONSE)
return template.render()
def describe_network_interface_attribute(self):
raise NotImplementedError(
"ElasticNetworkInterfaces(AmazonVPC).describe_network_interface_attribute is not yet implemented"
)
def describe_network_interfaces(self):
eni_ids = self._get_multi_param("NetworkInterfaceId")
filters = filters_from_querystring(self.querystring)
enis = self.ec2_backend.get_all_network_interfaces(eni_ids, filters)
template = self.response_template(DESCRIBE_NETWORK_INTERFACES_RESPONSE)
return template.render(enis=enis)
def attach_network_interface(self):
eni_id = self._get_param("NetworkInterfaceId")
instance_id = self._get_param("InstanceId")
device_index = self._get_param("DeviceIndex")
if self.is_not_dryrun("AttachNetworkInterface"):
attachment_id = self.ec2_backend.attach_network_interface(
eni_id, instance_id, device_index
)
template = self.response_template(ATTACH_NETWORK_INTERFACE_RESPONSE)
return template.render(attachment_id=attachment_id)
def detach_network_interface(self):
attachment_id = self._get_param("AttachmentId")
if self.is_not_dryrun("DetachNetworkInterface"):
self.ec2_backend.detach_network_interface(attachment_id)
template = self.response_template(DETACH_NETWORK_INTERFACE_RESPONSE)
return template.render()
def modify_network_interface_attribute(self):
eni_id = self._get_param("NetworkInterfaceId")
group_ids = self._get_multi_param("SecurityGroupId")
if self.is_not_dryrun("ModifyNetworkInterface"):
self.ec2_backend.modify_network_interface_attribute(eni_id, group_ids)
return MODIFY_NETWORK_INTERFACE_ATTRIBUTE_RESPONSE
def reset_network_interface_attribute(self):
if self.is_not_dryrun("ResetNetworkInterface"):
raise NotImplementedError(
"ElasticNetworkInterfaces(AmazonVPC).reset_network_interface_attribute is not yet implemented"
)
CREATE_NETWORK_INTERFACE_RESPONSE = """
2c6021ec-d705-445a-9780-420d0c7ab793
{{ eni.id }}
{{ eni.subnet.id }}
{{ eni.subnet.vpc_id }}
us-west-2a
{% if eni.description %}
{{ eni.description }}
{% else %}
{% endif %}
498654062920
false
pending
02:07:a9:b6:12:51
{% if eni.private_ip_address %}
{{ eni.private_ip_address }}
{% endif %}
{% if eni.instance %}
{{ eni.instance.source_dest_check }}
{% endif %}
{% for group in eni.group_set %}
-
{{ group.id }}
{{ group.name }}
{% endfor %}
{% if eni.private_ip_address %}
-
{{ eni.private_ip_address }}
true
{% else %}
{% endif %}
"""
DESCRIBE_NETWORK_INTERFACES_RESPONSE = """
ddb0aaf1-8b65-4f0a-94fa-654b18b8a204
{% for eni in enis %}
-
{{ eni.id }}
{{ eni.subnet.id }}
{{ eni.subnet.vpc_id }}
us-west-2a
{{ eni.description }}
190610284047
false
{% if eni.attachment_id %}
in-use
{% else %}
available
{% endif %}
0e:a3:a7:7b:95:a7
{% if eni.private_ip_address %}
{{ eni.private_ip_address }}
{% endif %}
ip-10-0-0-134.us-west-2.compute.internal
{% if eni.instance %}
{{ eni.instance.source_dest_check }}
{% endif %}
{% for group in eni.group_set %}
-
{{ group.id }}
{{ group.name }}
{% endfor %}
{% for tag in eni.get_tags() %}
-
{{ tag.key }}
{{ tag.value }}
{% endfor %}
{% if eni.instance %}
{{ eni.attachment_id }}
{{ eni.instance.id }}
190610284047
{{ eni.device_index }}
attached
2013-10-04T17:38:53.000Z
true
{% endif %}
{{ eni.public_ip }}
ec2-54-200-86-47.us-west-2.compute.amazonaws.com
amazon
{% if eni.private_ip_address %}
-
{{ eni.private_ip_address }}
ip-10-0-0-134.us-west-2.compute.internal
true
{% if eni.public_ip %}
{{ eni.public_ip }}
ec2-54-200-86-47.us-west-2.compute.amazonaws.com
amazon
{% endif %}
{% else %}
{% endif %}
{% endfor %}
"""
ATTACH_NETWORK_INTERFACE_RESPONSE = """
59dbff89-35bd-4eac-99ed-be587EXAMPLE
{{ attachment_id }}
"""
DETACH_NETWORK_INTERFACE_RESPONSE = """
59dbff89-35bd-4eac-99ed-be587EXAMPLE
true
"""
MODIFY_NETWORK_INTERFACE_ATTRIBUTE_RESPONSE = """
59dbff89-35bd-4eac-99ed-be587EXAMPLE
true
"""
DELETE_NETWORK_INTERFACE_RESPONSE = """
34b5b3b4-d0c5-49b9-b5e2-a468ef6adcd8
true
"""