def describe_network_acls(filters = {})
response = Excon::Response.new
network_acls = self.data[:network_acls].values
network_acls = apply_tag_filters(network_acls, filters, 'networkAclId')
aliases = {
'vpc-id' => 'vpcId',
'network-acl-id' => 'networkAclId',
'default' => 'default',
}
association_aliases = {
'association-id' => 'networkAclAssociationId',
'network-acl-id' => 'networkAclId',
'subnet-id' => 'subnetId',
}
entry_aliases = {
'cidr' => 'cidrBlock',
'egress' => 'egress',
'rule-action' => 'ruleAction',
'rule-number' => 'ruleNumber',
'protocol' => 'protocol'
}
for filter_key, filter_value in filters
filter_key = filter_key.to_s
if association_key = filter_key.split('association.')[1]
aliased_key = association_aliases[association_key]
network_acls = network_acls.reject{|nacl| !nacl['associationSet'].find {|association| [*filter_value].include?(association[aliased_key])}}
elsif entry_key = filter_key.split('entry.icmp.')[1]
network_acls = network_acls.reject{|nacl| !nacl['entrySet'].find {|association| [*filter_value].include?(association['icmpTypeCode'][entry_key])}}
elsif entry_key = filter_key.split('entry.port-range.')[1]
network_acls = network_acls.reject{|nacl| !nacl['entrySet'].find {|association| [*filter_value].include?(association['portRange'][entry_key])}}
elsif entry_key = filter_key.split('entry.')[1]
aliased_key = entry_aliases[entry_key]
network_acls = network_acls.reject{|nacl| !nacl['entrySet'].find {|association| [*filter_value].include?(association[aliased_key])}}
else
aliased_key = aliases[filter_key]
network_acls = network_acls.reject{|nacl| ![*filter_value].include?(nacl[aliased_key])}
end
end
network_acls.each do |acl|
tags = self.data[:tag_sets][acl['networkAclId']]
acl.merge!('tagSet' => tags) if tags
end
response.status = 200
response.body = {
'requestId' => Fog::AWS::Mock.request_id,
'networkAclSet' => network_acls
}
response
end