convection 2.1.2 → 2.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2c47278ea072d6254e3d9b6bd60ff0b34b26d5c5
4
- data.tar.gz: eae63705e881e7b7efa4cc2a5c3376bc453f39b1
3
+ metadata.gz: 3a392fc50dc24347f0d9d1d2c053c60452012456
4
+ data.tar.gz: a507193b6289edd3ae3e66d2dc6f4a1e18e567b1
5
5
  SHA512:
6
- metadata.gz: b6655098f7f79a48236e71f5c20df2a2c236aa3fed7025789d92642df1369d763ec5e70a8e71436f363e062d7549520c6959e5e83452bd454229f0d84bf0f0a0
7
- data.tar.gz: 7f8a5150e724eea1ce80a5a6d25a6da6520233242a5a53f985225dabc3739fecc2693269052c75dec5a320e0ef11838cc3305a37dd14e4154af7fc0c48db167a
6
+ metadata.gz: ba1be75c5946facbc993de9e60dbaf156246a5dc6d005ccadab022ab394216224355750c0005124e2fbd031aca40278d83c6d171c3a2ec19b5e9735537a1c832
7
+ data.tar.gz: 5ef6b2ca93239b47cc53b0ae802f3dcc6fdd942097cc842d840156a8298d8fdecab76f67146827c219dbc587e046fdd9a9aad23c178d6fe36363ae6db1c82863
data/.gitignore CHANGED
@@ -23,3 +23,5 @@ attic
23
23
  *.swp
24
24
  *.swo
25
25
  *.gem
26
+ *.iml
27
+ .rakeTasks
data/.rubocop_todo.yml CHANGED
@@ -1,11 +1,47 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2016-02-05 13:27:18 -0500 using RuboCop version 0.37.0.
3
+ # on 2017-11-20 16:26:30 +0000 using RuboCop version 0.49.1.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
+ # Offense count: 1
10
+ # Cop supports --auto-correct.
11
+ # Configuration parameters: Include, TreatCommentsAsGroupSeparators.
12
+ # Include: **/Gemfile, **/gems.rb
13
+ Bundler/OrderedGems:
14
+ Exclude:
15
+ - 'Gemfile'
16
+
17
+ # Offense count: 1
18
+ # Cop supports --auto-correct.
19
+ Layout/EmptyLineAfterMagicComment:
20
+ Exclude:
21
+ - 'convection.gemspec'
22
+
23
+ # Offense count: 1
24
+ # Cop supports --auto-correct.
25
+ Layout/EmptyLinesAroundExceptionHandlingKeywords:
26
+ Exclude:
27
+ - 'lib/convection/control/stack.rb'
28
+
29
+ # Offense count: 1
30
+ # Cop supports --auto-correct.
31
+ # Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
32
+ # SupportedStyles: consistent, special_for_inner_method_call, special_for_inner_method_call_in_parentheses
33
+ Layout/FirstParameterIndentation:
34
+ Exclude:
35
+ - 'lib/convection/model/mixin/taggable.rb'
36
+
37
+ # Offense count: 1
38
+ # Cop supports --auto-correct.
39
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
40
+ # SupportedStyles: auto_detection, squiggly, active_support, powerpack, unindent
41
+ Layout/IndentHeredoc:
42
+ Exclude:
43
+ - 'yard_extensions/properties_handler.rb'
44
+
9
45
  # Offense count: 1
10
46
  Lint/HandleExceptions:
11
47
  Exclude:
@@ -16,37 +52,38 @@ Lint/UselessAssignment:
16
52
  Exclude:
17
53
  - 'lib/convection/model/template.rb'
18
54
 
19
- # Offense count: 30
55
+ # Offense count: 29
20
56
  Metrics/AbcSize:
21
- Max: 57
57
+ Max: 63
22
58
 
23
- # Offense count: 3
59
+ # Offense count: 34
60
+ # Configuration parameters: CountComments, ExcludedMethods.
61
+ Metrics/BlockLength:
62
+ Max: 140
63
+
64
+ # Offense count: 5
24
65
  # Configuration parameters: CountComments.
25
66
  Metrics/ClassLength:
