simplygenius-atmos 0.11.2 → 0.11.3
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
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 04d15a018baaae4374130fb1128992a038334e7f15669f2444b76b4e235d1175
|
4
|
+
data.tar.gz: 6ef9631e9148dbee317857276ade4be8ce832dbe4321521a03f048067cd4b8b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7c08a8603f993acc6d7eae4e60fdda61620cfe57f8bb1317bb7cb8cf84ac2eefbe0b63b59629f45f168d548b694e9f94e4f034628de8f822ffc824114d6318d0
|
7
|
+
data.tar.gz: e926bfa00c22e54cafcabd80f0174eb0178bab25a1cbcfb8632aea1d5f607ba0300dbf59d082d462453a7b7923cb066deb9e49760c5ef65e37d68f16c03010d6
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
0.11.3 (11/12/2019)
|
2
|
+
-------------------
|
3
|
+
|
4
|
+
* add a compat mode for running with terraform 0.11 [30052a1](https://github.com/simplygenius/atmos/commit/30052a1)
|
5
|
+
* handle deleting a secret that doesn't exist [224c926](https://github.com/simplygenius/atmos/commit/224c926)
|
6
|
+
* update rubyzip to avoid vulnerability [d46d817](https://github.com/simplygenius/atmos/commit/d46d817)
|
7
|
+
|
8
|
+
|
1
9
|
0.11.2 (10/18/2019)
|
2
10
|
-------------------
|
3
11
|
|
@@ -7,9 +7,7 @@ module SimplyGenius
|
|
7
7
|
|
8
8
|
class Secret < BaseCommand
|
9
9
|
|
10
|
-
|
11
|
-
"Manages application secrets"
|
12
|
-
end
|
10
|
+
banner "Manages application secrets"
|
13
11
|
|
14
12
|
subcommand "get", "Gets the secret value" do
|
15
13
|
|
@@ -80,8 +78,12 @@ module SimplyGenius
|
|
80
78
|
Atmos.config.provider.auth_manager.authenticate(ENV) do |auth_env|
|
81
79
|
ClimateControl.modify(auth_env) do
|
82
80
|
value = Atmos.config.provider.secret_manager.get(key)
|
83
|
-
|
84
|
-
|
81
|
+
if value
|
82
|
+
Atmos.config.provider.secret_manager.delete(key)
|
83
|
+
logger.info "Deleted secret: #{key}=#{value}"
|
84
|
+
else
|
85
|
+
logger.warn "Key does not exist: #{key}"
|
86
|
+
end
|
85
87
|
end
|
86
88
|
end
|
87
89
|
|
@@ -23,6 +23,7 @@ module SimplyGenius
|
|
23
23
|
if @recipes.blank?
|
24
24
|
logger.warn("Check your configuration, there are no recipes in '#{recipe_config_path}'")
|
25
25
|
end
|
26
|
+
@compat11 = Atmos.config['atmos.terraform.compat11'].to_s == "true"
|
26
27
|
end
|
27
28
|
|
28
29
|
def run(*terraform_args, skip_backend: false, skip_secrets: false, get_modules: false, output_io: nil)
|
@@ -172,10 +173,19 @@ module SimplyGenius
|
|
172
173
|
end
|
173
174
|
end
|
174
175
|
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
176
|
+
def homogenize_encode(v)
|
177
|
+
case v
|
178
|
+
when nil
|
179
|
+
@compat11 ? "" : v
|
180
|
+
else
|
181
|
+
v
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
# terraform requires all values within a map to have the same type, so
|
186
|
+
# flatten the map - nested maps get expanded into the top level one, with
|
187
|
+
# their keys being appended with underscores, and lists get joined with
|
188
|
+
# "," so we end up with a single hash with homogenous types
|
179
189
|
#
|
180
190
|
def homogenize_for_terraform(obj, prefix="")
|
181
191
|
if obj.is_a? Hash
|
@@ -185,7 +195,7 @@ module SimplyGenius
|
|
185
195
|
if ho.is_a? Hash
|
186
196
|
result = result.merge(ho)
|
187
197
|
else
|
188
|
-
result["#{prefix}#{k}"] = ho
|
198
|
+
result["#{prefix}#{k}"] = homogenize_encode(ho)
|
189
199
|
end
|
190
200
|
end
|
191
201
|
return result
|
@@ -194,15 +204,41 @@ module SimplyGenius
|
|
194
204
|
obj.each do |o|
|
195
205
|
ho = homogenize_for_terraform(o, prefix)
|
196
206
|
if ho.is_a? Hash
|
197
|
-
result << ho.collect {|k, v| "#{k}=#{v}"}.join(";")
|
207
|
+
result << ho.collect {|k, v| "#{k}=#{homogenize_encode(v)}"}.join(";")
|
198
208
|
else
|
199
|
-
result << ho
|
209
|
+
result << homogenize_encode(ho)
|
200
210
|
end
|
201
211
|
end
|
202
212
|
return result.join(",")
|
203
213
|
else
|
204
|
-
return obj
|
214
|
+
return homogenize_encode(obj)
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
def encode_tf_env_value(v)
|
219
|
+
case v
|
220
|
+
when nil
|
221
|
+
@compat11 ? "" : JSON.generate(v)
|
222
|
+
when Numeric, String, TrueClass, FalseClass
|
223
|
+
v.to_s
|
224
|
+
when Hash
|
225
|
+
if @compat11
|
226
|
+
hcl_hash =v.collect {|k, v| %Q("#{k.to_s}"="#{encode_tf_env_value(v)}") }.join(",")
|
227
|
+
"{#{hcl_hash}}"
|
228
|
+
else
|
229
|
+
JSON.generate(v)
|
230
|
+
end
|
231
|
+
else
|
232
|
+
JSON.generate(v)
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
def encode_tf_env(hash)
|
237
|
+
result = {}
|
238
|
+
hash.each do |k, v|
|
239
|
+
result["TF_VAR_#{k}"] = encode_tf_env_value(v)
|
205
240
|
end
|
241
|
+
return result
|
206
242
|
end
|
207
243
|
|
208
244
|
def tf_recipes_dir
|
@@ -221,34 +257,30 @@ module SimplyGenius
|
|
221
257
|
# ENV, so kinda clunk to have to do both CC and pass the env in
|
222
258
|
ClimateControl.modify(@process_env) do
|
223
259
|
secrets = Atmos.config.provider.secret_manager.to_h
|
224
|
-
env_secrets =
|
260
|
+
env_secrets = encode_tf_env(secrets)
|
225
261
|
return env_secrets
|
226
262
|
end
|
227
263
|
end
|
228
264
|
|
265
|
+
# TODO: Add ability to declare variables as well as set them. May need to
|
266
|
+
# inspect existing tf to find all declared vars so we don't double declare
|
229
267
|
def atmos_env
|
230
268
|
# A var value in the env is ignored if a variable declaration doesn't exist for it in a tf file. Thus,
|
231
269
|
# as a convenience to allow everything from atmos to be referenceable, we put everything from the atmos_config
|
232
270
|
# in a homogenized hash named atmos_config which is declared by the atmos scaffolding. For variables which are
|
233
|
-
# declared, we also merge in atmos config with only the values homogenized (vs the entire map) so that hash
|
271
|
+
# declared, we also merge in atmos config with only the hash values homogenized (vs the entire map) so that hash
|
234
272
|
# variables if declared in terraform can be managed from yml, set here and accessed from terraform
|
235
273
|
#
|
236
274
|
homogenized_config = homogenize_for_terraform(Atmos.config.to_h)
|
275
|
+
homogenized_values = Hash[Atmos.config.to_h.collect {|k, v| [k, v.is_a?(Hash) ? homogenize_for_terraform(v) : v]}]
|
237
276
|
var_hash = {
|
238
277
|
all_env_names: Atmos.config.all_env_names,
|
239
278
|
account_ids: Atmos.config.account_hash,
|
240
279
|
atmos_config: homogenized_config
|
241
280
|
}
|
242
|
-
var_hash = var_hash.merge(
|
243
|
-
|
244
|
-
|
245
|
-
when Numeric, String, TrueClass, FalseClass
|
246
|
-
v.to_s
|
247
|
-
else
|
248
|
-
JSON.generate(v)
|
249
|
-
end
|
250
|
-
["TF_VAR_#{k}", encoded_val]
|
251
|
-
end]
|
281
|
+
var_hash = var_hash.merge(homogenized_values)
|
282
|
+
|
283
|
+
env_hash = encode_tf_env(var_hash)
|
252
284
|
|
253
285
|
# write out a file so users have some visibility into vars passed in -
|
254
286
|
# mostly useful for debugging
|
@@ -269,8 +301,9 @@ module SimplyGenius
|
|
269
301
|
end
|
270
302
|
|
271
303
|
def link_support_dirs
|
272
|
-
['modules', 'templates'].each do |subdir|
|
273
|
-
|
304
|
+
['modules', 'templates', '.terraform-version'].each do |subdir|
|
305
|
+
source = File.join(Atmos.config.root_dir, subdir)
|
306
|
+
ln_sf(source, Atmos.config.tf_working_dir) if File.exist?(source)
|
274
307
|
end
|
275
308
|
end
|
276
309
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simplygenius-atmos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Conway
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-11-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -282,14 +282,14 @@ dependencies:
|
|
282
282
|
requirements:
|
283
283
|
- - "~>"
|
284
284
|
- !ruby/object:Gem::Version
|
285
|
-
version: 1.
|
285
|
+
version: 1.3.0
|
286
286
|
type: :runtime
|
287
287
|
prerelease: false
|
288
288
|
version_requirements: !ruby/object:Gem::Requirement
|
289
289
|
requirements:
|
290
290
|
- - "~>"
|
291
291
|
- !ruby/object:Gem::Version
|
292
|
-
version: 1.
|
292
|
+
version: 1.3.0
|
293
293
|
- !ruby/object:Gem::Dependency
|
294
294
|
name: hashie
|
295
295
|
requirement: !ruby/object:Gem::Requirement
|