kumogata 0.3.11 → 0.3.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.md +2 -2
- data/lib/kumogata.rb +1 -0
- data/lib/kumogata/post_processing.rb +35 -3
- data/lib/kumogata/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
Y2E5OGQ4ZGRjNGI4MWJlNTBlNjQ0NzYzZDY3NTIwYmM0MzVmOTk0Mw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ODAxMjk3ZjIzZTdkZDM1YzAwZjdlOTY3MGEwNzk2Yjk1ODEyNzA5ZQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZWY5YmQ2MmYyMjI5ODQyODk3OGE0YzYwMzg4ZGU5OTMzZWNkZjAyZTEyMjgx
|
10
|
+
NjgwNmM3YzJiOGU3NGM3YmJlNGI1NjIwOGQ4YzEzMjM5NDA1YTUwNDcyMjEz
|
11
|
+
ZjA4NTVjY2MxODk4NTMxMzQ3NGE1ZTg1YWQyNGNjMTUyOTEzOGQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZDA1ZDk0YTQ0OWI2NjQxZTliYTViNWY3NDc1NDQ2ZDhkZTQyNmM3NGM2OGEy
|
14
|
+
OWFlZDcwOTUxY2Q2MGFmODEzY2RiYWRlNWU5NDI0MzBjNzgyNTVkZTE0ZGM1
|
15
|
+
MDViOThiMGYwOTNmYjZhMzQ1YmI0MmEzZjE5MjRiYjY4MTE5YmE=
|
data/README.md
CHANGED
@@ -5,8 +5,8 @@
|
|
5
5
|
|
6
6
|
Kumogata is a tool for [AWS CloudFormation](https://aws.amazon.com/cloudformation/).
|
7
7
|
|
8
|
-
[![Gem Version](https://badge.fury.io/rb/kumogata.png?
|
9
|
-
[![Build Status](https://drone.io/github.com/winebarrel/kumogata/status.png?
|
8
|
+
[![Gem Version](https://badge.fury.io/rb/kumogata.png?201403111115)](http://badge.fury.io/rb/kumogata)
|
9
|
+
[![Build Status](https://drone.io/github.com/winebarrel/kumogata/status.png?201403111115)](https://drone.io/github.com/winebarrel/kumogata/latest)
|
10
10
|
|
11
11
|
It can define a template in Ruby DSL, such as:
|
12
12
|
|
data/lib/kumogata.rb
CHANGED
@@ -18,21 +18,26 @@ class Kumogata::PostProcessing
|
|
18
18
|
options = _post[:options] || {}
|
19
19
|
@command_options.merge(options)
|
20
20
|
|
21
|
+
outputs = template['Outputs'] || {}
|
22
|
+
|
21
23
|
_post.fetch(:commands).each do |name, attrs|
|
22
24
|
unless attrs.kind_of?(Hash) and attrs['command']
|
23
25
|
raise "Invalid post processing: #{name} => #{attrs.inspect}"
|
24
26
|
end
|
25
27
|
|
26
28
|
timing = [(attrs['after'] || TRIGGER_TIMING)].flatten.map {|i| i.to_sym }
|
29
|
+
command = attrs['command']
|
30
|
+
|
27
31
|
validate_timing(name, timing)
|
32
|
+
validate_command_template(name, command, outputs)
|
28
33
|
|
29
34
|
@commands[name] = {
|
30
35
|
:after => timing,
|
31
|
-
:command =>
|
36
|
+
:command => command,
|
32
37
|
}
|
33
38
|
|
34
39
|
if (ssh = attrs['ssh'])
|
35
|
-
validate_ssh(name, ssh)
|
40
|
+
validate_ssh(name, ssh, outputs)
|
36
41
|
@commands[name][:ssh] = ssh
|
37
42
|
end
|
38
43
|
end
|
@@ -70,7 +75,7 @@ class Kumogata::PostProcessing
|
|
70
75
|
end
|
71
76
|
end
|
72
77
|
|
73
|
-
def validate_ssh(name, ssh)
|
78
|
+
def validate_ssh(name, ssh, outputs)
|
74
79
|
host, user, options = ssh.values_at('host', 'user', 'options')
|
75
80
|
|
76
81
|
unless host and user
|
@@ -88,6 +93,8 @@ class Kumogata::PostProcessing
|
|
88
93
|
ssh['host'] = host.to_s
|
89
94
|
end
|
90
95
|
|
96
|
+
validate_command_template(name, ssh['host'], outputs)
|
97
|
+
|
91
98
|
if user.kind_of?(Hash)
|
92
99
|
if user.keys != ['Key']
|
93
100
|
raise "Invalid post processing ssh user: #{name} => #{user.inspect}"
|
@@ -99,6 +106,8 @@ class Kumogata::PostProcessing
|
|
99
106
|
ssh['user'] = user.to_s
|
100
107
|
end
|
101
108
|
|
109
|
+
validate_command_template(name, ssh['user'], outputs)
|
110
|
+
|
102
111
|
if options and not options.kind_of?(Hash)
|
103
112
|
raise "Invalid post processing ssh options: #{name} => #{options.inspect}"
|
104
113
|
end
|
@@ -172,6 +181,29 @@ class Kumogata::PostProcessing
|
|
172
181
|
Open3.capture3(command)
|
173
182
|
end
|
174
183
|
|
184
|
+
def validate_command_template(name, command, outputs)
|
185
|
+
command = command.undent if @command_options[:undent]
|
186
|
+
trim_mode = @command_options[:trim_mode]
|
187
|
+
expected_outputs = Set.new
|
188
|
+
|
189
|
+
scope = Object.new
|
190
|
+
scope.instance_variable_set(:@__expected_outputs__, expected_outputs)
|
191
|
+
|
192
|
+
scope.instance_eval(<<-EOS)
|
193
|
+
def Key(name)
|
194
|
+
@__expected_outputs__ << name
|
195
|
+
end
|
196
|
+
|
197
|
+
ERB.new(#{command.inspect}, nil, #{trim_mode.inspect}).result(binding)
|
198
|
+
EOS
|
199
|
+
|
200
|
+
expected_outputs.each do |key|
|
201
|
+
unless outputs.keys.include?(key)
|
202
|
+
raise "Unknown output: #{name} => #{key.inspect}"
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
175
207
|
def evaluate_command_template(command, outputs)
|
176
208
|
command = command.undent if @command_options[:undent]
|
177
209
|
trim_mode = @command_options[:trim_mode]
|
data/lib/kumogata/version.rb
CHANGED