26
- Exclude:
27
- - 'lib/convection/control/stack.rb'
28
- Max: 304
67
+ Max: 372
29
68
 
30
- # Offense count: 6
69
+ # Offense count: 14
31
70
  Metrics/CyclomaticComplexity:
32
- Max: 13
71
+ Max: 19
33
72
 
34
- # Offense count: 122
35
- # Configuration parameters: AllowHeredoc, AllowURI, URISchemes.
73
+ # Offense count: 366
74
+ # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
36
75
  # URISchemes: http, https
37
76
  Metrics/LineLength:
38
- Max: 151
77
+ Max: 236
39
78
 
40
- # Offense count: 32
79
+ # Offense count: 36
41
80
  # Configuration parameters: CountComments.
42
81
  Metrics/MethodLength:
43
- Exclude:
44
- - 'lib/convection/control/stack.rb'
45
- Max: 37
82
+ Max: 41
46
83
 
47
- # Offense count: 5
84
+ # Offense count: 12
48
85
  Metrics/PerceivedComplexity:
49
- Max: 13
86
+ Max: 20
50
87
 
51
88
  # Offense count: 2
52
89
  Style/AccessorMethodName:
@@ -64,31 +101,113 @@ Style/Alias:
64
101
  - 'lib/convection/model/template/resource_property.rb'
65
102
  - 'lib/convection/model/template/resource_property/aws_ec2_network_interface.rb'
66
103
 
67
- # Offense count: 3
104
+ # Offense count: 41
68
105
  # Configuration parameters: EnforcedStyle, SupportedStyles.
69
106
  # SupportedStyles: nested, compact
70
107
  Style/ClassAndModuleChildren:
71
- Exclude:
72
- - 'lib/convection/model/template.rb'
73
- - 'spec/**/*'
108
+ Enabled: false
74
109
 
75
110
  # Offense count: 4
76
111
  Style/Documentation:
77
112
  Exclude:
78
113
  - 'spec/**/*'
114
+ - 'test/**/*'
79
115
  - 'lib/convection/model/attributes.rb'
80
116
  - 'lib/convection/model/mixin/colorize.rb'
81
117
  - 'lib/convection/model/template/condition.rb'
82
118
 
83
119
  # Offense count: 1
84
120
  # Cop supports --auto-correct.
85
- # Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
86
- # SupportedStyles: consistent, special_for_inner_method_call, special_for_inner_method_call_in_parentheses
87
- Style/FirstParameterIndentation:
121
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
122
+ # SupportedStyles: compact, expanded
123
+ Style/EmptyMethod:
88
124
  Exclude:
89
- - 'lib/convection/model/mixin/taggable.rb'
125
+ - 'lib/convection/model/template/resource_collection.rb'
90
126
 
91
- # Added manually
92
- Style/ConditionalAssignment:
127
+ # Offense count: 233
128
+ # Cop supports --auto-correct.
129
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
130
+ # SupportedStyles: when_needed, always, never
131
+ Style/FrozenStringLiteralComment:
132
+ Enabled: false
133
+
134
+ # Offense count: 3
135
+ # Cop supports --auto-correct.
136
+ Style/MultilineIfModifier:
93
137
  Exclude:
