autostacker24 2.8.6 → 2.9.0

Sign up to get free protection for your applications and to get access to all the features.
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