sfn 0.0.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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/