Class: AwsAssumeRole::Cli::Actions::SetEnvironment

Inherits:
AbstractAction show all
Includes:
Ui
Defined in:
lib/aws_assume_role/cli/actions/set_environment.rb

Constant Summary collapse

SHELL_STRINGS =
{
    sh: {
        env_command: "%<key>s=%<value>s; export %<key>s; ",
    },
    csh: {
        env_command: "setenv %<key>s %<value>s; ",
    },
    fish: {
        env_command: "set -x %<key>s %<value>s; ",
        footer: "commands.set_environment.shells.fish",
    },
    powershell: {
        env_command: "set-item ENV:%<key>s %<value>s; ",
        footer: "commands.set_environment.shells.powershell",
    },
}.freeze
CommandSchema =
proc do
    optional(:profile).filled?
    optional(:region) { filled? > format?(REGION_REGEX) }
    optional(:serial_number) { filled? > format?(MFA_REGEX) }
    optional(:external_id) { filled? > format?(EXTERNAL_ID_REGEX) }
    required(:shell_type).value(included_in?: SHELL_STRINGS.stringify_keys.keys)
    required(:role_arn).maybe { filled? > format?(ROLE_REGEX) }
    required(:role_session_name).maybe { filled? > format?(ROLE_SESSION_NAME_REGEX) }
    required(:duration_seconds).maybe
    rule(role_specification: %i[profile role_arn role_session_name duration_seconds]) do |p, r, s, d|
        (p.filled? | p.empty? & r.filled?) & (r.filled? > s.filled? & d.filled?)
    end
end

Constants included from AwsAssumeRole

AwsAssumeRole::Config, DefaultProvider, VERSION

Constants included from Types

Types::ACCESS_KEY_REGEX, Types::ACCESS_KEY_VALIDATOR, Types::ARN_REGEX, Types::Credentials, Types::Dry, Types::EXTERNAL_ID_REGEX, Types::MFA_REGEX, Types::MfaSerial, Types::REGION_REGEX, Types::REGION_VALIDATOR, Types::ROLE_REGEX, Types::ROLE_SESSION_NAME_REGEX, Types::Region, Types::SECRET_ACCESS_KEY_REGEX, Types::SECRET_ACCESS_KEY_VALIDATOR

Instance Method Summary collapse

Methods included from Ui

ask_with_validation, error, input, out, pastel, show_validation_errors, t, validation_errors_to_s

Methods included from AwsAssumeRole

shared_config

Methods inherited from AbstractAction

#initialize

Methods included from Logging

included

Constructor Details

This class inherits a constructor from AwsAssumeRole::Cli::Actions::AbstractAction

Instance Method Details

#act_on(config) ⇒ Object


38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/aws_assume_role/cli/actions/set_environment.rb', line 38

def act_on(config)
    credentials = try_for_credentials config.to_h
    shell_strings = SHELL_STRINGS[config.shell_type.to_sym]
    str = ""
    [
        [:access_key_id, "AWS_ACCESS_KEY_ID"],
        [:secret_access_key, "AWS_SECRET_ACCESS_KEY"],
        [:session_token, "AWS_SESSION_TOKEN"],
    ].each do |key|
        value = credentials.credentials.send key[0]
        next if value.blank?
        str << format(shell_strings[:env_command], key: key[1], value: value)
    end
    str << "# #{pastel.yellow t(shell_strings.fetch(:footer, 'commands.set_environment.shells.others'))}"
    puts str
rescue KeyError, Aws::Errors::NoSuchProfileError
    error format(t("errors.NoSuchProfileError"), config.profile)
    raise
rescue Aws::Errors::MissingCredentialsError
    error t("errors.MissingCredentialsError")
    raise
end