stackup 0.6.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -2
- data/bin/stackup +9 -5
- data/examples/parameters.json +2 -2
- data/lib/stackup/stack.rb +27 -10
- data/lib/stackup/version.rb +1 -1
- data/spec/stackup/stack_spec.rb +32 -8
- data/stackup.gemspec +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 23c1e4e4d9403ef28b55daf9ee4f21fd55dabd57
|
4
|
+
data.tar.gz: 9ac49da0f9c055a4b8b0809d8f6a47da32c78238
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0cce0bf0091f7c66ffe43c56d4037070873b24f492f8668e33258d90a2087e56f44be1df0c875e8e8b6f9dd07c4aa20a5d56d343214a9c41ac7e43d44a1f1c5c
|
7
|
+
data.tar.gz: e7a295ae3e2f60ac369bdde9a2dad410fb033488f914218f8c973a9b2c636c1f016d2a0e1aeaaf81234157d95dec44e4f6554f67b8b5b19b46b6bbd0ffac367b
|
data/README.md
CHANGED
@@ -15,8 +15,9 @@ Stackup provides some advantages over using `awscli` or `aws-sdk` directly:
|
|
15
15
|
- A `Stack#up` facade for `create`/`update` frees you from having to know
|
16
16
|
whether your stack already exists or not.
|
17
17
|
|
18
|
-
- "
|
19
|
-
without a template change - are
|
18
|
+
- Changes are (mostly) idempotent: "no-op" operations - e.g. deleting a
|
19
|
+
stack that doesn't exist, or updating without a template change - are
|
20
|
+
handled gracefully (i.e. without error).
|
20
21
|
|
21
22
|
## Installation
|
22
23
|
|
data/bin/stackup
CHANGED
@@ -71,8 +71,8 @@ Clamp do
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def report_change
|
74
|
-
|
75
|
-
puts
|
74
|
+
final_status = yield
|
75
|
+
puts final_status unless final_status.nil?
|
76
76
|
end
|
77
77
|
|
78
78
|
def load_data(file)
|
@@ -141,8 +141,10 @@ Clamp do
|
|
141
141
|
diff_data(stack.template, template)
|
142
142
|
end
|
143
143
|
if parameters_file
|
144
|
-
|
145
|
-
|
144
|
+
new_parameters = hashify_parameters(load_data(parameters_file))
|
145
|
+
existing_parameters = stack.parameters
|
146
|
+
new_parameters = existing_parameters.merge(new_parameters)
|
147
|
+
diff_data(existing_parameters.sort.to_h, new_parameters.sort.to_h)
|
146
148
|
end
|
147
149
|
end
|
148
150
|
|
@@ -160,7 +162,9 @@ Clamp do
|
|
160
162
|
return parameters unless parameters.is_a?(Array)
|
161
163
|
{}.tap do |result|
|
162
164
|
parameters.each do |p|
|
163
|
-
|
165
|
+
key = p.fetch("ParameterKey") { p.fetch("parameter_key") }
|
166
|
+
value = p.fetch("ParameterValue") { p.fetch("parameter_value") }
|
167
|
+
result[key] = value
|
164
168
|
end
|
165
169
|
end
|
166
170
|
end
|
data/examples/parameters.json
CHANGED
data/lib/stackup/stack.rb
CHANGED
@@ -138,7 +138,7 @@ module Stackup
|
|
138
138
|
cf_stack.delete
|
139
139
|
end
|
140
140
|
fail StackUpdateError, "stack delete failed" unless status == "DELETE_COMPLETE"
|
141
|
-
|
141
|
+
status
|
142
142
|
ensure
|
143
143
|
@stack_id = nil
|
144
144
|
end
|
@@ -155,7 +155,7 @@ module Stackup
|
|
155
155
|
cf_stack.cancel_update
|
156
156
|
end
|
157
157
|
fail StackUpdateError, "update cancel failed" unless status =~ /_COMPLETE$/
|
158
|
-
|
158
|
+
status
|
159
159
|
rescue InvalidStateError
|
160
160
|
nil
|
161
161
|
end
|
@@ -255,7 +255,7 @@ module Stackup
|
|
255
255
|
cf.create_stack(options)
|
256
256
|
end
|
257
257
|
fail StackUpdateError, "stack creation failed" unless status == "CREATE_COMPLETE"
|
258
|
-
|
258
|
+
status
|
259
259
|
end
|
260
260
|
|
261
261
|
def update(options)
|
@@ -266,7 +266,7 @@ module Stackup
|
|
266
266
|
cf_stack.update(options)
|
267
267
|
end
|
268
268
|
fail StackUpdateError, "stack update failed" unless status == "UPDATE_COMPLETE"
|
269
|
-
|
269
|
+
status
|
270
270
|
rescue NoUpdateRequired
|
271
271
|
nil
|
272
272
|
end
|
@@ -303,15 +303,32 @@ module Stackup
|
|
303
303
|
end
|
304
304
|
|
305
305
|
def normalise_parameters(arg)
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
306
|
+
if arg.is_a?(Hash)
|
307
|
+
return arg.map do |key, value|
|
308
|
+
{
|
309
|
+
:parameter_key => key,
|
310
|
+
:parameter_value => value
|
311
|
+
}
|
312
|
+
end
|
313
|
+
end
|
314
|
+
arg.map do |parameter|
|
315
|
+
normalise_parameter_keys(parameter)
|
312
316
|
end
|
313
317
|
end
|
314
318
|
|
319
|
+
def normalise_parameter_keys(input)
|
320
|
+
{}.tap do |output|
|
321
|
+
input.each do |key, value|
|
322
|
+
output[normalise_parameter_key(key)] = value
|
323
|
+
end
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
327
|
+
def normalise_parameter_key(s)
|
328
|
+
return s if s.is_a?(Symbol)
|
329
|
+
s.gsub(/([a-z])([A-Z])/, '\1_\2').downcase
|
330
|
+
end
|
331
|
+
|
315
332
|
end
|
316
333
|
|
317
334
|
end
|
data/lib/stackup/version.rb
CHANGED
data/spec/stackup/stack_spec.rb
CHANGED
@@ -105,8 +105,8 @@ describe Stackup::Stack do
|
|
105
105
|
.with(hash_including(expected_args))
|
106
106
|
end
|
107
107
|
|
108
|
-
it "returns
|
109
|
-
expect(create_or_update).to eq(
|
108
|
+
it "returns status" do
|
109
|
+
expect(create_or_update).to eq("CREATE_COMPLETE")
|
110
110
|
end
|
111
111
|
|
112
112
|
end
|
@@ -157,6 +157,30 @@ describe Stackup::Stack do
|
|
157
157
|
|
158
158
|
end
|
159
159
|
|
160
|
+
context "with :parameters in awscli form" do
|
161
|
+
|
162
|
+
before do
|
163
|
+
options[:parameters] = [{
|
164
|
+
"ParameterKey" => "foo",
|
165
|
+
"ParameterValue" => "bar"
|
166
|
+
}]
|
167
|
+
end
|
168
|
+
|
169
|
+
it "converts them to an Array" do
|
170
|
+
expected_parameters = [
|
171
|
+
{
|
172
|
+
"parameter_key" => "foo",
|
173
|
+
"parameter_value" => "bar"
|
174
|
+
}
|
175
|
+
]
|
176
|
+
create_or_update
|
177
|
+
expect(cf_client).to have_received(:create_stack) do |options|
|
178
|
+
expect(options[:parameters]).to eq(expected_parameters)
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
end
|
183
|
+
|
160
184
|
end
|
161
185
|
|
162
186
|
end
|
@@ -200,8 +224,8 @@ describe Stackup::Stack do
|
|
200
224
|
.with(hash_including(:stack_name => unique_stack_id))
|
201
225
|
end
|
202
226
|
|
203
|
-
it "returns
|
204
|
-
expect(stack.delete).to eq(
|
227
|
+
it "returns status" do
|
228
|
+
expect(stack.delete).to eq("DELETE_COMPLETE")
|
205
229
|
end
|
206
230
|
|
207
231
|
end
|
@@ -256,8 +280,8 @@ describe Stackup::Stack do
|
|
256
280
|
|
257
281
|
context "successful" do
|
258
282
|
|
259
|
-
it "returns
|
260
|
-
expect(create_or_update).to eq(
|
283
|
+
it "returns status" do
|
284
|
+
expect(create_or_update).to eq(final_status)
|
261
285
|
end
|
262
286
|
|
263
287
|
context "if no updates are required" do
|
@@ -384,8 +408,8 @@ describe Stackup::Stack do
|
|
384
408
|
.with(hash_including(expected_args))
|
385
409
|
end
|
386
410
|
|
387
|
-
it "returns
|
388
|
-
expect(stack.cancel_update).to eq(
|
411
|
+
it "returns status" do
|
412
|
+
expect(stack.cancel_update).to eq("UPDATE_ROLLBACK_COMPLETE")
|
389
413
|
end
|
390
414
|
|
391
415
|
end
|
data/stackup.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.bindir = "bin"
|
22
22
|
spec.executables << "stackup"
|
23
23
|
|
24
|
-
spec.add_dependency "aws-sdk", "~> 2.0"
|
24
|
+
spec.add_dependency "aws-sdk-resources", "~> 2.0"
|
25
25
|
spec.add_dependency "clamp", "~> 1.0"
|
26
26
|
spec.add_dependency "console_logger"
|
27
27
|
spec.add_dependency "diffy", "~> 3.0.5"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stackup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Williams
|
@@ -9,10 +9,10 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-11-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name: aws-sdk
|
15
|
+
name: aws-sdk-resources
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
@@ -133,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
133
|
version: '0'
|
134
134
|
requirements: []
|
135
135
|
rubyforge_project:
|
136
|
-
rubygems_version: 2.
|
136
|
+
rubygems_version: 2.5.0
|
137
137
|
signing_key:
|
138
138
|
specification_version: 4
|
139
139
|
summary: Manage CloudFormation stacks
|