Sha256: 77ee9d394762a71cf2d5dee90afae914cc28a24a2c1c7d6d1f3e147b2e616a20

Contents?: true

Size: 1.68 KB

Versions: 9

Compression:

Stored size: 1.68 KB

Contents

require 'inifile'
require 'csv'

module ChefMetalFog
  # Reads in a credentials file in Amazon's download format and presents the credentials to you
  class AWSCredentials
    def initialize
      @credentials = {}
    end

    include Enumerable

    def default
      @credentials[ENV['AWS_DEFAULT_PROFILE'] || 'default'] || @credentials.first[1]
    end

    def keys
      @credentials.keys
    end

    def [](name)
      @credentials[name]
    end

    def each(&block)
      @credentials.each(&block)
    end

    def load_ini(credentials_ini_file)
      inifile = IniFile.load(File.expand_path(credentials_ini_file))
      inifile.each_section do |section|
        if section =~ /^\s*profile\s+(.+)$/ || section =~ /^\s*(default)\s*/
          profile_name = $1.strip
          profile = inifile[section].inject({}) do |result, pair|
            result[pair[0].to_sym] = pair[1]
            result
          end
          profile[:name] = profile_name
          @credentials[profile_name] = profile
        end
      end
    end

    def load_csv(credentials_csv_file)
      CSV.new(File.open(credentials_csv_file), :headers => :first_row).each do |row|
        @credentials[row['User Name']] = {
          :name => row['User Name'],
          :user_name => row['User Name'],
          :aws_access_key_id => row['Access Key Id'],
          :aws_secret_access_key => row['Secret Access Key']
        }
      end
    end

    def load_default
      load_ini(ENV['AWS_CONFIG_FILE'] || File.expand_path('~/.aws/config'))
    end

    def self.method_missing(name, *args, &block)
      singleton.send(name, *args, &block)
    end

    def self.singleton
      @aws_credentials ||= AWSCredentials.new
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
chef-metal-fog-0.5.4 lib/chef_metal_fog/aws_credentials.rb
chef-metal-fog-0.5.3 lib/chef_metal_fog/aws_credentials.rb
chef-metal-fog-0.5.2 lib/chef_metal_fog/aws_credentials.rb
chef-metal-fog-0.5.1 lib/chef_metal_fog/aws_credentials.rb
chef-metal-fog-0.5 lib/chef_metal_fog/aws_credentials.rb
chef-metal-fog-0.5.beta.6 lib/chef_metal_fog/aws_credentials.rb
chef-metal-fog-0.5.beta.5 lib/chef_metal_fog/aws_credentials.rb
chef-metal-fog-0.5.beta.4 lib/chef_metal_fog/aws_credentials.rb
chef-metal-fog-0.5.beta.3 lib/chef_metal_fog/aws_credentials.rb