class Credentials

Public Class Methods

new(commands) click to toggle source
# File lib/credentials.rb, line 7
def initialize(commands)
  @options = commands.global_options
end

Public Instance Methods

error_if_nil(value, message) click to toggle source
# File lib/credentials.rb, line 79
def error_if_nil(value, message)
  if value == nil then
    raise RuntimeError, message
  end
end
parse_credentials(credentials, options) click to toggle source
# File lib/credentials.rb, line 11
def parse_credentials(credentials, options)
  conversions = [
                 # These first ones use an incorrect naming convenion,
                 # but we keep them around for backwards compatibility
                 [:aws_access_id, "access_id"],
                 [:aws_secret_key, "private_key"],
                 [:key_pair, "keypair"], 
                 [:key_pair_file, "keypair-file"], 
                 [:log_uri, "log_uri"], 
                 
                 # Now the current ones
                 [:aws_access_id, "access-id"],
                 [:aws_secret_key, "private-key"],
                 [:key_pair, "key-pair"], 
                 [:key_pair_file, "key-pair-file"], 
                 [:log_uri, "log-uri"], 
                 [:endpoint, "endpoint"], 
                 [:region, "region"], 
                 [:enable_debugging, "enable-debugging"],
                 [:hadoop_version, "hadoop-version"],
                ]
  
  env_options = [
                 ['ELASTIC_MAPREDUCE_ACCESS_ID',         :aws_access_id],
                 ['ELASTIC_MAPREDUCE_PRIVATE_KEY',       :aws_secret_key],
                 ['ELASTIC_MAPREDUCE_KEY_PAIR',          :key_pair],
                 ['ELASTIC_MAPREDUCE_KEY_PAIR_FILE',     :key_pair_file],
                 ['ELASTIC_MAPREDUCE_LOG_URI',           :log_uri],
                 ['ELASTIC_MAPREDUCE_APPS_PATH',         :apps_path],
                 ['ELASTIC_MAPREDUCE_BETA_PATH',         :beta_path],
                 ['ELASTIC_MAPREDUCE_ENDPOINT',          :endpoint],
                 ['ELASTIC_MAPREDUCE_REGION',            :region],
                 ['ELASTIC_MAPREDUCE_HADOOP_VERSION',    :hadoop_version],
                 ['ELASTIC_MAPREDUCE_ENABLE_DEBUGGING',  :enable_debugging]
                ]
  
  for env_key, option_key in env_options do
    if ! options[option_key] && ENV[env_key] then
      options[option_key] = ENV[env_key]
    end
  end
  
  candidates = [
                credentials, 
                ENV['ELASTIC_MAPREDUCE_CREDENTIALS'], 
                File.join(File.dirname(__FILE__), credentials),
                File.join(ENV['HOME'],  "." + credentials), 
                File.join(ENV['HOME'],  credentials)
               ]

  filename = candidates.find { |fname| File.exist?(fname) if fname }
  if filename != nil then
    begin
      credentials_hash = JSON.parse(File.read(filename))
      for option_key, credentials_key in conversions do
        if credentials_hash[credentials_key] && !options[option_key] then
          options[option_key] = credentials_hash[credentials_key]
        end
      end
    rescue Exception => e
      raise RuntimeError, "Unable to parse #{filename}: #{e.message}"
    end
  end
  
  error_if_nil(options[:aws_access_id], "Missing key access-id")
  error_if_nil(options[:aws_secret_key], "Missing key private-key")
end