94
- - 'lib/convection/model/template/condition.rb'
138
+ - 'lib/convection/control/stack.rb'
139
+ - 'lib/convection/model/template/resource.rb'
140
+ - 'spec/convection/model/template/resource_collection_spec.rb'
141
+
142
+ # Offense count: 1
143
+ # Cop supports --auto-correct.
144
+ # Configuration parameters: AutoCorrect, EnforcedStyle, SupportedStyles.
145
+ # SupportedStyles: predicate, comparison
146
+ Style/NumericPredicate:
147
+ Exclude:
148
+ - 'spec/**/*'
149
+ - 'lib/convection/control/stack.rb'
150
+
151
+ # Offense count: 29
152
+ # Cop supports --auto-correct.
153
+ # Configuration parameters: PreferredDelimiters.
154
+ Style/PercentLiteralDelimiters:
155
+ Exclude:
156
+ - 'bin/convection'
157
+ - 'convection.gemspec'
158
+ - 'lib/convection/control/stack.rb'
159
+ - 'lib/convection/model/template.rb'
160
+ - 'lib/convection/model/template/resource_property/aws_cloudfront_cachebehavior.rb'
161
+ - 'lib/convection/model/template/resource_property/aws_cloudfront_defaultcachebehavior.rb'
162
+ - 'spec/convection/control/stack_spec.rb'
163
+ - 'spec/convection/dsl/intrinsic_functions_spec.rb'
164
+ - 'spec/convection/model/cloudfile_spec.rb'
165
+ - 'spec/convection/model/template/resource/events_rule_spec.rb'
166
+ - 'spec/convection/model/template/resource/lambdas_spec.rb'
167
+ - 'spec/convection/model/template/resource/permission_spec.rb'
168
+ - 'spec/convection/model/template/resource/vpc_endpoints_spec.rb'
169
+ - 'spec/ec2_client_context.rb'
170
+
171
+ # Offense count: 2
172
+ # Cop supports --auto-correct.
173
+ # Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerSlashes.
174
+ # SupportedStyles: slashes, percent_r, mixed
175
+ Style/RegexpLiteral:
176
+ Exclude:
177
+ - 'convection.gemspec'
178
+
179
+ # Offense count: 17
180
+ # Cop supports --auto-correct.
181
+ # Configuration parameters: ConvertCodeThatCanStartToReturnNil.
182
+ Style/SafeNavigation:
183
+ Exclude:
184
+ - 'lib/convection/control/cloud.rb'
185
+ - 'lib/convection/control/stack.rb'
186
+
187
+ # Offense count: 6
188
+ # Cop supports --auto-correct.
189
+ # Configuration parameters: MinSize, SupportedStyles.
190
+ # SupportedStyles: percent, brackets
191
+ Style/SymbolArray:
192
+ EnforcedStyle: brackets
193
+
194
+ # Offense count: 1
195
+ # Cop supports --auto-correct.
196
+ # Configuration parameters: EnforcedStyle, SupportedStyles, AllowSafeAssignment.
197
+ # SupportedStyles: require_parentheses, require_no_parentheses, require_parentheses_when_complex
198
+ Style/TernaryParentheses:
199
+ Exclude:
200
+ - 'lib/convection/dsl/helpers.rb'
201
+
202
+ # Offense count: 2
203
+ # Cop supports --auto-correct.
204
+ Style/UnneededPercentQ:
205
+ Exclude:
206
+ - 'convection.gemspec'
207
+
208
+ # Offense count: 4
209
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
210
+ # SupportedStyles: snake_case, normalcase, non_integer
211
+ Style/VariableNumber:
212
+ Exclude:
213
+ - 'lib/convection/dsl/intrinsic_functions.rb'
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.3
1
+ 2.3.5
data/Gemfile CHANGED
@@ -7,7 +7,7 @@ group :development do
7
7
  gem 'bundler', '~> 1.7'
8
8
  gem 'rspec'
9
9
  gem 'rake', '~> 10.0'
10
- gem 'rubocop', '~> 0.40.0'
10
+ gem 'rubocop', '~> 0.49.0'
11
11
  gem 'simplecov'
12
12
  gem 'thor-scmversion', '= 1.7.0'
13
13
  gem 'yard'
data/bin/convection CHANGED
@@ -23,6 +23,7 @@ module Convection
23
23
  option :'very-verbose', :type => :boolean, :aliases => '--vv', :desc => 'Show unchanged stacks', default: true
24
24
  option :cloudfiles, :type => :array, :default => %w(Cloudfile)
25
25
  option :delayed_output, :type => :boolean, :desc => 'Delay output until operation completion.', :default => false
26
+ option :retain, :type => :boolean, :desc => 'Retain stack resources, without deleteing.', :default => false
26
27
  def converge(stack = nil)
27
28
  @outputs = []
28
29
  operation('converge', stack)
@@ -62,6 +63,7 @@ module Convection
62
63
  option :'very-verbose', :type => :boolean, :aliases => '--vv', :desc => 'Show unchanged stacks'
63
64
  option :cloudfiles, :type => :array, :default => %w(Cloudfile)
