rake-terraform 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 3aeb68f3dd5c3a2d25f205dd772f3b05d2dce608
4
- data.tar.gz: 534dacf569407d0d37471c157f9e6182212ef4da
2
+ SHA256:
3
+ metadata.gz: 9b77ebb2dfff7f44ddd481c47e1af8df9c2bd36923ed6381e92f4d4e323924e2
4
+ data.tar.gz: b921ee652eda8d825a7ceaf2713e26420b313c77301a11067cccd3b591f9c942
5
5
  SHA512:
6
- metadata.gz: 3a8e49b4fb01c831236926cdc4c839993074e287b790c6910f0a287950f00cc98bebaa60ff509326718021054afdf81ef6c5c14fa760678b7e23325663446512
7
- data.tar.gz: fbdf99bc785da35fdaa56f49624b8e900ac9510dabda5a94270a5cc8d85b233fb954a8afb4db1a98dd1874ae5542c957692a047b06095dde38975b7ccf5aa357
6
+ metadata.gz: 19e2250063b7a03bdf09171515a3ea32f631870488fee8ac5c1f5cc1ecd0d14edc7e526fc740ffff4940d43c0e6015ea7b30ef48ae4508f42a22f085d35a9811
7
+ data.tar.gz: 33e9185deb94ab07efec9eaa738c01c4389ebf82616eb0264b03c999786366bd2b7155fc963b59911828d6fae8002d3971cb7af27740f16e6bfe7fbd0a236942
data/README.md CHANGED
@@ -31,6 +31,8 @@ Or install it yourself as:
31
31
 
32
32
  ## Usage
33
33
 
34
+ **Note**: Versions < 0.3.0 handled credentials as part of this gem/default rake tasks. This is no longer the case with 0.3.0 which defaults to Terraform to handle provider credentials.
35
+
34
36
  This gem currently provides two different types of tasks:
35
37
 
36
38
  ### `terraform_plan`
@@ -40,7 +42,6 @@ You can set the following configuration for the task:
40
42
 
41
43
  * `t.input_dir` - the directory from which to read terraform config (default: `./terraform`)
42
44
  * `t.output_file` - the path and name of the plan file to generate (default: `./output/terraform/plan.tf`)
43
- * `t.credentials` - the path of the [AWS credentials file](http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-config-files) to read from (default: `~/.aws/credentials`)
44
45
  * `t.aws_project` - the name of the project to use from your credentials file (default: `default`)
45
46
 
46
47
  ### `terraform_apply`
@@ -76,7 +77,7 @@ Given, the following terraform hierarchy:
76
77
  output.tf
77
78
  ```
78
79
 
79
- It wil automatically generate the following rake tasks:
80
+ It will automatically generate the following rake tasks:
80
81
 
81
82
  ```bash
82
83
  rake terraform:all # Plan and migrate all environments
@@ -84,6 +85,9 @@ rake terraform:all # Plan and migrate all environments
84
85
  rake terraform:apply_us-east-1 # Execute plan for us-east-1
85
86
  rake terraform:apply_us-west-1 # Execute plan for us-west-1
86
87
 
88
+ rake terraform:init_us-east-1 # Execute init for us-east-1
89
+ rake terraform:init_us-west-1 # Execute init for us-west-1
90
+
87
91
  rake terraform:plan_us-east-1 # Plan migration of us-east-1
88
92
  rake terraform:plan_us-west-1 # Plan migration of us-west-1
89
93
 
@@ -95,16 +99,15 @@ The following environment variables can be set to tweak `default_task`'s behavio
95
99
  * `ENV['TERRAFORM_AWS_PROJECT']` - Sets `t.aws_project` on the `terraform_plan` tasks (default: `default`)
96
100
  * `ENV['TERRAFORM_ENVIRONMENT_GLOB']` - Dir glob used to discover terraform environments (default: `terraform/**/*.tf`)
97
101
  * `ENV['TERRAFORM_OUTPUT_BASE']` - Directory to which plan files are saved/read. The environment name is appended to this automatically (default: `output/terraform`)
