class StackMaster::ParameterResolvers::Secret

Constants

SecretNotFound

Public Class Methods

new(config, stack_definition) click to toggle source
# File lib/stack_master/parameter_resolvers/secret.rb, line 14
def initialize(config, stack_definition)
  @config = config
  @stack_definition = stack_definition
end

Public Instance Methods

resolve(value) click to toggle source
# File lib/stack_master/parameter_resolvers/secret.rb, line 19
def resolve(value)
  secret_key = value
  raise ArgumentError, "No secret_file defined for stack definition #{@stack_definition.stack_name} in #{@stack_definition.region}" unless !@stack_definition.secret_file.nil?
  raise ArgumentError, "Could not find secret file at #{secret_file_path}" unless File.exist?(secret_file_path)
  secrets_hash.fetch(secret_key) do
    raise SecretNotFound, "Unable to find key #{secret_key} in file #{secret_file_path}"
  end
end

Private Instance Methods

decrypt_with_dotgpg() click to toggle source
# File lib/stack_master/parameter_resolvers/secret.rb, line 34
def decrypt_with_dotgpg
  Dotgpg.interactive = true
  dir = Dotgpg::Dir.closest(secret_file_path)
  stream = StringIO.new
  dir.decrypt(secret_path_relative_to_base, stream)
  stream.string
end
secret_file_path() click to toggle source
# File lib/stack_master/parameter_resolvers/secret.rb, line 46
def secret_file_path
  @secret_file_path ||= File.join(@config.base_dir, secret_path_relative_to_base)
end
secret_path_relative_to_base() click to toggle source
# File lib/stack_master/parameter_resolvers/secret.rb, line 42
def secret_path_relative_to_base
  @secret_path_relative_to_base ||= File.join('secrets', @stack_definition.secret_file)
end
secrets_hash() click to toggle source
# File lib/stack_master/parameter_resolvers/secret.rb, line 30
def secrets_hash
  @secrets_hash ||= YAML.load(decrypt_with_dotgpg)
end