lib/awsborn/awsborn.rb in awsborn-0.2.1 vs lib/awsborn/awsborn.rb in awsborn-0.3.0

- old
+ new

@@ -1,20 +1,40 @@ module Awsborn class SecurityError < StandardError ; end class ServerError < StandardError ; end class << self - attr_writer :access_key_id, :secret_access_key, :logger + attr_writer :access_key_id, :secret_access_key, :logger, :remote_chef_path attr_accessor :verbose Awsborn.verbose = true def access_key_id @access_key_id ||= ENV['AMAZON_ACCESS_KEY_ID'] end def secret_access_key - @secret_access_key ||= ENV['AMAZON_SECRET_ACCESS_KEY'] + unless @secret_access_key + @secret_access_key = ENV['AMAZON_SECRET_ACCESS_KEY'] + if @secret_access_key.to_s == '' + @secret_access_key = secret_access_key_from_keychain(access_key_id) + end + end + @secret_access_key + end + + def secret_access_key_from_keychain (key_id) + @credentials ||= {} + unless @credentials[key_id] + dump = `security -q find-generic-password -a "#{key_id}" -g 2>&1` + secret_key = dump[/password: "(.*)"/, 1] + @credentials[key_id] = secret_key + end + @credentials[key_id] + end + + def remote_chef_path + @remote_chef_path ||= '/etc/chef' end def logger unless defined? @logger dir = [File.dirname(File.expand_path($0)), '/tmp'].find { |d| File.writable?(d) }