from __future__ import unicode_literals from jinja2 import Template 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.querystring.get('VpcId')[0] network_acl = self.ec2_backend.create_network_acl(vpc_id) template = Template(CREATE_NETWORK_ACL_RESPONSE) return template.render(network_acl=network_acl) def create_network_acl_entry(self): network_acl_id = self.querystring.get('NetworkAclId')[0] rule_number = self.querystring.get('RuleNumber')[0] protocol = self.querystring.get('Protocol')[0] rule_action = self.querystring.get('RuleAction')[0] egress = self.querystring.get('Egress')[0] cidr_block = self.querystring.get('CidrBlock')[0] icmp_code = self.querystring.get('Icmp.Code', [None])[0] icmp_type = self.querystring.get('Icmp.Type', [None])[0] port_range_from = self.querystring.get('PortRange.From')[0] port_range_to = self.querystring.get('PortRange.To')[0] 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 = Template(CREATE_NETWORK_ACL_ENTRY_RESPONSE) return template.render(network_acl_entry=network_acl_entry) def delete_network_acl(self): raise NotImplementedError( 'NetworkACLs(AmazonVPC).delete_network_acl is not yet implemented') def delete_network_acl_entry(self): raise NotImplementedError( 'NetworkACLs(AmazonVPC).delete_network_acl_entry is not yet implemented') def describe_network_acls(self): filters = filters_from_querystring(self.querystring) network_acls = self.ec2_backend.get_all_network_acls(filters) template = Template(DESCRIBE_NETWORK_ACL_RESPONSE) return template.render(network_acls=network_acls) def replace_network_acl_association(self): raise NotImplementedError( 'NetworkACLs(AmazonVPC).replace_network_acl_association is not yet implemented') def replace_network_acl_entry(self): raise NotImplementedError( 'NetworkACLs(AmazonVPC).replace_network_acl_entry is not yet implemented') CREATE_NETWORK_ACL_RESPONSE = """ 59dbff89-35bd-4eac-99ed-be587EXAMPLE {{ network_acl.id }} {{ network_acl.vpc_id }} false """ DESCRIBE_NETWORK_ACL_RESPONSE = """ 59dbff89-35bd-4eac-99ed-be587EXAMPLE {% for network_acl in network_acls %} {{ network_acl.id }} {{ network_acl.vpc_id }} true {% 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 %} {% endfor %} """ CREATE_NETWORK_ACL_ENTRY_RESPONSE = """ 59dbff89-35bd-4eac-99ed-be587EXAMPLE true """