cfncli 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/cfncli/cfn_client.rb +7 -1
- data/lib/cfncli/cli.rb +19 -14
- data/lib/cfncli/config.rb +7 -3
- data/lib/cfncli/stack.rb +3 -0
- data/lib/cfncli/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OTM5YTRjNGYyYjhmZjc5YWI2ZTc3NWFhYzliMjIzZTMyMjE0ZDM5Nw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
Yzk3ZmMxOGQzMzA0M2IyZWU4NmI2NzFiNDc0NzgwMTEyZDllYmI5Mg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZjdjMzAzYTIyZWI5Zjk2MWE0MTgzY2RmMThkMmViOWU3MjE0ZGQxMTU5YWJh
|
10
|
+
ODQzYmQxMGQ3OWIzZjc0ZGU0NDc4YTc5OTRkNWExOWIxYjkzMmVkOGU2NWZi
|
11
|
+
ODBmNTc1N2VmMDU1MmFlMDUxZTUwOWVjMzdiMWEzNjQ2ZGViN2M=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZTI2MGYyNWExNTljMmI4ZjRlMTZhMWI4MDdiNzNhZGNmODgwMmEyZjViZjkw
|
14
|
+
OWNiZjRkOGQwYzdjNjg1N2ZhYzgyZTI1YTYxY2RkMGI2OTBmYjBhY2RiYzll
|
15
|
+
NzE3ODJlYzNkODNhZGIyODZiZmMzZjI3NWNiZWI1MDA5MjQ3NGI=
|
data/lib/cfncli/cfn_client.rb
CHANGED
@@ -4,11 +4,17 @@ module CfnCli
|
|
4
4
|
module CfnClient
|
5
5
|
|
6
6
|
attr_accessor :stub_responses
|
7
|
+
attr_accessor :retry_limit
|
8
|
+
attr_accessor :retry_backoff
|
7
9
|
|
8
10
|
# CloudFormation client
|
9
11
|
# @see http://docs.aws.amazon.com/sdkforruby/api/Aws/CloudFormation/Client.html
|
10
12
|
def cfn_client
|
11
|
-
|
13
|
+
options ||= {}
|
14
|
+
options[:retry_limit] = @retry_limit if @retry_limit
|
15
|
+
options[:retry_backoff] = @retry_backoff if @retry_backoff
|
16
|
+
options[:stub_responses] = @stub_responses || false
|
17
|
+
@@client ||= Aws::CloudFormation::Client.new(**options)
|
12
18
|
end
|
13
19
|
|
14
20
|
# Clouformation Resource
|
data/lib/cfncli/cli.rb
CHANGED
@@ -23,7 +23,7 @@ module CfnCli
|
|
23
23
|
type: :numeric,
|
24
24
|
default: 1,
|
25
25
|
desc: 'Log level to display (0=DEBUG, 1=INFO, 2=ERROR, 3=CRITICAL)'
|
26
|
-
|
26
|
+
|
27
27
|
class_option 'config_file',
|
28
28
|
type: :string,
|
29
29
|
default: 'cfncli.yml',
|
@@ -56,7 +56,6 @@ module CfnCli
|
|
56
56
|
|
57
57
|
method_option 'disable_rollback',
|
58
58
|
type: :boolean,
|
59
|
-
default: false,
|
60
59
|
desc: 'Disable rollbacks in case of a stack update failure'\
|
61
60
|
' This is mutually exclusive with on_failure.'
|
62
61
|
|
@@ -81,7 +80,7 @@ module CfnCli
|
|
81
80
|
|
82
81
|
method_option 'stack_policy_body',
|
83
82
|
type: :string,
|
84
|
-
desc: 'JSON String containing the stack policy body. The @filename syntax can be used.'
|
83
|
+
desc: 'JSON String containing the stack policy body. The @filename syntax can be used.'
|
85
84
|
|
86
85
|
method_option 'stack_policy_url',
|
87
86
|
type: :string,
|
@@ -114,35 +113,41 @@ module CfnCli
|
|
114
113
|
default: false,
|
115
114
|
desc: 'Fails if a stack has nothing to update'
|
116
115
|
|
116
|
+
method_option 'retry_limit',
|
117
|
+
type: :numeric,
|
118
|
+
default: 5,
|
119
|
+
desc: 'Maximum number of retries for the AWS backoff mechanism'
|
120
|
+
|
117
121
|
desc 'apply', 'Creates a stack in Cloudformation'
|
118
122
|
def apply
|
119
123
|
opts = process_params(options)
|
120
124
|
|
121
125
|
stack_name = opts['stack_name']
|
122
126
|
fail ArgumentError, 'stack_name is required' unless stack_name
|
123
|
-
|
127
|
+
|
124
128
|
timeout = consume_option(opts, 'timeout')
|
125
129
|
interval = consume_option(opts, 'interval')
|
126
130
|
retries = timeout / interval
|
127
131
|
fail_on_noop = consume_option(opts, 'fail_on_noop')
|
128
132
|
list_events = consume_option(opts, 'list_events')
|
133
|
+
retry_limit = consume_option(opts, 'retry_limit')
|
129
134
|
config_file = consume_option(opts, 'config_file')
|
130
135
|
|
131
136
|
ENV['CFNCLI_LOG_LEVEL'] = consume_option(opts, 'log_level').to_s
|
132
137
|
|
133
138
|
logger.debug "Apply parameters: #{options.inspect}"
|
134
139
|
|
135
|
-
client_config = Config::CfnClient.new(interval, retries, fail_on_noop)
|
140
|
+
client_config = Config::CfnClient.new(interval, retries, fail_on_noop, retry_limit)
|
136
141
|
|
137
|
-
res = ExitCode::OK
|
142
|
+
res = ExitCode::OK
|
138
143
|
if list_events
|
139
|
-
cfn.apply_and_list_events(opts, client_config)
|
144
|
+
cfn.apply_and_list_events(opts, client_config)
|
140
145
|
res = ExitCode::STACK_ERROR unless cfn.stack_successful? stack_name
|
141
146
|
else
|
142
147
|
cfn.create_stack(opts, client_config)
|
143
148
|
end
|
144
149
|
|
145
|
-
puts "Stack creation #{res == 0 ? 'successful' : 'failed'}"
|
150
|
+
puts "Stack #{stack_name} creation #{res == 0 ? 'successful' : 'failed'}"
|
146
151
|
exit res
|
147
152
|
rescue Aws::CloudFormation::Errors::ValidationError => e
|
148
153
|
puts e.message
|
@@ -168,13 +173,13 @@ module CfnCli
|
|
168
173
|
desc 'events', 'Displays the events for a stack in realtime'
|
169
174
|
def events
|
170
175
|
stack_name = options['stack_name']
|
171
|
-
|
176
|
+
|
172
177
|
fail ArgumentError, 'stack_name is required' unless stack_name
|
173
|
-
|
178
|
+
|
174
179
|
config = Config::CfnClient.new(options['interval'], options['retries'])
|
175
180
|
cfn.events(stack_name, config)
|
176
181
|
end
|
177
|
-
|
182
|
+
|
178
183
|
method_option 'stack_name',
|
179
184
|
aliases: ['-n'],
|
180
185
|
type: :string,
|
@@ -195,9 +200,9 @@ module CfnCli
|
|
195
200
|
def delete
|
196
201
|
opts = options.dup
|
197
202
|
stack_name = opts['stack_name']
|
198
|
-
|
203
|
+
|
199
204
|
fail ArgumentError, 'stack_name is required' unless stack_name
|
200
|
-
|
205
|
+
|
201
206
|
interval = consume_option(opts, 'interval')
|
202
207
|
timeout = consume_option(opts, 'timeout')
|
203
208
|
consume_option(opts, 'log_level')
|
@@ -279,7 +284,7 @@ module CfnCli
|
|
279
284
|
|
280
285
|
# Converts a parameter JSON file to the format expected by CloudFormation
|
281
286
|
# @param filename Path to the JSON file containing the parameters description
|
282
|
-
# @return
|
287
|
+
# @return
|
283
288
|
def process_stack_parameters_file(filename)
|
284
289
|
content = File.read(filename)
|
285
290
|
return CloudFormation.parse_json_params(JSON.parse(content))
|
data/lib/cfncli/config.rb
CHANGED
@@ -8,16 +8,20 @@ module CfnCli
|
|
8
8
|
rescue Errno::ENOENT
|
9
9
|
nil
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
class CfnClient
|
13
13
|
attr_accessor :interval
|
14
14
|
attr_accessor :retries
|
15
15
|
attr_accessor :fail_on_noop
|
16
|
-
|
17
|
-
|
16
|
+
attr_accessor :aws_retry_limit
|
17
|
+
attr_accessor :aws_retry_backoff
|
18
|
+
|
19
|
+
def initialize(interval = 10, retries = 30, fail_on_noop = false, aws_retry_limit = 5, aws_retry_backoff = nil)
|
18
20
|
@interval = interval
|
19
21
|
@retries = retries
|
20
22
|
@fail_on_noop = fail_on_noop
|
23
|
+
@aws_retry_limit = aws_retry_limit
|
24
|
+
@aws_retry_backoff = aws_retry_backoff
|
21
25
|
end
|
22
26
|
end
|
23
27
|
end
|
data/lib/cfncli/stack.rb
CHANGED
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.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- lethalpaga
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|