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 +4 -4
- data/bin/autostacker24 +8 -6
- data/lib/autostacker24/stacker.rb +11 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e42c631cc72e25a94c0e4f4034ae225581cc74c8
|
4
|
+
data.tar.gz: c71503d01fea53ff9e55c44d6171748d0237cd68
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97a1d37ea4ed1de206901bf35f49868295b29540f93ffe999b86f8f9b50dd518483b880677bfc8953cf5f310fbb012931f87825aa2b027459902b542e9e618a8
|
7
|
+
data.tar.gz: 51d5ccdd0fa687f30043b033d1a589d876d0e87f85cf47a2f42f16398187ec868f0b0f246259923166f51d4c31eb4a46754d3fe852914a269026199b2d28f93d
|
data/bin/autostacker24
CHANGED
@@ -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(
|
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
|
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(*
|
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:
|
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:
|
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 =>
|
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
|
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.
|
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-
|
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
|