class Lyra::CLI

Public Instance Methods

exec() click to toggle source
# File lib/lyra.rb, line 26
def exec
  configure_logger(verbose: options[:verbose])

  raise Thor::Error, Rainbow("Cannot find Lyrafile at #{@options[:config]}").red unless File.exist?(@options[:config])

  @config = Lyra::Config.new(path: @options[:config])

  access_key_id = @options[:access_key_id] || ENV[@config.access_key_id]
  raise Thor::Error, Rainbow("access_key_id cannot be nil").red if access_key_id.nil?
  raise Thor::Error, Rainbow("access_key_id cannot be empty").red if access_key_id.empty?

  secret_access_key = @options[:secret_access_key] || ENV[@config.secret_access_key]
  raise Thor::Error, Rainbow("secret_access_key cannot be nil").red if secret_access_key.nil?
  raise Thor::Error, Rainbow("secret_access_key cannot be empty").red if secret_access_key.empty?

  aws_region = @options[:aws_region] || @config.aws_region
  raise Thor::Error, Rainbow("aws_region cannot be nil").red if aws_region.nil?
  raise Thor::Error, Rainbow("aws_region cannot be empty").red if aws_region.empty?

  environment = @options[:environment] || @config.environment

  client_config = Lyra::ClientConfig.new(access_key_id: access_key_id,
                                           secret_access_key: secret_access_key,
                                           aws_region: aws_region,
                                           environment: environment)
  @client = Lyra::Client.new(config: client_config)

  secret_list = []

  secrets = @config.secrets
  secrets.each do |s|
    secret = Lyra::Secret.new(hash: s)
    item_list = []

    remote_values = JSON.parse(@client.fetch_secret(secret_name: secret.name))
    secret.items.each do |i|
      item = Lyra::Item.new(hash: i)

      raise Thor::Error, Rainbow("Could not retrieve value for item #{item.name}").red if remote_values[item.key].nil?

      item.value = remote_values[item.key]
      item_list.append(item)
    end

    secret.items = item_list
    secret_list.append(secret)
  end

  template = Lyra::Template.new(secrets: secret_list, template_path: @config.template_path)
  template.generate(output_path: @config.output_path)
end

Private Instance Methods

configure_logger(verbose: Boolean) click to toggle source
# File lib/lyra.rb, line 80
def configure_logger(verbose: Boolean)
  log.level = verbose ? Logger::DEBUG : Logger::INFO
end