sfn 0.0.1 → 0.3.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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +107 -0
  3. data/LICENSE +13 -0
  4. data/README.md +142 -61
  5. data/bin/sfn +43 -0
  6. data/lib/chef/knife/knife_plugin_seed.rb +117 -0
  7. data/lib/sfn.rb +17 -0
  8. data/lib/sfn/cache.rb +385 -0
  9. data/lib/sfn/command.rb +45 -0
  10. data/lib/sfn/command/create.rb +87 -0
  11. data/lib/sfn/command/describe.rb +87 -0
  12. data/lib/sfn/command/destroy.rb +74 -0
  13. data/lib/sfn/command/events.rb +98 -0
  14. data/lib/sfn/command/export.rb +103 -0
  15. data/lib/sfn/command/import.rb +117 -0
  16. data/lib/sfn/command/inspect.rb +160 -0
  17. data/lib/sfn/command/list.rb +59 -0
  18. data/lib/sfn/command/promote.rb +17 -0
  19. data/lib/sfn/command/update.rb +95 -0
  20. data/lib/sfn/command/validate.rb +34 -0
  21. data/lib/sfn/command_module.rb +9 -0
  22. data/lib/sfn/command_module/base.rb +150 -0
  23. data/lib/sfn/command_module/stack.rb +166 -0
  24. data/lib/sfn/command_module/template.rb +147 -0
  25. data/lib/sfn/config.rb +106 -0
  26. data/lib/sfn/config/create.rb +35 -0
  27. data/lib/sfn/config/describe.rb +19 -0
  28. data/lib/sfn/config/destroy.rb +9 -0
  29. data/lib/sfn/config/events.rb +25 -0
  30. data/lib/sfn/config/export.rb +29 -0
  31. data/lib/sfn/config/import.rb +24 -0
  32. data/lib/sfn/config/inspect.rb +37 -0
  33. data/lib/sfn/config/list.rb +25 -0
  34. data/lib/sfn/config/promote.rb +23 -0
  35. data/lib/sfn/config/update.rb +20 -0
  36. data/lib/sfn/config/validate.rb +49 -0
  37. data/lib/sfn/monkey_patch.rb +8 -0
  38. data/lib/sfn/monkey_patch/stack.rb +200 -0
  39. data/lib/sfn/provider.rb +224 -0
  40. data/lib/sfn/utils.rb +23 -0
  41. data/lib/sfn/utils/debug.rb +31 -0
  42. data/lib/sfn/utils/json.rb +37 -0
  43. data/lib/sfn/utils/object_storage.rb +28 -0
  44. data/lib/sfn/utils/output.rb +79 -0
  45. data/lib/sfn/utils/path_selector.rb +99 -0
  46. data/lib/sfn/utils/ssher.rb +29 -0
  47. data/lib/sfn/utils/stack_exporter.rb +275 -0
  48. data/lib/sfn/utils/stack_parameter_scrubber.rb +37 -0
  49. data/lib/sfn/utils/stack_parameter_validator.rb +124 -0
  50. data/lib/sfn/version.rb +4 -0
  51. data/sfn.gemspec +19 -0
  52. metadata +110 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7f7d923b3e2232d313f37902aba52368d3feb60c
4
- data.tar.gz: b3821d0d8663923f23e083ff8938fc0f9a2f9942
3
+ metadata.gz: 503fe5b1c6c2b1fd9620fa4031e4f922e7432739
4
+ data.tar.gz: ce03c4291a2edfb660e7614b7202835f062ee965
5
5
  SHA512:
