lib/awskeyring_command.rb in awskeyring-0.7.1 vs lib/awskeyring_command.rb in awskeyring-0.7.2
- old
+ new
@@ -68,16 +68,11 @@
def env(account = nil)
account = ask_check(
existing: account, message: I18n.t('message.account'), validator: Awskeyring.method(:account_exists)
)
cred = age_check_and_get(account: account, no_token: options['no-token'])
- put_env_string(
- account: cred[:account],
- key: cred[:key],
- secret: cred[:secret],
- token: cred[:token]
- )
+ put_env_string(cred)
end
desc 'json ACCOUNT', I18n.t('json.desc')
method_option 'no-token', type: :boolean, aliases: '-n', desc: I18n.t('method_option.notoken'), default: false
# Print JSON for use with credential_process
@@ -97,30 +92,35 @@
desc 'exec ACCOUNT command...', I18n.t('exec.desc')
method_option 'no-token', type: :boolean, aliases: '-n', desc: I18n.t('method_option.notoken'), default: false
# execute an external command with env set
def exec(account, *command)
+ if command.empty?
+ warn I18n.t('message.exec')
+ exit 1
+ end
cred = age_check_and_get(account: account, no_token: options['no-token'])
- env_vars = env_vars(
- account: cred[:account],
- key: cred[:key],
- secret: cred[:secret],
- token: cred[:token]
- )
- pid = Process.spawn(env_vars, command.join(' '))
- Process.wait pid
+ env_vars = env_vars(cred)
+ begin
+ pid = Process.spawn(env_vars, command.join(' '))
+ Process.wait pid
+ $CHILD_STATUS
+ rescue Errno::ENOENT => err
+ warn err.to_s
+ exit 1
+ end
end
desc 'add ACCOUNT', I18n.t('add.desc')
method_option :key, type: :string, aliases: '-k', desc: I18n.t('method_option.key')
method_option :secret, type: :string, aliases: '-s', desc: I18n.t('method_option.secret')
method_option :mfa, type: :string, aliases: '-m', desc: I18n.t('method_option.mfa')
method_option 'no-remote', type: :boolean, aliases: '-r', desc: I18n.t('method_option.noremote'), default: false
# Add an Account
def add(account = nil) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
account = ask_check(
- existing: account, message: I18n.t('message.account'), validator: Awskeyring::Validate.method(:account_name)
+ existing: account, message: I18n.t('message.account'), validator: Awskeyring.method(:account_not_exists)
)
key = ask_check(
existing: options[:key], message: I18n.t('message.key'), validator: Awskeyring::Validate.method(:access_key)
)
secret = ask_check(
@@ -416,30 +416,30 @@
exit 1 if command.empty?
self.class.all_commands[command].options.values.map(&:aliases).flatten! +
self.class.all_commands[command].options.values.map(&:switch_name)
end
- def env_vars(account:, key:, secret:, token:)
+ def env_vars(cred)
env_var = {}
env_var['AWS_DEFAULT_REGION'] = 'us-east-1' unless Awskeyring::Awsapi.region
- env_var['AWS_ACCOUNT_NAME'] = account
- env_var['AWS_ACCESS_KEY_ID'] = key
- env_var['AWS_ACCESS_KEY'] = key
- env_var['AWS_SECRET_ACCESS_KEY'] = secret
- env_var['AWS_SECRET_KEY'] = secret
- if token
- env_var['AWS_SECURITY_TOKEN'] = token
- env_var['AWS_SESSION_TOKEN'] = token
+ env_var['AWS_ACCOUNT_NAME'] = cred[:account]
+ env_var['AWS_ACCESS_KEY_ID'] = cred[:key]
+ env_var['AWS_ACCESS_KEY'] = cred[:key]
+ env_var['AWS_SECRET_ACCESS_KEY'] = cred[:secret]
+ env_var['AWS_SECRET_KEY'] = cred[:secret]
+ if cred[:token]
+ env_var['AWS_SECURITY_TOKEN'] = cred[:token]
+ env_var['AWS_SESSION_TOKEN'] = cred[:token]
end
env_var
end
- def put_env_string(account:, key:, secret:, token:)
- env_var = env_vars(account: account, key: key, secret: secret, token: token)
+ def put_env_string(cred)
+ env_var = env_vars(cred)
env_var.each { |var, value| puts "export #{var}=\"#{value}\"" }
- puts 'unset AWS_SECURITY_TOKEN' unless token
- puts 'unset AWS_SESSION_TOKEN' unless token
+ puts 'unset AWS_SECURITY_TOKEN' unless cred[:token]
+ puts 'unset AWS_SESSION_TOKEN' unless cred[:token]
end
def ask_check(existing:, message:, secure: false, optional: false, validator: nil)
retries ||= 3
begin