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 +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
|