6
- metadata.gz: 7d4ca8056ea8efd86b023255627edaa76c455604ef33406f053a78b4b9ec5837aa0ec650b1ce6b290a64fbe83819529c2a8671a9ae612c6b073511c2f99f5356
7
- data.tar.gz: 3428daa388483853cce8be81bd0ef39e4ff87a3e7d19cbacf01a318bb2b0d46dd9e31dacfb8ff9885f4f85aef67e256bea78352ef714267a460f3b7985913026
6
+ metadata.gz: 3ebf8bfb6f17238c53cf49b295e938bacaa04298fa79f9f2b694d8c8fd927ead75c1acf005fd7ebd63f870039bb890e98659395cd6451b83f934800b3a459ded
7
+ data.tar.gz: bf7061df664df0cec57c29627f57262effe53652f1bd49dc439fe4157983730adacb4831fbfe10750f30764517db8d90716a16410ce383e2f14f045a32ac5bf7
data/CHANGELOG.md ADDED
@@ -0,0 +1,107 @@
1
+ ## v0.3.0
2
+ * Conversion from `knife-cloudformation` to `sfn`
3
+ * Add knife subcommand alias `sparkleformation`
4
+ * Remove implementation dependency on Chef tooling
5
+
6
+ ## v0.2.20
7
+ * Add automatic support for outputs in nested stacks to `--apply-stack`
8
+
9
+ ## v0.2.18
10
+ * Fix nested stack URL generation
11
+
12
+ ## v0.2.16
13
+ * Fix broken validation command (#12 thanks @JonathanSerafini)
14
+ * Pad stack name indexes when unpacked
15
+
16
+ ## v0.2.14
17
+ * Pass command configuration through when unpacking
18
+ * Force stack list reload prior to polling to prevent lookup errors
19
+ * Add glob support on name arguments provided for `destroy`
20
+ * Add unpacked stack support to `--apply-stack` flag
21
+ * Retry events polling when started from different command
22
+
23
+ ## v0.2.12
24
+ * Use template to provide logical parameter ordering on stack update
25
+ * Only set parameters when not the default template value
26
+ * Do not save nested stacks to remote bucket when in print-only mode
27
+ * Add initial support for un-nested stack create and update
28
+ * Fix nested stack flagging usage
29
+
30
+ ## v0.2.10
31
+ * Add initial nested stack support
32
+
33
+ ## v0.2.8
34
+ * Update stack lookup implementation to make faster from CLI
35
+ * Prevent constant error on exception when Redis is not in use
36
+ * Provide better error messages on request failures
37
+
38
+ ## v0.2.6
39
+ * Update to parameter re-defaults to use correct hash instance
40
+
41
+ ## v0.2.4
42
+ * Fix apply stack parameter processing
43
+
44
+ ## v0.2.2
45
+ * Fix redis-objects loading in cache helper
46
+
47
+ ## v0.2.0
48
+ * This release should be considered "breaking"
49
+ * Underlying cloud API has been changed from fog to miasma
50
+ * The `inspect` command has been fully reworked to support `--attribute`
51
+ * Lots and lots of other changes. See commit log.
52
+
53
+ ## v0.1.22
54
+ * Prevent full stack list loading in knife commands
55
+ * Default logger to INFO level and allow DEBUG level via `ENV['DEBUG']`
56
+ * Fix assumption of type when accessing cached data (cannot assume availability)
57
+
58
+ ## v0.1.20
59
+ * Update some caching behavior
60
+ * Add more logging especially around remote calls
61
+ * Add support for request throttling
62
+ * Disable local caching when stack is in `in_progress` state
63
+
64
+ ## v0.1.18
65
+ * Replace constant with inline value to prevent warnings
66
+ * Explicitly load file to ensure proper load ordering
67
+
68
+ ## v0.1.16
69
+ * Fix exit code on stack destroy
70
+ * Update stack loading for single stack requests
71
+ * Add import and export functionality
72
+
73
+ ## v0.1.14
74
+ * Extract template building tools
75
+ * Add support for custom CF locations and prompting
76
+ * Updates in fetching and caching behavior
77
+
78
+ ## v0.1.12
79
+ * Use the split value when re-joining parameters
80
+
81
+ ## v0.1.10
82
+ * Fix parameter passing via the CLI (data loss issue when value contained ':')
83
+
84
+ ## v0.1.8
85
+ * Update event cache handling
86
+ * Allow multiple users for node connect attempts
87
+
88
+ ## v0.1.6
89
+ * Adds inspect action
90
+ * Updates to commons
91
+ * Allow multiple stack destroys at once
92
+ * Updates to options to make consistent
93
+
94
+ ## v0.1.4
95
+ * Support outputs on stack creation
96
+ * Poll on destroy by default
97
+ * Add inspection helper for failed node inspection
98
+ * Refactor AWS interactions to common library
99
+
100
+ ## v0.1.2
101
+ * Update dependency restriction to get later version
102
+
103
+ ## v0.1.0
104
+ * Stable-ish release
105
+
106
+ ## v0.0.1
107
+ * Initial release
data/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2014 Heavy Water Operations LLC.
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
data/README.md CHANGED
@@ -1,8 +1,7 @@
1
- # Knife CloudFormation
1
+ # SparkleFormation CLI
2
2
 
3
- This is a plugin for the `knife` command provided by
4
- Chef to interact with AWS (and other) orchestration
5
- APIs.
3
+ SparkleFormation command line interface for interacting
4
+ with orchestration APIs.
6
5
 
7
6
  ## API Compatibility
8
7
 
@@ -12,63 +11,77 @@ APIs.
12
11
 
13
12
  ## Configuration
14
13
 
15
- The easiest way to configure the plugin is via the
16
- `knife.rb` file. Credentials are the only configuration
17
- requirement, and the `Hash` provided is proxied to
18
- [Miasma][miasma]:
14
+ Configuration is defined within a `.sfn` file. The
15
+ `sfn` command will start from the current working
16
+ directory and work up to the root of the file system
17
+ to discover this file.
19
18
 
20
- ### AWS
19
+ ### Configuration formats
21
20
 
22
- ```ruby
23
- # .chef/knife.rb
21
+ The configuration file can be provided in a variety of
22
+ formats:
24
23
 
25
- knife[:cloudformation][:credentials] = {
26
- :provider => :aws,
27
- :aws_access_key_id => ENV['AWS_ACCESS_KEY_ID'],
28
- :aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
29
- :aws_region => ENV['AWS_REGION']
24
+ #### JSON
25
+
26
+ ```json
27
+ {
28
+ "credentials": {
29
+ AWS_CREDENTIALS
30
+ },
31
+ "options": {
32
+ "disable_rollback": true
33
+ }
30
34
  }
31
35
  ```
32
36
 
33
- ### Rackspace
37
+ ### YAML
34
38
 
35
- ```ruby
36
- # .chef/knife.rb
39
+ ```yaml
40
+ ---
41
+ :credentials:
42
+ :fubar: true
43
+ :options:
44
+ :disable_rollback: true
45
+ ```
37
46
 
38
- knife[:cloudformation][:credentials] = {
39
- :provider => :rackspace,
40
- :rackspace_username => ENV['RACKSPACE_USERNAME'],
41
- :rackspace_api_key => ENV['RACKSPACE_API_KEY'],
42
- :rackspace_region => ENV['RACKSPACE_REGION']
43
- }
47
+ ### XML
48
+
49
+ ```xml
50
+ <configuration>
51
+ <credentials>
52
+ AWS_CREDENTIALS
53
+ </credentials>
54
+ <options>
55
+ <disable_rollback>
56
+ true
57
+ </disable_rollback>
58
+ </options>
59
+ </configuration>
44
60
  ```
45
61
 
46
- ### OpenStack
62
+ ### Ruby
47
63
 
48
64
  ```ruby
49
- # .chef/knife.rb
50
-
51
- knife[:cloudformation][:credentials] = {
52
- :provider => :open_stack,
53
- :open_stack_username => ENV['OPENSTACK_USERNAME'],
54
- :open_stack_password => ENV['OPENSTACK_PASSWORD'],
55
- :open_stack_identity_url => ENV['OPENSTACK_IDENTITY_URL'],
56
- :open_stack_tenant_name => ENV['OPENSTACK_TENANT']
57
- }
65
+ Configuration.new do
66
+ credentials do
67
+ AWS_CREDENTIALS
68
+ end
69
+ options.disable_rollback true
70
+ end
58
71
  ```
59
72
 
60
73
  ## Commands
61
74
 
62
- * `knife cloudformation list`
63
- * `knife cloudformation create`
64
- * `knife cloudformation update`
65
- * `knife cloudformation destroy`
66
- * `knife cloudformation events`
67
- * `knife cloudformation describe`
68
- * `knife cloudformation inspect`
69
- * `knife cloudformation validate`
75
+ * `sfn list`
76
+ * `sfn create`
77
+ * `sfn update`
78
+ * `sfn destroy`
79
+ * `sfn events`
80
+ * `sfn describe`
81
+ * `sfn inspect`
82
+ * `sfn validate`
70
83
 
71
- ### `knife cloudformation list`
84
+ ### `sfn list`
72
85
 
73
86
  Provides listing of current stacks and state of each stack.
74
87
 
@@ -77,7 +90,7 @@ Provides listing of current stacks and state of each stack.
77
90
  * `--attribute ATTR` stack attribute to display
78
91
  * `--status STATUS` match stacks with given status
79
92
 
80
- ### `knife cloudformation validate`
93
+ ### `sfn validate`
81
94
 
82
95
  Validates template with API
83
96
 
@@ -89,7 +102,7 @@ Validates template with API
89
102
  * `--[no-]apply-nesting` apply template nesting logic
90
103
  * `--nesting-bucket BUCKET` asset store bucket to place nested stack templates
91
104
 
92
- ### `knife cloudformation create NAME`
105
+ ### `sfn create NAME`
93
106
 
94
107
  Creates a new stack with the provided name (`NAME`).
95
108
 
@@ -152,7 +165,7 @@ StackB:
152
165
  When creating StackB, if we use the `--apply-stack` option:
153
166
 
154
167
  ```
155
- $ knife cloudformation create StackB --apply-stack StackA
168
+ $ sfn create StackB --apply-stack StackA
156
169
  ```
157
170
 
158
171
  when prompted for the stack parameters, we will find the parameter
@@ -171,13 +184,12 @@ _NOTE: (SparkleFormation Usage Documentation)[]._
171
184
  This plugin supports the advanced stack nesting feature provided by
172
185
  the SparkleFormation library.
173
186
 
174
-
175
187
  #### Translations
176
188
 
177
189
  Translations are currently an `alpha` feature and only a subset of
178
190
  resources are supported.
179
191
 
180
- ### `knife cloudformation update STACK`
192
+ ### `sfn update STACK`
181
193
 
182
194
  Update an existing stack.
183
195
 
@@ -191,7 +203,7 @@ Update an existing stack.
191
203
  * `--[no-]apply-nesting` apply template nesting logic
192
204
  * `--nesting-bucket BUCKET` asset store bucket to place nested stack templates
193
205
 
194
- ### `knife cloudformation destroy STACK`
206
+ ### `sfn destroy STACK`
195
207
 
196
208
  Destroy an existing stack.
197
209
 
@@ -208,12 +220,12 @@ stacks:
208
220
  running the following command:
209
221
 
210
222
  ```
211
- $ knife cloudformation destroy Test*
223
+ $ sfn destroy Test*
212
224
  ```
213
225
 
214
226
  will destroy the `TestStack1` and `TestStack2`
215
227
 
216
- ### `knife cloudformation events STACK`
228
+ ### `sfn events STACK`
217
229
 
218
230
  Display the event listing of given stack. If the state of the
219
231
  stack is "in progress", the polling option will result in
@@ -224,7 +236,7 @@ completed state.
224
236
 
225
237
  * `--[no-]poll` poll for new events until completed state reached
226
238
 
227
- ### `knife cloudformation describe STACK`
239
+ ### `sfn describe STACK`
228
240
 
229
241
  Display resources and outputs of give stack.
230
242
 
@@ -233,7 +245,7 @@ Display resources and outputs of give stack.
233
245
  * `--resources` display resources
234
246
  * `--outputs` display outputs
235
247
 
236
- ### `knife cloudformation inspect STACK`
248
+ ### `sfn inspect STACK`
237
249
 
238
250
  The stack inspection command simply provides a proxy to the
239
251
  underlying resource modeling objects provided via the
@@ -268,13 +280,13 @@ called on the `Miasma::Models::Orchestration::Stack` instance.
268
280
  For example, to display the JSON template of a stack:
269
281
 
270
282
  ```
271
- $ knife cloudformation inspect STACK -a template
283
+ $ sfn inspect STACK -a template
272
284
  ```
273
285
 
274
286
  To display the resource collection of the stack:
275
287
 
276
288
  ```
277
- $ knife cloudformation inspect STACK -a resources
289
+ $ sfn inspect STACK -a resources
278
290
  ```
279
291
 
280
292
  This will provide a list of resources. Now, to make this more
@@ -283,7 +295,7 @@ that the 3rd resource in the collection is an auto scaling
283
295
  group resource. We can isolate that resource for display:
284
296
 
285
297
  ```
286
- $ knife cloudformation inspect STACK -a "resources.all.at(2)"
298
+ $ sfn inspect STACK -a "resources.all.at(2)"
287
299
  ```
288
300
 
289
301
  Note that the resources are an array, and we are using a zero
@@ -293,7 +305,7 @@ we already have seen. One of the handy features within the
293
305
  So, we can expand this resource:
294
306
 
295
307
  ```
296
- $ knife cloudformation inspect STACK -a "resources.all.at(2).expand"
308
+ $ sfn inspect STACK -a "resources.all.at(2).expand"
297
309
  ```
298
310
 
299
311
  This will expand the resource instance and return the actual
@@ -305,16 +317,85 @@ contains a `servers` attribute. The output lists the IDs of the
305
317
  instances, but we can expand those as well:
306
318
 
307
319
  ```
308
- $ knife cloudformation inspect STACK -a "resources.all.at(2).expand.servers.map(&:expand)"
320
+ $ sfn inspect STACK -a "resources.all.at(2).expand.servers.map(&:expand)"
309
321
  ```
310
322
 
311
323
  The attribute string will be minimally processed when proxying calls
312
324
  to the underlying models, which is why we are able to do ruby-ish
313
325
  style things.
314
326
 
327
+ ## Chef Knife Integration
328
+
329
+ This library will also provide `cloudformation` subcommands
330
+ to knife.
331
+
332
+ ### Configuration
333
+
334
+ The easiest way to configure the plugin is via the
335
+ `knife.rb` file. Credentials are the only configuration
336
+ requirement, and the `Hash` provided is proxied to
337
+ [Miasma][miasma]. All configuration options provided
338
+ via the `sfn` command are allowed within the
339
+ `knife[:cloudformation]` namespace:
340
+
341
+ #### AWS
342
+
343
+ ```ruby
344
+ # .chef/knife.rb
345
+
346
+ knife[:cloudformation][:credentials] = {
347
+ :provider => :aws,
348
+ :aws_access_key_id => ENV['AWS_ACCESS_KEY_ID'],
349
+ :aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
350
+ :aws_region => ENV['AWS_REGION']
351
+ }
352
+ ```
353
+
354
+ #### Rackspace
355
+
356
+ ```ruby
357
+ # .chef/knife.rb
358
+
359
+ knife[:cloudformation][:credentials] = {
360
+ :provider => :rackspace,
361
+ :rackspace_username => ENV['RACKSPACE_USERNAME'],
362
+ :rackspace_api_key => ENV['RACKSPACE_API_KEY'],
363
+ :rackspace_region => ENV['RACKSPACE_REGION']
364
+ }
365
+ ```
366
+
367
+ #### OpenStack
368
+
369
+ ```ruby
370
+ # .chef/knife.rb
371
+
372
+ knife[:cloudformation][:credentials] = {
373
+ :provider => :open_stack,
374
+ :open_stack_username => ENV['OPENSTACK_USERNAME'],
375
+ :open_stack_password => ENV['OPENSTACK_PASSWORD'],
376
+ :open_stack_identity_url => ENV['OPENSTACK_IDENTITY_URL'],
377
+ :open_stack_tenant_name => ENV['OPENSTACK_TENANT']
378
+ }
379
+ ```
380
+
381
+ ### Usage
382
+
383
+ All commands available via the `sfn` command are available as
384
+ knife subcommands under `cloudformation` and `sparkleformation`
385
+
386
+ ```
387
+ $ knife cloudformation --help
388
+ ```
389
+
390
+ or
391
+
392
+ ```
393
+ $ knife sparkleformation --help
394
+ ```
395
+
315
396
  # Info
316
397
 
317
- * Repository: https://github.com/hw-labs/knife-cloudformation
318
- * IRC: Freenode @ #heavywater
398
+ * Repository: https://github.com/sparkleformation/sfn
399
+ * IRC: Freenode @ #sparkleformation
319
400
 
320
401
  [miasma]: http://miasma-rb.github.io/miasma/