from __future__ import unicode_literals from moto.core.responses import BaseResponse from moto.ec2.utils import filters_from_querystring class NetworkACLs(BaseResponse): def create_network_acl(self): vpc_id = self._get_param('VpcId') network_acl = self.ec2_backend.create_network_acl(vpc_id) template = self.response_template(CREATE_NETWORK_ACL_RESPONSE) return template.render(network_acl=network_acl) def create_network_acl_entry(self): network_acl_id = self._get_param('NetworkAclId') rule_number = self._get_param('RuleNumber') protocol = self._get_param('Protocol') rule_action = self._get_param('RuleAction') egress = self._get_param('Egress') cidr_block = self._get_param('CidrBlock') icmp_code = self._get_param('Icmp.Code') icmp_type = self._get_param('Icmp.Type') port_range_from = self._get_param('PortRange.From') port_range_to = self._get_param('PortRange.To') network_acl_entry = self.ec2_backend.create_network_acl_entry( network_acl_id, rule_number, protocol, rule_action, egress, cidr_block, icmp_code, icmp_type, port_range_from, port_range_to) template = self.response_template(CREATE_NETWORK_ACL_ENTRY_RESPONSE) return template.render(network_acl_entry=network_acl_entry) def delete_network_acl(self): network_acl_id = self._get_param('NetworkAclId') self.ec2_backend.delete_network_acl(network_acl_id) template = self.response_template(DELETE_NETWORK_ACL_ASSOCIATION) return template.render() def delete_network_acl_entry(self): network_acl_id = self._get_param('NetworkAclId') rule_number = self._get_param('RuleNumber') egress = self._get_param('Egress') self.ec2_backend.delete_network_acl_entry(network_acl_id, rule_number, egress) template = self.response_template(DELETE_NETWORK_ACL_ENTRY_RESPONSE) return template.render() def replace_network_acl_entry(self): network_acl_id = self._get_param('NetworkAclId') rule_number = self._get_param('RuleNumber') protocol = self._get_param('Protocol') rule_action = self._get_param('RuleAction') egress = self._get_param('Egress') cidr_block = self._get_param('CidrBlock') icmp_code = self._get_param('Icmp.Code') icmp_type = self._get_param('Icmp.Type') port_range_from = self._get_param('PortRange.From') port_range_to = self._get_param('PortRange.To') self.ec2_backend.replace_network_acl_entry( network_acl_id, rule_number, protocol, rule_action, egress, cidr_block, icmp_code, icmp_type, port_range_from, port_range_to) template = self.response_template(REPLACE_NETWORK_ACL_ENTRY_RESPONSE) return template.render() def describe_network_acls(self): network_acl_ids = self._get_multi_param('NetworkAclId') filters = filters_from_querystring(self.querystring) network_acls = self.ec2_backend.get_all_network_acls( network_acl_ids, filters) template = self.response_template(DESCRIBE_NETWORK_ACL_RESPONSE) return template.render(network_acls=network_acls) def replace_network_acl_association(self): association_id = self._get_param('AssociationId') network_acl_id = self._get_param('NetworkAclId') association = self.ec2_backend.replace_network_acl_association( association_id, network_acl_id ) template = self.response_template(REPLACE_NETWORK_ACL_ASSOCIATION) return template.render(association=association) CREATE_NETWORK_ACL_RESPONSE = """ 59dbff89-35bd-4eac-99ed-be587EXAMPLE {{ network_acl.id }} {{ network_acl.vpc_id }} false {% for tag in network_acl.get_tags() %} {{ tag.resource_id }} {{ tag.resource_type }} {{ tag.key }} {{ tag.value }} {% endfor %} """ DESCRIBE_NETWORK_ACL_RESPONSE = """ 59dbff89-35bd-4eac-99ed-be587EXAMPLE {% for network_acl in network_acls %} {{ network_acl.id }} {{ network_acl.vpc_id }} {{ network_acl.default }} {% for entry in network_acl.network_acl_entries %} {{ entry.rule_number }} {{ entry.protocol }} {{ entry.rule_action }} {{ entry.egress.lower() }} {{ entry.cidr_block }} {% if entry.port_range_from or entry.port_range_to %} {{ entry.port_range_from }} {{ entry.port_range_to }} {% endif %} {% endfor %} {% for association in network_acl.associations.values() %} {{ association.id }} {{ association.network_acl_id }} {{ association.subnet_id }} {% endfor %} {% for tag in network_acl.get_tags() %} {{ tag.resource_id }} {{ tag.resource_type }} {{ tag.key }} {{ tag.value }} {% endfor %} {% endfor %} """ CREATE_NETWORK_ACL_ENTRY_RESPONSE = """ 59dbff89-35bd-4eac-99ed-be587EXAMPLE true """ REPLACE_NETWORK_ACL_ENTRY_RESPONSE = """ 59dbff89-35bd-4eac-99ed-be587EXAMPLE true """ REPLACE_NETWORK_ACL_ASSOCIATION = """ 59dbff89-35bd-4eac-99ed-be587EXAMPLE {{ association.new_association_id }} """ DELETE_NETWORK_ACL_ASSOCIATION = """ 59dbff89-35bd-4eac-99ed-be587EXAMPLE true """ DELETE_NETWORK_ACL_ENTRY_RESPONSE = """ 59dbff89-35bd-4eac-99ed-be587EXAMPLE true """