Class: Opsicle::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/opsicle/config.rb

Constant Summary collapse

FOG_CONFIG_PATH =
'~/.fog'
OPSICLE_CONFIG_PATH =
'./.opsicle'
SESSION_DURATION =
3600
MissingConfig =
Class.new(StandardError)
MissingEnvironment =
Class.new(StandardError)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(environment) ⇒ Config

Returns a new instance of Config.



12
13
14
# File 'lib/opsicle/config.rb', line 12

def initialize(environment)
  @environment = environment.to_sym
end

Instance Attribute Details

#environmentObject (readonly)

Returns the value of attribute environment.



10
11
12
# File 'lib/opsicle/config.rb', line 10

def environment
  @environment
end

Instance Method Details

#aws_configObject



16
17
18
19
20
21
22
23
# File 'lib/opsicle/config.rb', line 16

def aws_config
  return @aws_config if @aws_config
  if fog_config[:mfa_serial_number]
    @aws_config = get_session.credentials
  else
    @aws_config = { access_key_id: fog_config[:aws_access_key_id], secret_access_key: fog_config[:aws_secret_access_key] }
  end
end

#configure_aws!Object



34
35
36
# File 'lib/opsicle/config.rb', line 34

def configure_aws!
  AWS.config(aws_config)
end

#fog_configObject



25
26
27
28
# File 'lib/opsicle/config.rb', line 25

def fog_config
  return @fog_config if @fog_config
  @fog_config = load_config(File.expand_path(FOG_CONFIG_PATH))
end

#get_mfa_tokenObject



46
47
48
# File 'lib/opsicle/config.rb', line 46

def get_mfa_token
  Output.ask("Enter MFA token: "){ |q|  q.validate = /^\d{6}$/ }
end

#get_sessionObject



50
51
52
53
54
55
56
# File 'lib/opsicle/config.rb', line 50

def get_session
  return @session if @session
  sts = AWS::STS.new(access_key_id: fog_config[:aws_access_key_id],
                       secret_access_key: fog_config[:aws_secret_access_key])
  @session = sts.new_session(duration: session_duration, serial_number: fog_config[:mfa_serial_number],
                             token_code: get_mfa_token)
end

#load_config(file) ⇒ Object

Raises:



38
39
40
41
42
43
44
# File 'lib/opsicle/config.rb', line 38

def load_config(file)
  raise MissingConfig, "Missing configuration file: #{file}  Run 'opsicle help'" unless File.exist?(file)
  env_config = symbolize_keys(YAML.load_file(file))[environment] rescue {}
  raise MissingEnvironment, "Configuration for the \'#{environment}\' environment could not be found in #{file}" unless env_config != nil

  env_config
end

#opsworks_configObject



30
31
32
# File 'lib/opsicle/config.rb', line 30

def opsworks_config
  @opsworks_config ||= load_config(OPSICLE_CONFIG_PATH)
end

#session_durationObject



58
59
60
61
# File 'lib/opsicle/config.rb', line 58

def session_duration
  fog_config = load_config(File.expand_path(FOG_CONFIG_PATH))
  fog_config[:session_duration] || SESSION_DURATION
end

#symbolize_keys(hash) ⇒ Object

We want all ouf our YAML loaded keys to be symbols taken from devblog.avdi.org/2009/07/14/recursively-symbolize-keys/



65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/opsicle/config.rb', line 65

def symbolize_keys(hash)
  hash.inject({}){|result, (key, value)|
    new_key = case key
              when String then key.to_sym
              else key
              end
    new_value = case value
                when Hash then symbolize_keys(value)
                else value
                end
    result[new_key] = new_value
    result
  }
end