class GeoEngineer::Resources::AwsLambdaPermission

AwsLambdaPermission is the aws_lambda_function terrform resource,

{www.terraform.io/docs/providers/aws/r/lambda_permission.html Terraform Docs}

Public Class Methods

_create_permission(function) click to toggle source
# File lib/geoengineer/resources/aws_lambda_permission.rb, line 44
def self._create_permission(function)
  policy = function[:policy]
  policy[:Statement].map do |statement|
    # Note that the keys for a statement object are all CamelCased
    # Whereas most other keys in this repo are snake_cased
    statement.merge(
      {
        _terraform_id: statement[:Sid],
        function_name: function[:function_name],
        function_version: function[:version],
        qualifer: function[:qualifer] || "$LATEST",
        statement_id: statement[:Sid]
      }
    )
  end
end
_fetch_functions(provider) click to toggle source
# File lib/geoengineer/resources/aws_lambda_permission.rb, line 24
def self._fetch_functions(provider)
  AwsClients
    .lambda(provider)
    .list_functions['functions']
    .map(&:to_h)
end
_fetch_policy(provider, function) click to toggle source
# File lib/geoengineer/resources/aws_lambda_permission.rb, line 31
def self._fetch_policy(provider, function)
  policy = AwsClients.lambda(provider)
                     .get_policy({ function_name: function[:function_name] })&.policy
  parsed = _parse_policy(policy) if policy
  function.merge({ policy: parsed }) if parsed
end
_fetch_remote_resources(provider) click to toggle source

Right now, this only fetches policies for the $LATEST version If you want to fetch the policy for a version other than $LATEST set `find_remote_as_individual?` to `true` for that resource

# File lib/geoengineer/resources/aws_lambda_permission.rb, line 64
def self._fetch_remote_resources(provider)
  _fetch_functions(provider)
    .map { |function| _fetch_policy(provider, function) }
    .compact
    .map { |function| _create_permission(function) }
    .flatten
    .compact
end
_parse_policy(policy) click to toggle source
# File lib/geoengineer/resources/aws_lambda_permission.rb, line 38
def self._parse_policy(policy)
  _deep_symbolize_keys(JSON.parse(policy))
rescue JSON::ParserError
  nil
end

Public Instance Methods

remote_resource_params() click to toggle source
# File lib/geoengineer/resources/aws_lambda_permission.rb, line 73
def remote_resource_params
  params = { function_name: function_name }
  params[:qualifier] = qualifier if qualifier

  begin
    policy = _fetch_policy(fetch_provider, params)[:policy]
    return {} if policy.nil?
  rescue Aws::Lambda::Errors::ResourceNotFoundException
    return {}
  end

  permission = _create_permission(policy).find do |statement|
    statement[:_terraform_id] == statement_id
  end

  permission || {}
end
support_tags?() click to toggle source
# File lib/geoengineer/resources/aws_lambda_permission.rb, line 11
def support_tags?
  false
end
to_terraform_state() click to toggle source
# File lib/geoengineer/resources/aws_lambda_permission.rb, line 15
def to_terraform_state
  tfstate = super
  tfstate[:primary][:attributes] = {
    'function_name' => self.function_name,
    'statement_id' => self.statement_id
  }
  tfstate
end