covalence 0.9.2 → 0.9.8

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: 3edbe8b6ef3a74f89e5c9e71fe0f4bab0fb20262c382b0f77e18d1e29c95368c
4
- data.tar.gz: e8f77050f4854b994b27b961386f4bf5e010b65e485e91a427bec14c6fd7abea
3
+ metadata.gz: 1e903fa8c44b45782f8ed35bcf35cc2f6b3097987a3b591df8a4d64fee2668cb
4
+ data.tar.gz: a73c98132b3bfc7ed501af2f8394c2ed91e5fb9e0dd58ee15f10521cd77f702c
5
5
  SHA512:
6
- metadata.gz: 56e51eb5b4ffab694f0f21a7f5d5a2335b7353f7438809bea1fb7a064210bd506a4a891b5096ebcb9e7ea23ea415312aae7664c861bb46c8bf6ce6a4962bc69b
7
- data.tar.gz: f224f0d6d40a9faf6183650ced547feaf6b3770586ab2a9a1b04b274710115c59155e89cdbb2e882a524a08707efb2e2f6b1020c60f4de7dcc28f87d9ab3db59
6
+ metadata.gz: f76aa5ca172ade473803119a386f7e07779b9a69d6e5d5ae1cfbeb4410d327b0e0b4af07b6569c51bd4c125ec93aa0f58bb2650afe0f634fc300a7eff0fc8d8e
7
+ data.tar.gz: 16efeb2013c66258bfa0c15c5bffb9a06fdc764b8ea41afb06f5b0c6e7f58c7ee35a1d166f1eefb1d86969676997f0cd78acc6a255c40361cd00ce1c8f355049
@@ -1,3 +1,32 @@
1
+ ## 0.9.8 (Jun 10, 2020)
2
+ IMPROVEMENTS:
3
+ - Updated all gems to the latest in the Gemfile.lock.
4
+
5
+ BACKWARDS INCOMPATIBILITIES:
6
+ - Issue [#90](https://github.com/unifio/covalence/issues/90) Removed prefixout dependency from covalence. Directory prefix will no longer be displayed in output. Directory is already output prior to execution.
7
+
8
+ FIXES:
9
+ - [activesupport](https://github.com/advisories/GHSA-2p68-f74v-9wc6) upgraded activesupport to version 5.2.4.3 or later.
10
+ - [nokogiri](https://github.com/advisories/GHSA-7553-jr98-vx47) Upgrade nokogiri to version 1.10.8 or later.
11
+
12
+ ## 0.9.7 (Sep 14, 2019)
13
+
14
+ IMPROVEMENTS:
15
+ - Issue [#88](https://github.com/unifio/covalence/issues/88) Add input processing to packer stacks. Allows for shell interpolation processing on inputs for packer stacks.
16
+ - Can use the shell interpolation in the template to generate AWS assume role temporary keys to populate template. This allows for role assumption since role assumption is not supported from `~/.aws/config` attributes.
17
+
18
+ ## 0.9.6 (Sep 9, 2019)
19
+
20
+ IMPROVEMENTS:
21
+ - Issue [#86](https://github.com/unifio/covalence/issues/86) Add ability to export stacks to a stack_exports directory.
22
+
23
+
24
+ ## 0.9.4 (Aug 30, 2019)
25
+
26
+ FIXES:
27
+ - Issue [#82](https://github.com/unifio/covalence/issues/82) Introduced in v0.9.2 that prevented terraform cli from being cappable of downloading updated plugins/providers.
28
+
29
+
1
30
  ## 0.9.2 (Aug 11, 2019)
2
31
 
3
32
  BACKWARDS INCOMPATIBILITIES:
data/README.md CHANGED
@@ -106,7 +106,6 @@ $ bin/covalence spec
106
106
  ```
107
107
 
108
108
  To run the Rspec test locally without container, you will need to install the following:
109
- * prefixout -- https://github.com/WhistleLabs/prefixout
110
109
  * sops -- https://github.com/mozilla/sops
111
110
 
112
111
  ### UAT
@@ -502,7 +501,6 @@ You will probably need the following packages installed locally
502
501
  - Terraform
503
502
  - Packer
504
503
  - Sops
505
- - [prefixout](https://github.com/unifio/prefixout/releases)
506
504
 
507
505
  Execute the following to build the gem:
508
506
 
@@ -17,6 +17,7 @@ module Covalence
17
17
  # TODO: could use better naming
18
18
  PACKER = File.absolute_path(File.join(WORKSPACE, (ENV['COVALENCE_PACKER_DIR'] || '.')))
19
19
  TERRAFORM = File.absolute_path(File.join(WORKSPACE, (ENV['COVALENCE_TERRAFORM_DIR'] || '.')))
20
+ STACK_EXPORT = File.absolute_path(File.join(WORKSPACE, (ENV['COVALENCE_STACK_EXPORT_DIR'] || './stack-exports')))
20
21
  TEST_ENVS = (ENV['COVALENCE_TEST_ENVS'] || "").split(',')
21
22
  # Reserved namespace including default ci and spec
22
23
  RESERVED_NS = [(ENV['COVALENCE_RESERVED_NAMESPACE'] || "").split(','), 'ci', 'spec', 'sops']
@@ -24,6 +25,7 @@ module Covalence
24
25
  TERRAFORM_CMD = ENV['TERRAFORM_CMD'] || "terraform"
25
26
  TERRAFORM_VERSION = ENV['TERRAFORM_VERSION'] || `#{TERRAFORM_CMD} version`.split("\n", 2)[0].gsub('Terraform v','')
26
27
  TERRAFORM_PLUGIN_CACHE = File.absolute_path("#{ENV['TF_PLUGIN_CACHE_DIR']}/linux_amd64" || "#{ENV['HOME']}/.terraform.d/plugin-cache/linus_amd64")
28
+ TERRAFORM_GET_PLUGINS = (ENV['COVALENCE_TERRAFORM_GET_PLUGINS'] || "true") =~ (/(true|t|yes|y|1)$/i)
27
29
 
28
30
  PACKER_CMD = ENV['PACKER_CMD'] || "packer"
29
31
 
@@ -77,9 +77,7 @@ module Covalence
77
77
  # so when the parent dies, child will know to terminate itself.
78
78
  Signal.trap("INT") { logger.info "Trapped Ctrl-c. Disable parent process from exiting, orphaning the child fork below which may or may not work" }
79
79
  wait_thread = nil
80
- prefix=path.gsub(/^\/workspace*/,'')
81
- whole_cmd=['prefixout', '-p', "#{prefix} ", '--'].concat(run_cmd.split)
82
- Open3.popen3(env, *whole_cmd, :chdir=>workdir) do |stdin, stdout, stderr, wait_thr|
80
+ Open3.popen3(env, *run_cmd, :chdir=>workdir) do |stdin, stdout, stderr, wait_thr|
83
81
  mappings = { stdin_io => stdin, stdout => stdout_io, stderr => stderr_io }
84
82
  wait_thread = wait_thr
85
83
 
@@ -48,7 +48,7 @@ module Covalence
48
48
  if ENV['TF_PLUGIN_LOCAL'] == 'true'
49
49
  cmd = [Covalence::TERRAFORM_CMD, "init", "-get-plugins=false", "-get=false", "-input=false", "-plugin-dir=#{Covalence::TERRAFORM_PLUGIN_CACHE}"]
50
50
  else
51
- cmd = [Covalence::TERRAFORM_CMD, "init", "-get-plugins=false", "-get=false", "-input=false"]
51
+ cmd = [Covalence::TERRAFORM_CMD, "init", "-get-plugins=#{Covalence::TERRAFORM_GET_PLUGINS ? 'true' : 'false'}", "-get=false", "-input=false"]
52
52
  end
53
53
 
54
54
  output = PopenWrapper.run(
@@ -28,6 +28,10 @@ module Covalence
28
28
  "#{name} = #{parse_input(value())}"
29
29
  end
30
30
 
31
+ def to_command_hash_elements
32
+ return name, parse_input(value()).delete_prefix('"').delete_suffix('"')
33
+ end
34
+
31
35
  private
32
36
 
33
37
  def get_value(input)
@@ -51,19 +51,19 @@ module Covalence
51
51
  File.open("#{path}/covalence-inputs.tfvars",'w') {|f| f.write(config)}
52
52
  elsif type == "packer"
53
53
  config = Hash.new
54
- inputs.each do |name, input|
55
- config[name] = input.value
54
+ inputs.values.map(&:to_command_hash_elements).each do |name, input|
55
+ config["#{name}"] = input
56
56
  end
57
57
  config_json = JSON.generate(config)
58
- logger.info "\nStack inputs:\n\n#{config_json}"
59
- File.open('covalence-inputs.json','w') {|f| f.write(config_json)}
58
+ logger.info "path: #{path} module_path: #{module_path}\nStack inputs:\n\n#{config_json}"
59
+ File.open("#{path}/covalence-inputs.json",'w') {|f| f.write(config_json)}
60
60
  end
61
61
  end
62
62
 
63
- def materialize_state_inputs(store: state_stores.first)
63
+ def materialize_state_inputs(store: state_stores.first, path: '.')
64
64
  config = store.get_config
65
65
  logger.info "\nState store configuration:\n\n#{config}"
66
- File.open('covalence-state.tf','w') {|f| f.write(config)}
66
+ File.open("#{path}/covalence-state.tf",'w') {|f| f.write(config)}
67
67
  end
68
68
 
69
69
  def logger
@@ -62,6 +62,14 @@ module Covalence
62
62
  end
63
63
  end
64
64
 
65
+ # :reek:TooManyStatements
66
+ def packer_stack_export()
67
+ packer_stack_export_init(File.expand_path(File.join(Covalence::STACK_EXPORT,'packer',stack.full_name))).each do |stackdir|
68
+ populate_workspace(stackdir)
69
+ stack.materialize_cmd_inputs(stackdir)
70
+ logger.info "Exported to #{stackdir}:"
71
+ end
72
+ end
65
73
  private
66
74
  attr_reader :template_path, :stack
67
75
 
@@ -97,6 +105,23 @@ module Covalence
97
105
  args.flatten.compact.reject(&:empty?).map(&:strip)
98
106
  end
99
107
 
108
+ # :reek:BooleanParameter
109
+ def packer_stack_export_init(stackdir, dry_run: false, verbose: true)
110
+ if(File.exist?(stackdir))
111
+ logger.info "Deleting before export: #{stackdir}"
112
+ FileUtils.rm_rf(stackdir, {
113
+ noop: dry_run,
114
+ verbose: verbose,
115
+ secure: true,
116
+ })
117
+ end
118
+ logger.info "Creating stack directory: #{stackdir}"
119
+ FileUtils.mkdir_p(stackdir, {
120
+ noop: dry_run,
121
+ verbose: verbose,
122
+ })
123
+ end
124
+
100
125
  def logger
101
126
  Covalence::LOGGER
102
127
  end
@@ -44,6 +44,18 @@ module Covalence
44
44
  end
45
45
  end
46
46
 
47
+ # :reek:TooManyStatements
48
+ def stack_export
49
+ stack_export_init(File.expand_path(File.join(Covalence::STACK_EXPORT,'terraform',stack.full_name))).each do |stackdir|
50
+ populate_workspace(stackdir)
51
+ stack.materialize_state_inputs(path: stackdir)
52
+ TerraformCli.terraform_get(path=@path, workdir=stackdir)
53
+ TerraformCli.terraform_init(path: @path, workdir: stackdir)
54
+ stack.materialize_cmd_inputs(stackdir)
55
+ logger.info "Exported to #{stackdir}:"
56
+ end
57
+ end
58
+
47
59
  # :reek:TooManyStatements
48
60
  def stack_verify(tmpdir)
49
61
  return false if !TerraformCli.terraform_check_style(@path)
@@ -229,6 +241,23 @@ module Covalence
229
241
  end
230
242
  end
231
243
 
244
+ # :reek:BooleanParameter
245
+ def stack_export_init(stackdir, dry_run: false, verbose: true)
246
+ if(File.exist?(stackdir))
247
+ logger.info "Deleting before export: #{stackdir}"
248
+ FileUtils.rm_rf(stackdir, {
249
+ noop: dry_run,
250
+ verbose: verbose,
251
+ secure: true,
252
+ })
253
+ end
254
+ logger.info "Creating stack directory: #{stackdir}"
255
+ FileUtils.mkdir_p(stackdir, {
256
+ noop: dry_run,
257
+ verbose: verbose,
258
+ })
259
+ end
260
+
232
261
  def logger
233
262
  Covalence::LOGGER
234
263
  end
@@ -126,6 +126,12 @@ module Covalence
126
126
  custom_opts = Slop.parse(get_runtime_args, { suppress_errors: true, banner: false })
127
127
  packer_tasks.context_validate(target_args, custom_opts.args)
128
128
  end
129
+
130
+ desc "Export the #{stack_name} stack of the #{environment_name} environment to #{Covalence::STACK_EXPORT}/packer"
131
+ task generate_rake_taskname(environment_name, stack_name, "packer_stack_export") do
132
+ packer_tasks.packer_stack_export()
133
+ end
134
+
129
135
  end
130
136
 
131
137
  # :reek:TooManyStatements
@@ -164,6 +170,12 @@ module Covalence
164
170
  task generate_rake_taskname(environment_name, stack_name, "shell") do
165
171
  tf_tasks.stack_shell
166
172
  end
173
+
174
+ desc "Export the #{stack_name} stack of the #{environment_name} environment to #{Covalence::STACK_EXPORT}/terraform"
175
+ task generate_rake_taskname(environment_name, stack_name, "stack_export") do
176
+ tf_tasks.stack_export
177
+ end
178
+
167
179
  end
168
180
 
169
181
  # :reek:TooManyStatements
@@ -1,3 +1,3 @@
1
1
  module Covalence
2
- VERSION = "0.9.2"
2
+ VERSION = "0.9.8"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: covalence
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Unif.io
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-16 00:00:00.000000000 Z
11
+ date: 2020-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: deep_merge