autostacker24 2.8.6 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aa087f5e9153cfd6ac641141ab3fe8c8f588a940
4
- data.tar.gz: '09b70ecbc66adcca9d1a87d492502e1d243005fc'
3
+ metadata.gz: e42c631cc72e25a94c0e4f4034ae225581cc74c8
4
+ data.tar.gz: c71503d01fea53ff9e55c44d6171748d0237cd68
5
5
  SHA512:
6
- metadata.gz: c679a47bab18e4c028efebe1310e60316a3c811359b685785389618b5d164f92d4900d00e6a19423c9b5c93d626267eea5d68ee78e94c8164131be03342d610b
7
- data.tar.gz: a05856f68836e67aa2ca609c2c8902dafd9d4e5233ef9f4b3cdb55d5021f1ae83eb549c7adf900e6c1fc3359725f00bea9742c3ae9c8f54ec0c10883f267fe54
6
+ metadata.gz: 97a1d37ea4ed1de206901bf35f49868295b29540f93ffe999b86f8f9b50dd518483b880677bfc8953cf5f310fbb012931f87825aa2b027459902b542e9e618a8
7
+ data.tar.gz: 51d5ccdd0fa687f30043b033d1a589d876d0e87f85cf47a2f42f16398187ec868f0b0f246259923166f51d4c31eb4a46754d3fe852914a269026199b2d28f93d
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
-
3
2
  require 'optparse'
4
3
  require 'autostacker24'
5
4
  require 'yaml'
@@ -22,12 +21,12 @@ def json?(data)
22
21
  end
23
22
 
24
23
  def load_file(path)
25
- error('params file not found') unless File.exists?(path)
24
+ error("file #{path} not found") unless File.exists?(path)
26
25
  data = File.read(path)
27
26
  json?(data) ? JSON.parse(data) : YAML.load(data)
28
27
  end
29
28
 
30
- def validate_param(param)
29
+ def validate_key_value(param)
31
30
  kv = param.split('=', 2)
32
31
  error("parameter #{param} is missing mandatory value") unless kv.size == 2
33
32
  kv
@@ -36,6 +35,8 @@ end
36
35
  args = OpenStruct.new
37
36
  args.region = ENV['AWS_REGION']
38
37
  args.params = {}
38
+ args.tags = {}
39
+
39
40
  parser = OptionParser.new do |opts|
40
41
  opts.banner = 'Usage: autostacker24 command [options]'
41
42
  opts.separator ''
@@ -55,8 +56,10 @@ parser = OptionParser.new do |opts|
55
56
  opts.on('--role-arn ROLE-ARN', 'Arn of execution role') {|v| args.role_arn = v}
56
57
  opts.on('--region REGION', 'AWS region') {|v| args.region = v}
57
58
  opts.on('--profile PROFILE', 'AWS profile (use aws configure)') {|v| args.profile = v}
58
- opts.on('--param KEY=VALUE', 'Stack Parameter') {|v| args.params.store(*validate_param(v)) }
59
+ opts.on('--param KEY=VALUE', 'Stack Parameter') {|v| args.params.store(*validate_key_value(v)) }
59
60
  opts.on('--params FILE', 'Stack Parameter from yaml/json file') {|v| args.params.merge!(load_file(v)) }
61
+ opts.on('--tag KEY=VALUE', 'Stack Tag') {|v| args.tags.store(*validate_key_value(v)) }
62
+ opts.on('--tags FILE', 'Stack Tags from yaml/json file') {|v| args.tags.merge!(load_file(v)) }
60
63
  opts.on('--help', 'Show this help') {|_| puts opts; exit!;}
61
64
  opts.on('--version', 'Show version') {|_| puts `gem list autostacker24`; exit!;}
62
65
  opts.separator ''
@@ -83,7 +86,7 @@ case args.command
83
86
  when /create|update|create_or_update/
84
87
  check_template(args)
85
88
  check_stack(args)
86
- Stacker.create_or_update_stack(args.stack, args.template, args.params, args.parent, role_arn: args.role_arn)
89
+ Stacker.create_or_update_stack(args.stack, args.template, args.params, args.parent, args.tags, role_arn: args.role_arn)
87
90
  when /list/
88
91
  Stacker.list_stacks()
89
92
  when /delete/
@@ -107,4 +110,3 @@ case args.command
107
110
  else
108
111
  error("unknown command '#{args.command}'")
109
112
  end
110
-
@@ -49,10 +49,10 @@ module Stacker
49
49
  cloud_formation.create_stack(stack_name: stack_name,
50
50
  template_body: template_body(template),
51
51
  on_failure: 'DELETE',
52
- parameters: transform_input(parameters),
52
+ parameters: transform_params(parameters),
53
53
  capabilities: ['CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM'],
54
54
  role_arn: role_arn,
55
- tags: tags)
55
+ tags: transform_tags(tags))
56
56
  wait_for_stack(stack_name, :create, Set.new, timeout_in_minutes)
57
57
  end
58
58
 
@@ -62,10 +62,10 @@ module Stacker
62
62
  merge_and_validate(template, parameters, parent_stack_name)
63
63
  cloud_formation.update_stack(stack_name: stack_name,
64
64
  template_body: template_body(template),
65
- parameters: transform_input(parameters),
65
+ parameters: transform_params(parameters),
66
66
  capabilities: ['CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM'],
67
67
  role_arn: role_arn,
68
- tags: tags)
68
+ tags: transform_tags(tags))
69
69
  rescue Aws::CloudFormation::Errors::ValidationError => error
70
70
  raise error unless error.message =~ /No updates are to be performed/i # may be flaky, do more research in API
71
71
  puts "stack #{stack_name} is already up to date"
@@ -166,7 +166,7 @@ module Stacker
166
166
 
167
167
  def estimate_template_cost(template, parameters, parent_stack_name = nil)
168
168
  merge_and_validate(template, parameters, parent_stack_name)
169
- cloud_formation.estimate_template_cost(:template_body => template_body(template), :parameters => transform_input(parameters))
169
+ cloud_formation.estimate_template_cost(:template_body => template_body(template), :parameters => transform_params(parameters))
170
170
  end
171
171
 
172
172
  def get_stack_outputs(stack_name)
@@ -183,11 +183,16 @@ module Stacker
183
183
  output.inject({}) { |m, o| m.merge(o.output_key.to_sym => o.output_value) }
184
184
  end
185
185
 
186
- def transform_input(input)
186
+ def transform_params(input)
187
187
  input.each{|k,v| raise "#{k} must not be nil" if v.nil? }
188
188
  input.inject([]) { |m, kv| m << {parameter_key: kv[0].to_s, parameter_value: kv[1].to_s} }
189
189
  end
190
190
 
191
+ def transform_tags(input)
192
+ input.each{|k,v| raise "#{k} must not be nil" if v.nil? }
193
+ input.inject([]) { |m, kv| m << {key: kv[0].to_s, value: kv[1].to_s} }
194
+ end
195
+
191
196
  def get_stack_resources(stack_name)
192
197
  resources = cloud_formation.describe_stack_resources(stack_name: stack_name).data.stack_resources
193
198
  resources.inject({}){|map, resource| map.merge(resource.logical_resource_id.to_sym => resource)}.freeze
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: autostacker24
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.6
4
+ version: 2.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johannes Mueller
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-08-07 00:00:00.000000000 Z
12
+ date: 2018-08-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aws-sdk-cloudformation