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 """