convection 2.2.6 → 2.2.7
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6bddc9ee70240274d2d53091ce1a716994cb62c5
|
4
|
+
data.tar.gz: 7bfd13c612923a219054c045b689e6dbfb29a4e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fe5142078018772cb99ccca5871f84426c6b01339ded1ce404b169c742b6d082ac2b6a8e55c46915ce15527e5357d3d9a5268e918711221c1cb91b0768ac38e6
|
7
|
+
data.tar.gz: cb4cbaa7a1c2fb71fece9ab855df289df6b88ba9cace85556852202515b23e3b5b5f08f7e9dd14442ef9e7f38c52ce8db9868c935d7fc21eb8c0d2b3fb50875e
|
data/.rubocop.yml
CHANGED
@@ -3,12 +3,12 @@ inherit_from: .rubocop_todo.yml
|
|
3
3
|
AllCops:
|
4
4
|
Include:
|
5
5
|
- lib/**/*
|
6
|
-
- bin/**/*
|
7
6
|
- Gemfile
|
8
7
|
- Rakefile
|
9
8
|
- Thorfile
|
10
9
|
Exclude:
|
11
10
|
- example/**/*
|
11
|
+
- bin/convection
|
12
12
|
- 'lib/convection/model/template/mapping.rb' # Something is causing this file to fail
|
13
13
|
|
14
14
|
Encoding:
|
data/.rubocop_todo.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on 2017-
|
3
|
+
# on 2017-12-12 19:16:51 +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
|
@@ -20,12 +20,6 @@ Layout/EmptyLineAfterMagicComment:
|
|
20
20
|
Exclude:
|
21
21
|
- 'convection.gemspec'
|
22
22
|
|
23
|
-
# Offense count: 1
|
24
|
-
# Cop supports --auto-correct.
|
25
|
-
Layout/EmptyLinesAroundExceptionHandlingKeywords:
|
26
|
-
Exclude:
|
27
|
-
- 'lib/convection/control/stack.rb'
|
28
|
-
|
29
23
|
# Offense count: 1
|
30
24
|
# Cop supports --auto-correct.
|
31
25
|
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
@@ -52,38 +46,36 @@ Lint/UselessAssignment:
|
|
52
46
|
Exclude:
|
53
47
|
- 'lib/convection/model/template.rb'
|
54
48
|
|
55
|
-
# Offense count:
|
49
|
+
# Offense count: 33
|
56
50
|
Metrics/AbcSize:
|
57
|
-
Max:
|
51
|
+
Max: 81
|
58
52
|
|
59
|
-
# Offense count:
|
53
|
+
# Offense count: 35
|
60
54
|
# Configuration parameters: CountComments, ExcludedMethods.
|
61
55
|
Metrics/BlockLength:
|
62
|
-
|
63
|
-
- no_commands
|
64
|
-
Max: 140
|
56
|
+
Max: 162
|
65
57
|
|
66
58
|
# Offense count: 5
|
67
59
|
# Configuration parameters: CountComments.
|
68
60
|
Metrics/ClassLength:
|
69
61
|
Max: 372
|
70
62
|
|
71
|
-
# Offense count:
|
63
|
+
# Offense count: 17
|
72
64
|
Metrics/CyclomaticComplexity:
|
73
65
|
Max: 19
|
74
66
|
|
75
|
-
# Offense count:
|
67
|
+
# Offense count: 398
|
76
68
|
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
77
69
|
# URISchemes: http, https
|
78
70
|
Metrics/LineLength:
|
79
71
|
Max: 236
|
80
72
|
|
81
|
-
# Offense count:
|
73
|
+
# Offense count: 39
|
82
74
|
# Configuration parameters: CountComments.
|
83
75
|
Metrics/MethodLength:
|
84
|
-
Max:
|
76
|
+
Max: 58
|
85
77
|
|
86
|
-
# Offense count:
|
78
|
+
# Offense count: 15
|
87
79
|
Metrics/PerceivedComplexity:
|
88
80
|
Max: 20
|
89
81
|
|
@@ -126,7 +118,7 @@ Style/EmptyMethod:
|
|
126
118
|
Exclude:
|
127
119
|
- 'lib/convection/model/template/resource_collection.rb'
|
128
120
|
|
129
|
-
# Offense count:
|
121
|
+
# Offense count: 235
|
130
122
|
# Cop supports --auto-correct.
|
131
123
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
132
124
|
# SupportedStyles: when_needed, always, never
|
@@ -141,16 +133,7 @@ Style/MultilineIfModifier:
|
|
141
133
|
- 'lib/convection/model/template/resource.rb'
|
142
134
|
- 'spec/convection/model/template/resource_collection_spec.rb'
|
143
135
|
|
144
|
-
# Offense count:
|
145
|
-
# Cop supports --auto-correct.
|
146
|
-
# Configuration parameters: AutoCorrect, EnforcedStyle, SupportedStyles.
|
147
|
-
# SupportedStyles: predicate, comparison
|
148
|
-
Style/NumericPredicate:
|
149
|
-
Exclude:
|
150
|
-
- 'spec/**/*'
|
151
|
-
- 'lib/convection/control/stack.rb'
|
152
|
-
|
153
|
-
# Offense count: 29
|
136
|
+
# Offense count: 30
|
154
137
|
# Cop supports --auto-correct.
|
155
138
|
# Configuration parameters: PreferredDelimiters.
|
156
139
|
Style/PercentLiteralDelimiters:
|
data/bin/convection
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'thor'
|
3
3
|
require_relative '../lib/convection/control/cloud'
|
4
|
+
require 'fileutils'
|
4
5
|
require 'thread'
|
5
6
|
require 'yaml'
|
6
7
|
|
@@ -154,6 +155,87 @@ module Convection
|
|
154
155
|
template.resources.each(&method(:import_resources))
|
155
156
|
end
|
156
157
|
|
158
|
+
desc 'terraform-import-lambda-permissions', 'Import state for a lambda permission resource into terraform management'
|
159
|
+
option :cloudfile, desc: 'The cloudfile to load', default: 'Cloudfile'
|
160
|
+
option :module_path, desc: 'The module path prefix for terraform', default: DEFAULT_MODULE_PATH
|
161
|
+
option :state, desc: 'The source terraform state file', required: true
|
162
|
+
option :state_out, desc: 'The destination state file (default: --state)'
|
163
|
+
def terraform_import_lambda_permissions(stack_name)
|
164
|
+
# Lazy load this since we only want this in the terraform subcommand.
|
165
|
+
require 'active_support/core_ext/string/inflections'
|
166
|
+
|
167
|
+
state = File.expand_path(options[:state])
|
168
|
+
state_out = File.expand_path(options[:state_out]) if options[:state_out]
|
169
|
+
unless state_out
|
170
|
+
state_out = state
|
171
|
+
FileUtils.cp(state, "#{state}.#{Time.now.to_i}.backup")
|
172
|
+
end
|
173
|
+
|
174
|
+
tfstate = JSON.parse(File.read(options[:state]))
|
175
|
+
module_path = options[:module_path].split('.')
|
176
|
+
# If the user typed "module" as the prefix use "root" since that is what is written to state
|
177
|
+
# (not the module.NAME target format used for plans/applies).
|
178
|
+
module_path[0] = 'root' if module_path[0] == 'module'
|
179
|
+
module_state = tfstate.fetch('modules').find { |mod| mod['path'] == module_path }
|
180
|
+
unless module_state
|
181
|
+
warn "No module found with path #{module_path} defined in #{options[:state]}."
|
182
|
+
exit 1
|
183
|
+
end
|
184
|
+
tf_resources = module_state.fetch('resources')
|
185
|
+
|
186
|
+
init_cloud
|
187
|
+
stack = @cloud.stacks.fetch(stack_name)
|
188
|
+
stack.template.all_resources.each do |name, resource|
|
189
|
+
# Skip over this convection Resource unless it maps to a function permission.
|
190
|
+
next unless resource.type == 'AWS::Lambda::Permission'
|
191
|
+
|
192
|
+
# Get the function and permission resource summaries.
|
193
|
+
permission_resource_summary = stack.resources[name]
|
194
|
+
function_resource_summary = stack.resources[name.sub(/Permission.*$/, 'Lambda')]
|
195
|
+
unless permission_resource_summary && function_resource_summary
|
196
|
+
warn 'ERROR: Either the lambda permission or function you were trying to import have not been created in cloudformation. These resources are expected to exist in the same template.'
|
197
|
+
exit 1
|
198
|
+
end
|
199
|
+
|
200
|
+
# Skip creation of state if state for this permission already exists.
|
201
|
+
if tf_resources["aws_lambda_permission.#{permission_resource_summary.logical_resource_id.underscore}"]
|
202
|
+
warn "WARNING: Skipping resource that was found in state: aws_lambda_permission.#{permission_resource_summary.logical_resource_id.underscore}"
|
203
|
+
next
|
204
|
+
end
|
205
|
+
|
206
|
+
function_name = resource.function_name.is_a?(Hash) ? function_resource_summary.physical_resource_id : resource.function_name
|
207
|
+
source_logical_name = resource.source_arn.fetch('Fn::GetAtt').first
|
208
|
+
source_resource_summary = stack.resources[source_logical_name] && stack.resources[source_logical_name].physical_resource_id
|
209
|
+
source_arn = resource.source_arn.is_a?(Hash) ? source_resource_summary : resource.source_arn
|
210
|
+
unless source_arn
|
211
|
+
warn "Unable to determine source arn from #{resource.source_arn}"
|
212
|
+
end
|
213
|
+
|
214
|
+
tf_resources["aws_lambda_permission.#{permission_resource_summary.logical_resource_id.underscore}"] = {
|
215
|
+
type: 'aws_lambda_permission',
|
216
|
+
depends_on: [],
|
217
|
+
primary: {
|
218
|
+
id: permission_resource_summary.physical_resource_id,
|
219
|
+
attributes: {
|
220
|
+
action: resource.action,
|
221
|
+
function_name: function_name,
|
222
|
+
id: permission_resource_summary.physical_resource_id,
|
223
|
+
principal: resource.principal,
|
224
|
+
qualifer: resource.qualifer,
|
225
|
+
source_arn: source_arn,
|
226
|
+
statement_id: permission_resource_summary.physical_resource_id
|
227
|
+
}.reject { |_key, value| value.nil? },
|
228
|
+
meta: {},
|
229
|
+
tainted: false
|
230
|
+
},
|
231
|
+
deposed: [],
|
232
|
+
provider: ''
|
233
|
+
}
|
234
|
+
end
|
235
|
+
|
236
|
+
create_file state_out, JSON.pretty_generate(tfstate)
|
237
|
+
end
|
238
|
+
|
157
239
|
# rubocop:enable Style/AsciiComments
|
158
240
|
|
159
241
|
no_commands do
|
@@ -162,14 +244,21 @@ module Convection
|
|
162
244
|
private
|
163
245
|
|
164
246
|
def import_resources(_resource_name, resource)
|
247
|
+
empty_directory options[:output_directory] if resource.respond_to?(:to_hcl_json) || resource.respond_to?(:additional_hcl_files)
|
165
248
|
if resource.respond_to?(:to_hcl_json)
|
166
|
-
|
167
|
-
destination = File.join(options[:output_directory], "#{resource.name.downcase}.tf.json")
|
249
|
+
destination = File.join(options[:output_directory], "#{resource.name.underscore}.tf.json")
|
168
250
|
create_file destination, resource.to_hcl_json, force: options[:overwrite], skip: options[:skip_existing]
|
169
251
|
else
|
170
252
|
say "# Unable to generate terraform configuration for #{resource.class}. Define #{resource.class}#to_hcl_json to do so.", :yellow
|
171
253
|
end
|
172
254
|
|
255
|
+
if resource.respond_to?(:additional_hcl_files)
|
256
|
+
resource.additional_hcl_files.each do |file, content|
|
257
|
+
destination = File.join(options[:output_directory], file)
|
258
|
+
create_file destination, content, force: options[:overwrite], skip: options[:skip_existing]
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
173
262
|
if resource.respond_to?(:terraform_import_commands)
|
174
263
|
resource.terraform_import_commands(module_path: options[:module_path]).each do |line|
|
175
264
|
comment = line.start_with?('#')
|
@@ -24,6 +24,8 @@ module Convection
|
|
24
24
|
property :network_interfaces, 'NetworkInterfaces', :type => :list
|
25
25
|
property :block_devices, 'BlockDeviceMappings', :type => :list
|
26
26
|
property :volumes, 'Volumes', :type => :list
|
27
|
+
property :ebs_optimized, 'EbsOptimized'
|
28
|
+
property :monitoring, 'Monitoring'
|
27
29
|
|
28
30
|
# Append a network interface to network_interfaces
|
29
31
|
def network_interface(&block)
|
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.2.
|
4
|
+
version: 2.2.7
|
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-12-
|
11
|
+
date: 2017-12-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|