64
65
  option :delayed_output, :type => :boolean, :desc => 'Delay output until operation completion.', :default => false
66
+ option :retain, :type => :boolean, :desc => 'Retain stack resources, without deleteing.', :default => false
65
67
  def diff(stack = nil)
66
68
  @outputs = []
67
69
  operation('diff', stack)
@@ -133,7 +135,11 @@ module Convection
133
135
  cloud_array[:cloud].configure(File.absolute_path(cloud_array[:cloudfile_path], @cwd))
134
136
  cloud = cloud_array[:cloud]
135
137
  region = cloud.cloudfile.region
136
- cloud.send(task_name, stack, stack_group: options[:stack_group], stacks: options[:stacks], exclude_stacks: options[:exclude_stacks]) do |event, errors|
138
+ operation_kwargs = {
139
+ stack_group: options[:stack_group], stacks: options[:stacks],
140
+ exclude_stacks: options[:exclude_stacks], retain: options[:retain]
141
+ }
142
+ cloud.send(task_name, stack, operation_kwargs) do |event, errors|
137
143
  if options[:cloudfiles].length > 1 && options[:delayed_output]
138
144
  output << { event: event, errors: errors }
139
145
  else
@@ -91,7 +91,7 @@ module Convection
91
91
 
92
92
  filter_deck(options, &block).each_value do |stack|
93
93
  block.call(Model::Event.new(:converge, "Stack #{ stack.name }", :info)) if block
94
- stack.apply(&block)
94
+ stack.apply(retain: options[:retain], &block)
95
95
 
96
96
  emit_credential_error_and_exit!(stack, &block) if stack.credential_error?
97
97
  if stack.error?
@@ -142,7 +142,7 @@ module Convection
142
142
  filter_deck(options, &block).each_value do |stack|
143
143
  block.call(Model::Event.new(:compare, "Compare local state of stack #{ stack.name } (#{ stack.cloud_name }) with remote template", :info))
144
144
 
145
- difference = stack.diff
145
+ difference = stack.diff(retain: options[:retain])
146
146
  # Find errors during diff
147
147
  emit_credential_error_and_exit!(stack, &block) if stack.credential_error?
148
148
  if stack.error?
@@ -87,7 +87,6 @@ module Convection
87
87
  # Represents a stack task that is currently in progress.
88
88
  TASK_IN_PROGRESS = 'TASK_IN_PROGRESS'.freeze
89
89
 
90
- # rubocop:disable Metrics/LineLength
91
90
  # @param name [String] the name of the CloudFormation Stack
92
91
  # @param template [Convection::Model::Template] a wrapper of the
93
92
  # CloudFormation template (can be rendered into CF JSON)
@@ -148,7 +147,6 @@ module Convection
148
147
  # clouds use this, for example, to create security groups early
149
148
  # in the dependency tree to avoid the chicken-and-egg problem.
150
149
  @template.execute
151
-
152
150
  rescue Aws::Errors::ServiceError => e
153
151
  @errors << e
154
152
  end
@@ -167,7 +165,6 @@ module Convection
167
165
  rescue Aws::Errors::ServiceError => e
168
166
  @errors << e
169
167
  end
170
- # rubocop:enable Metrics/LineLength
171
168
 
172
169
  def cloud_name
173
170
  return @cloud_name unless @cloud_name.nil?
@@ -281,8 +278,8 @@ module Convection
281
278
  # template (in CloudFormation) and the state of the rendered
282
279
  # template (what *would* be converged).
283
280
  # @see Convection::Model::Template#diff
284
- def diff
285
- @template.diff(@current_template)
281
+ def diff(retain: false)
282
+ @template.diff(@current_template, retain: retain)
286
283
  end
287
284
 
288
285
  # @return [Boolean] whether the Resources section of the rendered
@@ -324,9 +321,9 @@ module Convection
324
321
  #
325
322
  # @param block [Proc] a configuration block to pass any
326
323
  # {Convection::Model::Event}s to.
327
- def apply(&block)
324
+ def apply(retain: false, &block)
328
325
  request_options = @options.clone.tap do |o|
329
- o[:template_body] = to_json
326
+ o[:template_body] = to_json(retain: retain)
330
327
  o[:parameters] = cf_parameters