98
- * `ENV['TERRAFORM_CREDENTIAL_FILE']` - The path to your AWS credentials file (default: `~/.aws/credentials`)
99
- * `ENV['TERRAFORM_UNIQUE_STATE']` - Whether to use a unique state for this run. Requires `TERRAFORM_STATE_FILE` OR `TERRAFORM_STATE_DIR_VAR`. Can be any truthy or falsey looking string from [this list][wannabe_bool_string] (e.g `TRUE` or `FALSE`)
100
- * `ENV['TERRAFORM_STATE_FILE']` - The full path to a state file to use for this run. Only used when `TERRAFORM_UNIQUE_STATE` is true, and cannot be used in conjunction with `TERRAFORM_STATE_DIR_VAR`.
102
+ * `ENV['TERRAFORM_UNIQUE_STATE']` - Whether to use a unique state for this run. Requires `TERRAFORM_STATE_FILE` OR `TERRAFORM_STATE_DIR_VAR`. Can be any truthy or falsey looking string from [this list][wannabe_bool_string] (e.g `TRUE` or `FALSE`)
103
+ * `ENV['TERRAFORM_STATE_FILE']` - The full path to a state file to use for this run. Only used when `TERRAFORM_UNIQUE_STATE` is true, and cannot be used in conjunction with `TERRAFORM_STATE_DIR_VAR`.
101
104
  * `ENV['TERRAFORM_STATE_DIR_VAR']` - The name of an environment variable that holds a variable that will be used to reference a directory in which to store state files in for this run. This directory will be a subdirectory within the terraform environment. Only used when `TERRAFORM_STATE_DIR` is true, and cannot be used in conjunction with `TERRAFORM_STATE_FILE`
102
105
 
103
106
  [wannabe_bool_string]: https://github.com/prodis/wannabe_bool#string
104
107
 
105
108
  #### Unique States
106
109
 
107
- Bu default, `rake-terraform` stores state within a given environment directory.
110
+ By default, `rake-terraform` stores state within a given environment directory.
108
111
 
