Class: GeoEngineer::Resources::AwsNetworkAclRule

Inherits:
GeoEngineer::Resource show all
Defined in:
lib/geoengineer/resources/aws_network_acl_rule.rb

Overview

AwsNetworkAclRule is the aws_network_acl_rule terrform resource,

Terraform Docs

Constant Summary

Constants inherited from GeoEngineer::Resource

GeoEngineer::Resource::DEFAULT_PROVIDER

Constants included from HasValidations

HasValidations::MAX_POLICY_LENGTH

Instance Attribute Summary

Attributes inherited from GeoEngineer::Resource

#environment, #id, #project, #template, #type

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from GeoEngineer::Resource

_deep_symbolize_keys, #_find_remote_resource, _ignore_remote_resource?, #_json_file, #_normalize_json, _resources_to_ignore, build, #build_individual_remote_resource, clear_remote_resource_cache, #depends_on, #duplicate, #duplicate_resource, #fetch_provider, fetch_remote_resources, #find_remote_as_individual?, #for_resource, #in_project, #initialize, #matched_remote_resource, #merge_parent_tags, #merge_tags, #new?, #remote_resource, #remote_resource_params, #reset, #setup_tags_if_needed, #short_id, #short_name, #short_type, #terraform_name, #to_id_or_ref, #to_ref, #to_s, #to_terraform, #to_terraform_json, type_from_class_name, #validate_has_tag, #validate_required_subresource, #validate_subresource_required_attributes

Methods included from HasLifecycle

#execute_lifecycle, included

Methods included from HasValidations

#errors, included, #validate_at_least_one_present, #validate_cidr_block, #validate_only_one_present, #validate_policy_length, #validate_required_attributes

Methods included from HasSubResources

#assign_block, #attribute_missing, #delete_all_subresources, #delete_subresources_where, #subresources

Methods included from HasAttributes

#[], #[]=, #assign_attribute, #assign_block, #attribute_missing, #attribute_procs, #attributes, #delete, #eager_load_attributes, #method_missing, #reset_attributes, #retrieve_attribute, #terraform_attribute_ref, #terraform_attributes, #timeout

Constructor Details

This class inherits a constructor from GeoEngineer::Resource

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class HasAttributes

Class Method Details

._fetch_remote_resources(provider) ⇒ Object


39
40
41
42
43
44
45
46
47
48
# File 'lib/geoengineer/resources/aws_network_acl_rule.rb', line 39

def self._fetch_remote_resources(provider)
  AwsClients
    .ec2(provider)
    .describe_network_acls['network_acls']
    .map(&:to_h)
    .select { |network_acl| !network_acl[:entries].empty? }
    .map { |network_acl| _generate_rules(network_acl) }
    .flatten
    .reject { |rule| rule[:rule_number] == 32_767 }
end

._generate_rules(network_acl) ⇒ Object


50
51
52
53
54
55
56
57
58
59
60
# File 'lib/geoengineer/resources/aws_network_acl_rule.rb', line 50

def self._generate_rules(network_acl)
  network_acl[:entries].map do |rule|
    terraform_id_components = [
      "#{network_acl[:network_acl_id]}-",
      "#{rule[:rule_number]}-",
      "#{rule[:egress]}-",
      "#{_number_for_protocol(rule[:protocol])}-"
    ]
    rule.merge({ _terraform_id: "nacl-#{Crc32.hashcode(terraform_id_components.join)}" })
  end
end

._number_for_protocol(protocol) ⇒ Object


62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/geoengineer/resources/aws_network_acl_rule.rb', line 62

def self._number_for_protocol(protocol)
  protocols = {
    ah: 51,
    esp: 50,
    udp: 17,
    tcp: 6,
    icmp: 1,
    all: -1
  }
  return unless protocol
  return protocol if protocols.values.map(&:to_s).include?(protocol.to_s)
  protocols[protocol.to_s.downcase.to_sym]
end

Instance Method Details

#support_tags?Boolean

Returns:

  • (Boolean)

35
36
37
# File 'lib/geoengineer/resources/aws_network_acl_rule.rb', line 35

def support_tags?
  false
end

#to_terraform_stateObject


25
26
27
28
29
30
31
32
33
# File 'lib/geoengineer/resources/aws_network_acl_rule.rb', line 25

def to_terraform_state
  tfstate = super
  tfstate[:primary][:attributes] = {
    'network_acl_id' => network_acl_id,
    'rule_number' => rule_number,
    'egress' => egress
  }
  tfstate
end