cfncli 0.7.0 → 0.8.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 +8 -8
- data/.gitignore +0 -1
- data/.travis.yml +3 -3
- data/Gemfile.lock +130 -0
- data/README.md +1 -0
- data/lib/cfncli/cli.rb +11 -1
- data/lib/cfncli/cloudformation.rb +10 -4
- data/lib/cfncli/event_streamer.rb +3 -1
- data/lib/cfncli/stack.rb +2 -2
- data/lib/cfncli/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
!binary "U0hBMQ==":
|
|
3
3
|
metadata.gz: !binary |-
|
|
4
|
-
|
|
4
|
+
OTFhM2IxNmEzYjFjMWZjYmY3NDUwNmNmZWZiYjZhMjljYTg5ZDA5Yw==
|
|
5
5
|
data.tar.gz: !binary |-
|
|
6
|
-
|
|
6
|
+
ZWQ0ZTE4NTg5MDNjODI2ZjI0ZjJiZWJhOGY3MzY4YzNhNTBkNDJhMg==
|
|
7
7
|
SHA512:
|
|
8
8
|
metadata.gz: !binary |-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
YzI4OWZhMjg4OGRhYjkwODE2YjI2YWFhMjllMzI0YWU3NDY0NzQ3ZDcyZDlm
|
|
10
|
+
YzEwNDZiMGVjOTM5YjUxYmVlNzllZjY1MTFiM2RhNjU5ZGU5ODhlOGY4NTc0
|
|
11
|
+
NWZkZTBmZDExZjQ2Yjg4YzBiYTM0MjFkMmJmNTUwYTg1NmFkOTA=
|
|
12
12
|
data.tar.gz: !binary |-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
ZTBjZjQwZWM0NjU3M2Y2MDkzZThmYjQyNGVjNWE3YmU1OTY2ZDU5ZTA4MjBk
|
|
14
|
+
NTQ5Yzk2Y2NjNjNhODBkZmU2NTY4NWUyNDNlMjMyYzE2YTczMGFhNmJhYjJl
|
|
15
|
+
MWYyZmI4NDc1NDhjZTcxNGQ1ZGE2Y2Q2MGQyODZjNjhhMTAyZWE=
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
|
@@ -13,6 +13,6 @@ deploy:
|
|
|
13
13
|
on:
|
|
14
14
|
tags: true
|
|
15
15
|
addons:
|
|
16
|
-
code_climate:
|
|
17
|
-
repo_token:
|
|
18
|
-
secure: "AKrgx5PtDa5/pek0hLgtk55SEE4DzCBM1li4eVCPK4CWfo7WgiODN51rnE7uhnABdaeI82t/YuJIyLE37PnsU4dqkXVBXtPmijBkbZy1SZ/bmTsSnOFoMTVWkaCb/iAcr+i5yqJ16bSGLV/t3K80ksyH80WgZTdzmh75pEDKaOBDLI42mgBf/eXkLZ68iuotatLnuLFwVa4mGW79yiJYBxHNstYHEBd0B4Ahutz3BMGFUiwCBx0wer+nVf+RxN+RKkiXRLnOeucwVEcbOOHbm1nkLDhL8U1KQ8lnWNV+RSUPNoOJNoMcgMRKMavDj6TC29e2pO44PWNgICCkUqbvc9Otrac5HG566ZsYZ0gp9BhQxEIpeYkzEUh7a/znLGiQYylrohIf9gsWz3KLGOPD68y4DZfmKgQDZG8ag1ErKmIv1Cna1PmsFA/lXUrZ60hIzgc0Vdw2jb7Ww2GHK35h8kSOCuDOOgmDpLhESvPVb7PPL2ftTLwSH6FT/P7wyfoeSqgotZTKZCw6JZAnV+HjwWB1uzR7dlt/H0qjduCVekWcK7Pq4lnlNI8S4tcAYiJSaL6EcCvrQ2qUAlw2xXYar0ouRgOQgM4H3HCleqkNIZwHxc3GYgdyhhPYqBr8Uq1ziT7NnQ4X94cCu9tuAcvKoqvQiJOKc4HUGCzgPnJiqL8="
|
|
16
|
+
# code_climate:
|
|
17
|
+
# repo_token:
|
|
18
|
+
# secure: "AKrgx5PtDa5/pek0hLgtk55SEE4DzCBM1li4eVCPK4CWfo7WgiODN51rnE7uhnABdaeI82t/YuJIyLE37PnsU4dqkXVBXtPmijBkbZy1SZ/bmTsSnOFoMTVWkaCb/iAcr+i5yqJ16bSGLV/t3K80ksyH80WgZTdzmh75pEDKaOBDLI42mgBf/eXkLZ68iuotatLnuLFwVa4mGW79yiJYBxHNstYHEBd0B4Ahutz3BMGFUiwCBx0wer+nVf+RxN+RKkiXRLnOeucwVEcbOOHbm1nkLDhL8U1KQ8lnWNV+RSUPNoOJNoMcgMRKMavDj6TC29e2pO44PWNgICCkUqbvc9Otrac5HG566ZsYZ0gp9BhQxEIpeYkzEUh7a/znLGiQYylrohIf9gsWz3KLGOPD68y4DZfmKgQDZG8ag1ErKmIv1Cna1PmsFA/lXUrZ60hIzgc0Vdw2jb7Ww2GHK35h8kSOCuDOOgmDpLhESvPVb7PPL2ftTLwSH6FT/P7wyfoeSqgotZTKZCw6JZAnV+HjwWB1uzR7dlt/H0qjduCVekWcK7Pq4lnlNI8S4tcAYiJSaL6EcCvrQ2qUAlw2xXYar0ouRgOQgM4H3HCleqkNIZwHxc3GYgdyhhPYqBr8Uq1ziT7NnQ4X94cCu9tuAcvKoqvQiJOKc4HUGCzgPnJiqL8="
|
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
cfncli (0.8.1)
|
|
5
|
+
activesupport (~> 4)
|
|
6
|
+
aws-sdk (~> 2)
|
|
7
|
+
colorize (~> 0)
|
|
8
|
+
concurrent-ruby (~> 1.0)
|
|
9
|
+
thor
|
|
10
|
+
waiting (~> 0)
|
|
11
|
+
|
|
12
|
+
GEM
|
|
13
|
+
remote: https://rubygems.org/
|
|
14
|
+
specs:
|
|
15
|
+
activesupport (4.2.7.1)
|
|
16
|
+
i18n (~> 0.7)
|
|
17
|
+
json (~> 1.7, >= 1.7.7)
|
|
18
|
+
minitest (~> 5.1)
|
|
19
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
|
20
|
+
tzinfo (~> 1.1)
|
|
21
|
+
aws-sdk (2.5.6)
|
|
22
|
+
aws-sdk-resources (= 2.5.6)
|
|
23
|
+
aws-sdk-core (2.5.6)
|
|
24
|
+
jmespath (~> 1.0)
|
|
25
|
+
aws-sdk-resources (2.5.6)
|
|
26
|
+
aws-sdk-core (= 2.5.6)
|
|
27
|
+
builder (3.2.2)
|
|
28
|
+
codeclimate-test-reporter (0.5.0)
|
|
29
|
+
simplecov (>= 0.7.1, < 1.0.0)
|
|
30
|
+
coderay (1.1.1)
|
|
31
|
+
colorize (0.8.1)
|
|
32
|
+
concurrent-ruby (1.0.2)
|
|
33
|
+
cucumber (2.3.3)
|
|
34
|
+
builder (>= 2.1.2)
|
|
35
|
+
cucumber-core (~> 1.4.0)
|
|
36
|
+
cucumber-wire (~> 0.0.1)
|
|
37
|
+
diff-lcs (>= 1.1.3)
|
|
38
|
+
gherkin (~> 3.2.0)
|
|
39
|
+
multi_json (>= 1.7.5, < 2.0)
|
|
40
|
+
multi_test (>= 0.1.2)
|
|
41
|
+
cucumber-core (1.4.0)
|
|
42
|
+
gherkin (~> 3.2.0)
|
|
43
|
+
cucumber-wire (0.0.1)
|
|
44
|
+
diff-lcs (1.2.5)
|
|
45
|
+
docile (1.1.5)
|
|
46
|
+
ffi (1.9.10)
|
|
47
|
+
formatador (0.2.5)
|
|
48
|
+
gherkin (3.2.0)
|
|
49
|
+
guard (2.13.0)
|
|
50
|
+
formatador (>= 0.2.4)
|
|
51
|
+
listen (>= 2.7, <= 4.0)
|
|
52
|
+
lumberjack (~> 1.0)
|
|
53
|
+
nenv (~> 0.1)
|
|
54
|
+
notiffany (~> 0.0)
|
|
55
|
+
pry (>= 0.9.12)
|
|
56
|
+
shellany (~> 0.0)
|
|
57
|
+
thor (>= 0.18.1)
|
|
58
|
+
guard-compat (1.2.1)
|
|
59
|
+
guard-rspec (4.6.5)
|
|
60
|
+
guard (~> 2.1)
|
|
61
|
+
guard-compat (~> 1.1)
|
|
62
|
+
rspec (>= 2.99.0, < 4.0)
|
|
63
|
+
i18n (0.7.0)
|
|
64
|
+
jmespath (1.3.1)
|
|
65
|
+
json (1.8.3)
|
|
66
|
+
listen (3.0.6)
|
|
67
|
+
rb-fsevent (>= 0.9.3)
|
|
68
|
+
rb-inotify (>= 0.9.7)
|
|
69
|
+
lumberjack (1.0.10)
|
|
70
|
+
method_source (0.8.2)
|
|
71
|
+
minitest (5.9.0)
|
|
72
|
+
multi_json (1.11.2)
|
|
73
|
+
multi_test (0.1.2)
|
|
74
|
+
nenv (0.3.0)
|
|
75
|
+
notiffany (0.0.8)
|
|
76
|
+
nenv (~> 0.1)
|
|
77
|
+
shellany (~> 0.0)
|
|
78
|
+
pry (0.10.3)
|
|
79
|
+
coderay (~> 1.1.0)
|
|
80
|
+
method_source (~> 0.8.1)
|
|
81
|
+
slop (~> 3.4)
|
|
82
|
+
rake (10.5.0)
|
|
83
|
+
rb-fsevent (0.9.7)
|
|
84
|
+
rb-inotify (0.9.7)
|
|
85
|
+
ffi (>= 0.5.0)
|
|
86
|
+
rspec (3.4.0)
|
|
87
|
+
rspec-core (~> 3.4.0)
|
|
88
|
+
rspec-expectations (~> 3.4.0)
|
|
89
|
+
rspec-mocks (~> 3.4.0)
|
|
90
|
+
rspec-core (3.4.4)
|
|
91
|
+
rspec-support (~> 3.4.0)
|
|
92
|
+
rspec-expectations (3.4.0)
|
|
93
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
94
|
+
rspec-support (~> 3.4.0)
|
|
95
|
+
rspec-its (1.2.0)
|
|
96
|
+
rspec-core (>= 3.0.0)
|
|
97
|
+
rspec-expectations (>= 3.0.0)
|
|
98
|
+
rspec-mocks (3.4.1)
|
|
99
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
100
|
+
rspec-support (~> 3.4.0)
|
|
101
|
+
rspec-support (3.4.1)
|
|
102
|
+
shellany (0.0.1)
|
|
103
|
+
simplecov (0.11.2)
|
|
104
|
+
docile (~> 1.1.0)
|
|
105
|
+
json (~> 1.8)
|
|
106
|
+
simplecov-html (~> 0.10.0)
|
|
107
|
+
simplecov-html (0.10.0)
|
|
108
|
+
slop (3.6.0)
|
|
109
|
+
thor (0.19.1)
|
|
110
|
+
thread_safe (0.3.5)
|
|
111
|
+
tzinfo (1.2.2)
|
|
112
|
+
thread_safe (~> 0.1)
|
|
113
|
+
waiting (0.3.0)
|
|
114
|
+
|
|
115
|
+
PLATFORMS
|
|
116
|
+
ruby
|
|
117
|
+
|
|
118
|
+
DEPENDENCIES
|
|
119
|
+
bundler (~> 1.10)
|
|
120
|
+
cfncli!
|
|
121
|
+
codeclimate-test-reporter
|
|
122
|
+
cucumber (~> 2)
|
|
123
|
+
guard (~> 2)
|
|
124
|
+
guard-rspec
|
|
125
|
+
rake (~> 10.0)
|
|
126
|
+
rspec
|
|
127
|
+
rspec-its (~> 1.2)
|
|
128
|
+
|
|
129
|
+
BUNDLED WITH
|
|
130
|
+
1.12.5
|
data/README.md
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# cfncli
|
|
2
2
|
[](https://badge.fury.io/rb/cfncli)
|
|
3
|
+
[](https://travis-ci.org/lethalpaga/cfncli)
|
|
3
4
|
[](https://codeclimate.com/github/lethalpaga/cfncli)
|
|
4
5
|
[](https://codeclimate.com/github/lethalpaga/cfncli/coverage)
|
|
5
6
|
|
data/lib/cfncli/cli.rb
CHANGED
|
@@ -110,6 +110,11 @@ module CfnCli
|
|
|
110
110
|
default: true,
|
|
111
111
|
desc: 'List the stack events during the operation'
|
|
112
112
|
|
|
113
|
+
method_option 'list_nested_events',
|
|
114
|
+
type: :boolean,
|
|
115
|
+
default: true,
|
|
116
|
+
desc: 'List events from nested stacks'
|
|
117
|
+
|
|
113
118
|
method_option 'interval',
|
|
114
119
|
type: :numeric,
|
|
115
120
|
default: 10,
|
|
@@ -172,6 +177,11 @@ module CfnCli
|
|
|
172
177
|
desc: 'Name or ID of the Cloudformation stack'
|
|
173
178
|
|
|
174
179
|
# Application options.
|
|
180
|
+
method_option 'list_nested_events',
|
|
181
|
+
type: :boolean,
|
|
182
|
+
default: true,
|
|
183
|
+
desc: 'List events from nested stacks'
|
|
184
|
+
|
|
175
185
|
method_option 'interval',
|
|
176
186
|
type: :numeric,
|
|
177
187
|
default: 10,
|
|
@@ -194,7 +204,7 @@ module CfnCli
|
|
|
194
204
|
fail ArgumentError, 'stack_name is required' unless stack_name
|
|
195
205
|
|
|
196
206
|
config = Config::CfnClient.new(options['interval'], options['retries'], options['retry_limit'])
|
|
197
|
-
cfn.events(stack_name, config)
|
|
207
|
+
cfn.events(stack_name, config, options['list_nested_events'])
|
|
198
208
|
end
|
|
199
209
|
|
|
200
210
|
method_option 'stack_name',
|
|
@@ -11,6 +11,9 @@ module CfnCli
|
|
|
11
11
|
include CfnClient
|
|
12
12
|
include Loggable
|
|
13
13
|
|
|
14
|
+
# A list of options that only apply for stack creation
|
|
15
|
+
CREATE_ONLY_OPTIONS = %w(on_failure).freeze
|
|
16
|
+
|
|
14
17
|
def initialize
|
|
15
18
|
end
|
|
16
19
|
|
|
@@ -29,6 +32,7 @@ module CfnCli
|
|
|
29
32
|
stack = create_stack_obj(stack_name, config)
|
|
30
33
|
|
|
31
34
|
if stack.exists?
|
|
35
|
+
CREATE_ONLY_OPTIONS.each { |key| opts.delete key }
|
|
32
36
|
stack.update(opts)
|
|
33
37
|
else
|
|
34
38
|
stack.create(opts)
|
|
@@ -41,16 +45,18 @@ module CfnCli
|
|
|
41
45
|
def apply_and_list_events(options, config = nil)
|
|
42
46
|
# Create/update the stack
|
|
43
47
|
logger.debug "Creating stack #{options['stack_name']}"
|
|
48
|
+
list_nested_events = options['list_nested_events']
|
|
49
|
+
options.delete 'list_nested_events'
|
|
44
50
|
stack = create_or_update_stack(options, config)
|
|
45
51
|
|
|
46
|
-
events(stack, config)
|
|
52
|
+
events(stack, config, list_nested_events)
|
|
47
53
|
Waiting.wait(interval: config.interval || default_config.interval, max_attempts: config.retries || default_config.retries) do |waiter|
|
|
48
54
|
waiter.done if stack.finished? && !stack.listing_events?
|
|
49
|
-
end
|
|
55
|
+
end
|
|
50
56
|
end
|
|
51
57
|
|
|
52
58
|
# List stack events
|
|
53
|
-
def events(stack_or_name, config = nil, reset_events = true, poller = nil, streamer = nil)
|
|
59
|
+
def events(stack_or_name, config = nil, list_nested_events = true, reset_events = true, poller = nil, streamer = nil)
|
|
54
60
|
stack = stack_or_name
|
|
55
61
|
stack = create_stack_obj(stack_or_name, config) unless stack_or_name.is_a? CfnCli::Stack
|
|
56
62
|
|
|
@@ -60,7 +66,7 @@ module CfnCli
|
|
|
60
66
|
streamer.reset_events if reset_events
|
|
61
67
|
|
|
62
68
|
logger.debug "Listing events for stack #{stack.stack_name}"
|
|
63
|
-
stack.list_events(poller, streamer, config)
|
|
69
|
+
stack.list_events(poller, streamer, config, nil, list_nested_events)
|
|
64
70
|
end
|
|
65
71
|
|
|
66
72
|
# Delete a stack
|
|
@@ -31,7 +31,9 @@ module CfnCli
|
|
|
31
31
|
events.sort { |a, b| a.timestamp <=> b.timestamp }.each do |event|
|
|
32
32
|
yield event unless seen?(event) if block_given?
|
|
33
33
|
end
|
|
34
|
-
|
|
34
|
+
rescue Aws::CloudFormation::Errors::ServiceError => e
|
|
35
|
+
raise unless e.class.name == 'Aws::CloudFormation::Errors::Throttling'
|
|
36
|
+
end
|
|
35
37
|
|
|
36
38
|
# Mark all the existing events as 'seen'
|
|
37
39
|
def reset_events
|
data/lib/cfncli/stack.rb
CHANGED
|
@@ -95,11 +95,11 @@ module CfnCli
|
|
|
95
95
|
|
|
96
96
|
# List all events in real time
|
|
97
97
|
# @param poller [CfnCli::Poller] Poller class to display events
|
|
98
|
-
def list_events(poller, streamer = nil, config = nil, event_prefix = nil)
|
|
98
|
+
def list_events(poller, streamer = nil, config = nil, event_prefix = nil, list_nested_events = true)
|
|
99
99
|
@event_listing_thread = Thread.new do
|
|
100
100
|
streamer ||= EventStreamer.new(self, config)
|
|
101
101
|
streamer.each_event do |event|
|
|
102
|
-
if Event.new(event).child_stack_create_event?
|
|
102
|
+
if list_nested_events && Event.new(event).child_stack_create_event?
|
|
103
103
|
track_child_stack(event.physical_resource_id, event.logical_resource_id, poller)
|
|
104
104
|
end
|
|
105
105
|
poller.event(event, event_prefix)
|
data/lib/cfncli/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: cfncli
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.8.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- lethalpaga
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-08-
|
|
11
|
+
date: 2016-08-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -204,6 +204,7 @@ files:
|
|
|
204
204
|
- .rspec
|
|
205
205
|
- .travis.yml
|
|
206
206
|
- Gemfile
|
|
207
|
+
- Gemfile.lock
|
|
207
208
|
- Guardfile
|
|
208
209
|
- README.md
|
|
209
210
|
- Rakefile
|