109
112
  Sometimes, you will have several infrastructure environments ("infrastructure
110
113
  environment" in this block here taken to mean e.g "staging" or "production"
@@ -129,7 +132,7 @@ commits between them. Again, depends on clean commit hygiene and easy to mess
129
132
  up manual steps.
130
133
 
131
134
  By using a unique state file for each of your infrastructure environments,
132
- whilst utilising a single terraform environment, you can avoid repeating
135
+ whilst utilizing a single terraform environment, you can avoid repeating
133
136
  yourself and manage roll out changes to each of your infrastructure
134
137
  environments better.
135
138
 
@@ -169,7 +172,7 @@ This would result in a directory layout resembling the following:
169
172
  staging
170
173
  terraform.tfstate
171
174
  terraform.tfstate.backup
172
- production
175
+ production
173
176
  terraform.tfstate
174
177
  terraform.tfstate.backup
175
178
  app_tier
@@ -180,7 +183,7 @@ This would result in a directory layout resembling the following:
180
183
  staging
181
184
  terraform.tfstate
182
185
  terraform.tfstate.backup
183
- production
186
+ production
184
187
  terraform.tfstate
185
188
  terraform.tfstate.backup
186
189
 
@@ -17,14 +17,5 @@ module RakeTerraform
17
17
  rescue => _
18
18
  false
19
19
  end
20
-
21
- def get_aws_credentials(creds_file, project = 'default')
22
- error = "Could not locate AWS credentials in #{creds_file}!"
23
- raise error unless File.exist? File.expand_path(creds_file)
24
-
25
- credentials = IniParse.parse(File.read(File.expand_path(creds_file)))
26
- { accesskey: credentials[project]['aws_access_key_id'],
27
- secretkey: credentials[project]['aws_secret_access_key'] }
28
- end
29
20
  end
30
21
  end
@@ -8,8 +8,6 @@ namespace :terraform do
8
8
  # classes
9
9
  env_glob = ENV['TERRAFORM_ENVIRONMENT_GLOB'] || 'terraform/**/*.tf'
10
10
  output_base = ENV['TERRAFORM_OUTPUT_BASE'] || 'output/terraform'
11
- credential_file = ENV['TERRAFORM_CREDENTIAL_FILE']
12
- credential_file ||= "#{Dir.home}/.aws/credentials"
13
11
  aws_project = ENV['TERRAFORM_AWS_PROJECT'] || 'default'
14
12
 
15
13
  # Set to string 'false' instead of bool so users can more-easily override
@@ -40,7 +38,6 @@ namespace :terraform do
40
38
  t.input_dir = env
41
39
  t.aws_project = aws_project
42
40
  t.output_file = plan_path
43
- t.credentials = credential_file
44
41
  end
45
42
 
46
43
  desc "Execute plan for #{short_name}" if hide_tasks == 'false'
@@ -6,7 +6,7 @@ module RakeTerraform
6
6
  class Config
7
7
  prepend RakeTerraform::EnvProcess
8
8
 
9
- attr_writer :aws_project, :credentials, :output_file
9
+ attr_writer :aws_project, :output_file
10
10
 
11
11
  def initialize
12
12
  # initialize RakeTerraform::EnvProcess
@@ -17,10 +17,6 @@ module RakeTerraform
17
17
  @aws_project ||= 'default'
18
18
  end
19
19
 
20
- def credentials
21
- @credentials ||= File.expand_path(default_credentials)
22
- end
23
-
24
20
  def output_file
25
21
  @output_file ||= File.expand_path(default_output)
26
22
  end
@@ -41,7 +37,6 @@ module RakeTerraform
41
37
  def opts
42
38
  Map.new(input_dir: input_dir,
43
39
  output_file: output_file,
44
- credentials: credentials,
45
40
  aws_project: aws_project,
46
41
  unique_state: unique_state,
47
42
  state_file: state_file)
@@ -52,10 +47,6 @@ module RakeTerraform
52
47
  def default_output
53
48
  File.join('output', 'terraform', 'plan.tf')
54
49
  end
55
-
56
- def default_credentials
57
- File.join('~', '.aws', 'credentials')
58
- end
59
50
  end
60
51
  end
61
52
  end
@@ -5,12 +5,9 @@ module RakeTerraform
5
5
  # Custom rake task to run `terraform plan`
6
6
  class Task < BaseTask
7
7
  include RakeTerraform::TerraformCmd
8
- attr_accessor :creds_file
9
8
 
10
9
  def initialize(opts)
11
- @creds_file = opts.get(:credentials)
12
10
  @opts = opts
13
- creds
14
11
  end
15
12
 
16
13
  def execute
@@ -18,18 +15,13 @@ module RakeTerraform
18
15
  Dir.chdir(@opts.get(:input_dir)) do
19
16
  puts "=> Generating plan for #{@opts.get(:input_dir)}..."
20
17
  if @opts[:unique_state]
21
- tf_plan(@creds[:accesskey], @creds[:secretkey],
22
- @opts[:output_file], @opts[:state_file])
18
+ tf_plan(@opts[:output_file], @opts[:state_file])
23
19
  else
24
- tf_plan(@creds[:accesskey], @creds[:secretkey], @opts[:output_file])
20
+ tf_plan(@opts[:output_file])
25
21
  end
26
22
  end
27
23
  end
28
24
 
29
- def creds
30
- @creds ||= get_aws_credentials(@creds_file, @opts.get(:aws_project))
31
- end
32
-
33
25
  private
34
26
 
35
27
  # run pre execution checks
@@ -23,21 +23,10 @@ module RakeTerraform
23
23
 
24
24
  # perform a 'terraform plan'
25
25
  #
26
- # access_key and secret_key are optional as terraform and it's underlying
27
- # library have supported the standard AWS_PROFILE env var for a while
28
- #
29
- def tf_plan(access_key = nil, secret_key = nil,
30
- output_file = nil, state_file = nil, module_depth = 2)
26
+ def tf_plan(output_file = nil, state_file = nil, module_depth = 2)
31
27
  cmd = 'terraform plan'
32
28
  cmd << " -module-depth #{module_depth}"
33
29
  state_file && cmd << " -state #{state_file}"
34
- if access_key && secret_key
35
- # TODO: additional escaped quotes required?
36
- cmd << " -var access_key=\"#{access_key}\""
37
- cmd << " -var secret_key=\"#{secret_key}\""
38
- elsif access_key || secret_key
39
- raise ArgumentError, 'Only one of access_key or secret_key given'
40
- end
41
30
  output_file && cmd << " -out #{output_file}"
42
31
  system(cmd)
43
32
  end
@@ -1,4 +1,4 @@
1
1
  # Version of the gem
2
2
  module RakeTerraform
3
- VERSION = '0.2.2'.freeze
3
+ VERSION = '0.3.0'.freeze
4
4
  end
@@ -5,4 +5,3 @@ TERRAFORM_STATE_DIR_VAR=""
5
5
  TERRAFORM_AWS_PROJECT=""
6
6
  TERRAFORM_ENVIRONMENT_GLOB=""
7
7
  TERRAFORM_OUTPUT_BASE=""
8
- TERRAFORM_CREDENTIAL_FILE=""
@@ -18,12 +18,10 @@ module RakeTerraform
18
18
  let(:default_output_file_str) do
19
19
  "#{PROJECT_ROOT}/output/terraform/plan.tf"
20
20
  end
21
- let(:default_credentials_str) { File.expand_path('~/.aws/credentials') }
22
21
  let(:default_opts_hash) do
23
22
  {
24
23
  input_dir: default_input_dir_str,
25
24
  output_file: default_output_file_str,
26
- credentials: default_credentials_str,
27
25
  aws_project: default_aws_project_str,
28
26
  unique_state: false,
29
27
  state_file: nil
@@ -61,46 +61,25 @@ module RakeTerraform
61
61
  test_class_inst.tf_plan
62
62
  end
63
63
  end
64
- context 'with just an access_key' do
65
- it 'should raise an ArgumentError' do
66
- expect { test_class_inst.tf_plan(access_key) }
67
- .to raise_error(ArgumentError,
68
- 'Only one of access_key or secret_key given')
69
- end
70
- end
71
- context 'with just a secret_key' do
72
- it 'should raise an ArgumentError' do
73
- expect { test_class_inst.tf_plan(nil, secret_key) }
74
- .to raise_error(ArgumentError,
75
- 'Only one of access_key or secret_key given')
76
- end
77
- end
78
- context 'with both an access_key and a secret_key' do
79
- it 'should call terraform plan with those vars configured' do
80
- expect(test_class_inst).to receive(:system)
81
- .with(cred_plan_cmd)
82
- test_class_inst.tf_plan(access_key, secret_key)
83
- end
84
- end
85
64
  context 'with an output file' do
86
65
  it 'should call terraform plan with an output file' do
87
66
  expect(test_class_inst).to receive(:system)
88
67
  .with(output_plan_cmd)
89
- test_class_inst.tf_plan(nil, nil, default_output_file)
68
+ test_class_inst.tf_plan(default_output_file)
90
69
  end
91
70
  end
92
71
  context 'with an state file' do
93
72
  it 'should call terraform plan with a state file' do
94
73
  expect(test_class_inst).to receive(:system)
95
74
  .with(state_file_cmd)
96
- test_class_inst.tf_plan(nil, nil, nil, state_file)
75
+ test_class_inst.tf_plan(nil, state_file)
97
76
  end
98
77
  end
99
78
  context 'where module_depth is given as an argument' do
100
79
  it 'should call terraform plan with updated module-depth argument' do
101
80
  expect(test_class_inst).to receive(:system)
102
81
  .with(module_arg_cmd)
103
- test_class_inst.tf_plan(nil, nil, nil, nil, module_arg)
82
+ test_class_inst.tf_plan(nil, nil, module_arg)
104
83
  end
105
84
  end
106
85
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake-terraform
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Norm MacLennan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-24 00:00:00.000000000 Z
11
+ date: 2018-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -208,7 +208,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
208
208
  version: '0'
209
209
  requirements: []
210
210
  rubyforge_project:
211
- rubygems_version: 2.6.12
211
+ rubygems_version: 2.7.5
212
212
  signing_key:
213
213
  specification_version: 4
214
214
  summary: Rake tasks for use with Terraform.