class YleTfPlugins::AWSAssumeRole::Action

Public Class Methods

new(app, **config) click to toggle source
# File lib/yle_tf-aws_assume_role/action.rb, line 12
def initialize(app, **config)
  @app = app
  @action_config = config
end

Public Instance Methods

assume_role(config, &block) click to toggle source
# File lib/yle_tf-aws_assume_role/action.rb, line 45
def assume_role(config, &block)
  account  = config[:account]
  role     = config[:role]
  duration = config[:duration]

  YleTf::Logger.debug("Assuming AWS IAM role '#{account}:#{role}'")
  ::Yle::AWS::Role.assume_role(account, role, duration, &block)
rescue ::Yle::AWS::Role::Errors::AssumeRoleError => e
  raise YleTf::Error, e, e.backtrace
end
assume_role?(config, env) click to toggle source
# File lib/yle_tf-aws_assume_role/action.rb, line 32
def assume_role?(config, env)
  reason = if env[:aws_role_assumed]
             'AWS IAM role already assumed'
           elsif !config.assume_role?
             'Not assuming AWS IAM role'
           end

  return true if !reason

  YleTf::Logger.debug(reason)
  false
end
call(env) click to toggle source
# File lib/yle_tf-aws_assume_role/action.rb, line 17
def call(env)
  config = Config.new(@action_config, env[:config])

  if !assume_role?(config, env)
    @app.call(env)
    return
  end

  assume_role(config) do |role|
    env[:aws_role_assumed] = role
    @app.call(env)
    env[:aws_role_assumed] = nil
  end
end