26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# 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
|