from ._base_response import EC2BaseResponse class NetworkACLs(EC2BaseResponse): def create_network_acl(self) -> str: vpc_id = self._get_param("VpcId") tags = self._get_multi_param("TagSpecification") if tags: tags = tags[0].get("Tag") network_acl = self.ec2_backend.create_network_acl(vpc_id, tags=tags) template = self.response_template(CREATE_NETWORK_ACL_RESPONSE) return template.render(network_acl=network_acl) def create_network_acl_entry(self) -> str: 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) -> str: 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) -> str: 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) -> str: 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) -> str: network_acl_ids = self._get_multi_param("NetworkAclId") filters = self._filters_from_querystring() network_acls = self.ec2_backend.describe_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) -> str: 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.owner_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 """