stackup 0.6.0 → 0.6.1
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/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
|