331
328
  o[:capabilities] = capabilities
332
329
  end
@@ -334,7 +331,7 @@ module Convection
334
331
  # Get the state of existence before creation
335
332
  existing_stack = exist?
336
333
  if existing_stack
337
- if diff.empty? ## No Changes. Just get resources and move on
334
+ if diff(retain: retain).empty? ## No Changes. Just get resources and move on
338
335
  block.call(Model::Event.new(:complete, "Stack #{ name } has no changes", :info)) if block
339
336
  get_status
340
337
  return
@@ -554,7 +551,7 @@ module Convection
554
551
  collection << event
555
552
  end
556
553
 
557
- break if pages == 0
554
+ break if pages.zero?
558
555
  end
559
556
 
560
557
  @last_event_seen = collection.first.event_id unless collection.empty?
@@ -251,7 +251,7 @@ module Convection
251
251
  end
252
252
  end
253
253
 
254
- def render(stack_ = nil)
254
+ def render(stack_ = nil, retain: false)
255
255
  ## Instantiate a new template with the definition block and an other stack
256
256
  return clone(stack_).render unless stack_.nil?
257
257
 
@@ -263,7 +263,12 @@ module Convection
263
263
  'Parameters' => parameters.map(&:render),
264
264
  'Mappings' => mappings.map(&:render),
265
265
  'Conditions' => conditions.map(&:render),
266
- 'Resources' => all_resources.map(&:render),
266
+ 'Resources' => all_resources.map do |resource|
267
+ if retain && resource.deletion_policy.nil?
268
+ resource.deletion_policy('Retain')
269
+ end
270
+ resource.render
271
+ end,
267
272
  'Outputs' => outputs.map(&:render),
268
273
  'Metadata' => metadata.map(&:render)
269
274
  }
@@ -275,12 +280,12 @@ module Convection
275
280
  end
276
281
  end
277
282
 
278
- def diff(other, stack_ = nil)
279
- render(stack_).diff(other).map { |diff| Diff.new(diff[0], *diff[1]) }
283
+ def diff(other, stack_ = nil, retain: false)
284
+ render(stack_, retain: retain).diff(other).map { |diff| Diff.new(diff[0], *diff[1]) }
280
285
  end
281
286
 
282
- def to_json(stack_ = nil, pretty = false)
283
- rendered_stack = render(stack_)
287
+ def to_json(stack_ = nil, pretty = false, retain: false)
288
+ rendered_stack = render(stack_, retain: retain)
284
289
  validate(rendered_stack)
285
290
  return JSON.generate(rendered_stack) unless pretty
286
291
  JSON.pretty_generate(rendered_stack)
@@ -38,13 +38,8 @@ module Convection
38
38
  end
39
39
 
40
40
  def render
41
- rendered_values = []
42
- @function_arguments.each do |function_arg|
43
- if function_arg.respond_to? :render # the argument is another conditional function
44
- rendered_values << function_arg.render
45
- else
46
- rendered_values << function_arg
47
- end
41
+ rendered_values = Array(@function_arguments).map do |function_arg|
42
+ function_arg.respond_to?(:render) ? function_arg.render : function_arg
48
43
  end
49
44
 
50
45
  { CONDITIONAL_FUNCTION_SYNTAX_MAP[@function_name] => rendered_values }
@@ -323,13 +323,13 @@ module Convection
323
323
  @depends_on << (resource.is_a?(Resource) ? resource.name : resource)
324
324
  end
325
325
 
326
- # rubocop:disable Style/TrivialAccessors
327
326
  # We don't want to use an accessor (e.g. deletion_policy=) because
328
327
  # this is a DSL method
329
- def deletion_policy(deletion_policy)
328
+ def deletion_policy(deletion_policy = :unset_deletion_policy)
329
+ return @deletion_policy if deletion_policy == :unset_deletion_policy
330
+
330
331
  @deletion_policy = deletion_policy
331
332
  end
332
- # rubocop:enable Style/TrivialAccessors
333
333
 
334
334
  def reference
335
335
  {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: convection
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.2
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Manero
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-31 00:00:00.000000000 Z
11
+ date: 2017-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk