tfwrapper 0.6.0 → 0.6.1

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: 2a409c24d94dc580e26177dffa66ee8fcda8dae2
4
- data.tar.gz: cd17b03ffbd735a4b684e9fe7fcd280856f94c07
3
+ metadata.gz: 68a638cd8db6246d0a17096f0b8bc125166772ea
4
+ data.tar.gz: 05301d7bfcc0a75562b8036e657cf610d4aa55a4
5
5
  SHA512:
6
- metadata.gz: 2494aca6b7e544589c582c6cc85b563423dd0c88eb0746eb07b0721380061f8aeef810d29a2cb14fda3489ace4dc6e5befa9768ee40bae568e428c9086edc13b
7
- data.tar.gz: f6f2ce058a1739f12aaabfdbba0d9b0c2eee0bf7c7965fa76f83eb81d04a40ad8c8a016020eba92e79d43ed6cde84a18b7889d6436357fade5dc4b82e7155bf2
6
+ metadata.gz: 23f2edc392399b115ad02465a1b3b9fad6d6c37b633e4bcc6ea8463799c3af4c641f00828b0eb6879e380abe48ca3c38a8ee21ce8bf96b677f069f0adede586d
7
+ data.tar.gz: 72af330049aab08bfb69c539985bb9dc0c2ef5b13c57b02ae682c77468410b4880672407d3b84e420d6858248c2f98cdd822fc0fa51d3a23fa77482a3ec0d66c
data/.travis.yml CHANGED
@@ -50,13 +50,13 @@ matrix:
50
50
  name: "ruby-2.3 acceptance TF 0.11.2"
51
51
  - rvm: 2.3
52
52
  install: bundle install
53
- script: bundle exec rake spec:acceptance TF_VERSION=latest
54
- name: "ruby-2.3 acceptance TF latest"
53
+ script: bundle exec rake spec:acceptance TF_VERSION=0.11.14
54
+ name: "ruby-2.3 acceptance TF 0.11.14"
55
55
  - rvm: 2.4
56
56
  install: bundle install
57
57
  script: bundle exec rake spec:unit
58
58
  name: "ruby-2.4 unit"
59
59
  - rvm: 2.4
60
60
  install: bundle install
61
- script: bundle exec rake spec:acceptance TF_VERSION=latest
62
- name: "ruby-2.4 acceptance TF latest"
61
+ script: bundle exec rake spec:acceptance TF_VERSION=0.11.14
62
+ name: "ruby-2.4 acceptance TF 0.11.14"
data/ChangeLog.md CHANGED
@@ -1,3 +1,8 @@
1
+ Version 0.6.1
2
+
3
+ - Add ``allowed_empty_vars`` option.
4
+ - Only support terraform up to 0.11.14.
5
+
1
6
  Version 0.6.0
2
7
 
3
8
  - Include full terraform output when a terraform run fails with output including ``hrottling``, ``status code: 403``, or ``status code: 401``. Previously terraform output was suppressed in these cases, which causes confusion with providers other than "aws" that include these strings in their failure output.
data/README.md CHANGED
@@ -4,7 +4,7 @@ Build of master branch: [![TravisCI](https://api.travis-ci.org/manheim/tfwrapper
4
4
 
5
5
  Documentation: [http://www.rubydoc.info/gems/tfwrapper/](http://www.rubydoc.info/gems/tfwrapper/)
6
6
 
7
- tfwrapper provides Rake tasks for working with [Hashicorp Terraform](https://www.terraform.io/) 0.9+, ensuring proper initialization and passing in variables from the environment or Ruby, as well as optionally pushing some information to Consul. tfwrapper also attempts to detect and retry
7
+ tfwrapper provides Rake tasks for working with [Hashicorp Terraform](https://www.terraform.io/) 0.9 through 0.11, ensuring proper initialization and passing in variables from the environment or Ruby, as well as optionally pushing some information to Consul. tfwrapper also attempts to detect and retry
8
8
  failed runs due to AWS throttling or access denied errors.
9
9
 
10
10
  ## Overview
@@ -44,12 +44,12 @@ with 1.9.3 is simply too high to justify.
44
44
  Add to your ``Gemfile``:
45
45
 
46
46
  ```ruby
47
- gem 'tfwrapper', '~> 0.5.1'
47
+ gem 'tfwrapper', '~> 0.6.1'
48
48
  ```
49
49
 
50
50
  ### Supported Terraform Versions
51
51
 
52
- tfwrapper only supports terraform 0.9+. It is tested against multiple versions from 0.9.2 to 0.10.2 and the current release.
52
+ tfwrapper only supports terraform 0.9-0.11. It is tested against multiple versions from 0.9.2 to 0.11.14.
53
53
 
54
54
  ### Terraform Landscape
55
55
 
@@ -147,6 +147,10 @@ TFWrapper::RakeTasks.install_tasks(
147
147
  )
148
148
  ```
149
149
 
150
+ These variables are tested to be set in the environment with a non-empty value, and will raise an error if any are
151
+ missing or empty. If some should be allowed to be missing or empty empty, pass a ``allowed_empty_vars`` list with
152
+ their environment variable names.
153
+
150
154
  ### Ruby Variables to Terraform Variables
151
155
 
152
156
  If you wish to explicitly bind values from your Ruby code to terraform variables, you can do this with
@@ -78,9 +78,12 @@ module TFWrapper
78
78
  # non-empty. Raise StandardError if any aren't.
79
79
  #
80
80
  # @param required [Array] list of required environment variables
81
- def self.check_env_vars(required)
81
+ # @param allowed_missing [Array] list of environment variables to allow to
82
+ # be empty or missing.
83
+ def self.check_env_vars(required, allowed_missing)
82
84
  missing = []
83
85
  required.each do |name|
86
+ next if allowed_missing.include?(name)
84
87
  if !ENV.include?(name)
85
88
  puts "ERROR: Environment variable '#{name}' must be set."
86
89
  missing << name
@@ -55,6 +55,8 @@ module TFWrapper
55
55
  # configurations in the same Rakefile.
56
56
  # @option opts [Hash] :tf_vars_from_env hash of Terraform variables to the
57
57
  # (required) environment variables to populate their values from
58
+ # @option opts [Hash] :allowed_empty_vars array of environment variable
59
+ # names (specified in :tf_vars_from_env) to allow to be empty or missing.
58
60
  # @option opts [Hash] :tf_extra_vars hash of Terraform variables to their
59
61
  # values; overrides any same-named keys in ``tf_vars_from_env``
60
62
  # @option opts [String] :consul_url URL to access Consul at, for the
@@ -96,6 +98,7 @@ module TFWrapper
96
98
  @ns_prefix = opts.fetch(:namespace_prefix, nil)
97
99
  @consul_env_vars_prefix = opts.fetch(:consul_env_vars_prefix, nil)
98
100
  @tf_vars_from_env = opts.fetch(:tf_vars_from_env, {})
101
+ @allowed_empty_vars = opts.fetch(:allowed_empty_vars, [])
99
102
  @tf_extra_vars = opts.fetch(:tf_extra_vars, {})
100
103
  @backend_config = opts.fetch(:backend_config, {})
101
104
  @consul_url = opts.fetch(:consul_url, nil)
@@ -162,7 +165,9 @@ module TFWrapper
162
165
  desc 'Run terraform init with appropriate arguments'
163
166
  task :init do |t|
164
167
  @before_proc.call(t.name, @tf_dir) unless @before_proc.nil?
165
- TFWrapper::Helpers.check_env_vars(@tf_vars_from_env.values)
168
+ TFWrapper::Helpers.check_env_vars(
169
+ @tf_vars_from_env.values, @allowed_empty_vars
170
+ )
166
171
  @tf_version = check_tf_version
167
172
  cmd = [
168
173
  'terraform',
@@ -4,5 +4,5 @@ module TFWrapper
4
4
  # version of the Gem/module; used in the gemspec and in messages.
5
5
  # NOTE: When updating this, also update the version in the "Installation"
6
6
  # section of README.md
7
- VERSION = '0.6.0'
7
+ VERSION = '0.6.1'
8
8
  end
@@ -213,10 +213,16 @@ describe TFWrapper::Helpers do
213
213
  it 'returns nil if vars present' do
214
214
  ENV['foo'] = 'fooval'
215
215
  ENV['bar'] = 'barval'
216
- expect(TFWrapper::Helpers.check_env_vars(%w[foo bar])).to be_nil
216
+ expect(TFWrapper::Helpers.check_env_vars(%w[foo bar], [])).to be_nil
217
217
  ENV.delete('foo')
218
218
  ENV.delete('bar')
219
219
  end
220
+ it 'returns nil if vars ignored' do
221
+ ENV['foo'] = ''
222
+ expect(TFWrapper::Helpers.check_env_vars(%w[foo bar], %w[foo bar]))
223
+ .to be_nil
224
+ ENV.delete('foo')
225
+ end
220
226
  it 'exits if not present' do
221
227
  ENV.delete('foo')
222
228
  ENV.delete('bar')
@@ -224,7 +230,7 @@ describe TFWrapper::Helpers do
224
230
  .with('ERROR: Environment variable \'foo\' must be set.')
225
231
  expect(STDOUT).to receive(:puts)
226
232
  .with('ERROR: Environment variable \'bar\' must be set.')
227
- expect { TFWrapper::Helpers.check_env_vars(%w[foo bar]) }
233
+ expect { TFWrapper::Helpers.check_env_vars(%w[foo bar], %w[baz]) }
228
234
  .to raise_error StandardError, 'Missing or empty environment ' \
229
235
  'variables: ["foo", "bar"]'
230
236
  end
@@ -235,11 +241,31 @@ describe TFWrapper::Helpers do
235
241
  .with("ERROR: Environment variable 'foo' must not be empty.")
236
242
  expect(STDOUT).to receive(:puts)
237
243
  .with("ERROR: Environment variable 'bar' must not be empty.")
238
- expect { TFWrapper::Helpers.check_env_vars(%w[foo bar]) }
244
+ expect { TFWrapper::Helpers.check_env_vars(%w[foo bar], %w[baz]) }
239
245
  .to raise_error StandardError, 'Missing or empty environment ' \
240
246
  'variables: ["foo", "bar"]'
241
247
  ENV.delete('foo')
242
248
  ENV.delete('bar')
243
249
  end
250
+ it 'exits if not present and partially ignored' do
251
+ ENV.delete('foo')
252
+ ENV.delete('bar')
253
+ expect(STDOUT).to receive(:puts)
254
+ .with('ERROR: Environment variable \'foo\' must be set.')
255
+ expect { TFWrapper::Helpers.check_env_vars(%w[foo bar], %w[bar]) }
256
+ .to raise_error StandardError, 'Missing or empty environment ' \
257
+ 'variables: ["foo"]'
258
+ end
259
+ it 'exits if empty and partially ignored' do
260
+ ENV['foo'] = ''
261
+ ENV['bar'] = ' '
262
+ expect(STDOUT).to receive(:puts)
263
+ .with("ERROR: Environment variable 'foo' must not be empty.")
264
+ expect { TFWrapper::Helpers.check_env_vars(%w[foo bar], %w[bar]) }
265
+ .to raise_error StandardError, 'Missing or empty environment ' \
266
+ 'variables: ["foo"]'
267
+ ENV.delete('foo')
268
+ ENV.delete('bar')
269
+ end
244
270
  end
245
271
  end
@@ -59,6 +59,7 @@ describe TFWrapper::RakeTasks do
59
59
  expect(cls.instance_variable_get('@tf_dir')).to eq('/rake/dir/tfdir')
60
60
  expect(cls.instance_variable_get('@consul_env_vars_prefix')).to eq(nil)
61
61
  expect(cls.instance_variable_get('@tf_vars_from_env')).to eq({})
62
+ expect(cls.instance_variable_get('@allowed_empty_vars')).to eq([])
62
63
  expect(cls.instance_variable_get('@tf_extra_vars')).to eq({})
63
64
  expect(cls.instance_variable_get('@backend_config')).to eq({})
64
65
  expect(cls.instance_variable_get('@consul_url')).to eq(nil)
@@ -87,6 +88,7 @@ describe TFWrapper::RakeTasks do
87
88
  'tf/dir',
88
89
  consul_env_vars_prefix: 'cvprefix',
89
90
  tf_vars_from_env: { 'foo' => 'bar' },
91
+ allowed_empty_vars: %w[bar blam],
90
92
  tf_extra_vars: { 'baz' => 'blam' },
91
93
  consul_url: 'foobar',
92
94
  before_proc: bproc,
@@ -100,6 +102,8 @@ describe TFWrapper::RakeTasks do
100
102
  .to eq('cvprefix')
101
103
  expect(cls.instance_variable_get('@tf_vars_from_env'))
102
104
  .to eq('foo' => 'bar')
105
+ expect(cls.instance_variable_get('@allowed_empty_vars'))
106
+ .to eq(%w[bar blam])
103
107
  expect(cls.instance_variable_get('@tf_extra_vars'))
104
108
  .to eq('baz' => 'blam')
105
109
  expect(cls.instance_variable_get('@backend_config')).to eq({})
@@ -317,6 +321,7 @@ describe TFWrapper::RakeTasks do
317
321
  .to eq(Gem::Version.new('0.0.0'))
318
322
  vars = { foo: 'bar', baz: 'blam' }
319
323
  subject.instance_variable_set('@tf_vars_from_env', vars)
324
+ subject.instance_variable_set('@allowed_empty_vars', ['bar'])
320
325
  allow(TFWrapper::Helpers).to receive(:check_env_vars)
321
326
  allow(ENV).to receive(:[])
322
327
  subject.instance_variable_set(
@@ -329,7 +334,7 @@ describe TFWrapper::RakeTasks do
329
334
  allow(subject).to receive(:check_tf_version)
330
335
  .and_return(Gem::Version.new('0.9.5'))
331
336
  expect(TFWrapper::Helpers)
332
- .to receive(:check_env_vars).once.ordered.with(vars.values)
337
+ .to receive(:check_env_vars).once.ordered.with(vars.values, ['bar'])
333
338
  expect(subject).to receive(:check_tf_version).once.ordered
334
339
  expect(subject).to receive(:terraform_runner).once.ordered
335
340
  .with('terraform init -input=false '\
@@ -351,7 +356,7 @@ describe TFWrapper::RakeTasks do
351
356
  allow(subject).to receive(:check_tf_version)
352
357
  .and_return(Gem::Version.new('0.10.2'))
353
358
  expect(TFWrapper::Helpers)
354
- .to receive(:check_env_vars).once.ordered.with(vars.values)
359
+ .to receive(:check_env_vars).once.ordered.with(vars.values, [])
355
360
  expect(subject).to receive(:check_tf_version).once.ordered
356
361
  expect(subject).to receive(:terraform_runner).once.ordered
357
362
  .with('terraform init -input=false')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tfwrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - jantman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-07 00:00:00.000000000 Z
11
+ date: 2020-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: retries
@@ -421,7 +421,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
421
421
  version: '0'
422
422
  requirements: []
423
423
  rubyforge_project:
424
- rubygems_version: 2.5.2
424
+ rubygems_version: 2.6.14
425
425
  signing_key:
426
426
  specification_version: 4
427
427
  summary: Rake tasks for running Hashicorp Terraform sanely