terragov 0.2.5.2 → 0.3.0
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 +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +12 -4
- data/lib/terragov/cli.rb +49 -18
- data/lib/terragov/terraform.rb +13 -1
- data/lib/terragov/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7a6a1b21ce61bd33cbe176f659736df43d5b675e
|
4
|
+
data.tar.gz: f795a6e0a83173b5c324a19f8e849442128a111a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4aece8878211d2e6a066a90e811d0284ddfe844ec4785d7b04abee636f5126d96a417a1f26f274aea757e431cf489e22fec64565b88b649671b2f90177e06f5a
|
7
|
+
data.tar.gz: e670688f84d0966ba605341927626a1ebc26abf42d7bea949eaca980f9d2dd7b4b64b1e28621c302aea7f8784a25e416c31af651983397a8c9cb5c75c3501c59
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## 0.3.0 (2017-11-26)
|
2
|
+
|
3
|
+
- Updated configuration file to allow default values and project specific values
|
4
|
+
- Uses `-detailed-exitcode` by default, and warns user if there are changes pending
|
5
|
+
- Small code tidy
|
6
|
+
|
1
7
|
## 0.2.4 (2017-10-15)
|
2
8
|
|
3
9
|
- Updated cleaner method to check for both ".terraform" and "terraform.tfstate.backup"
|
data/README.md
CHANGED
@@ -63,12 +63,20 @@ The contents should be YAML, and look like the following:
|
|
63
63
|
|
64
64
|
```
|
65
65
|
---
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
66
|
+
default:
|
67
|
+
environment: 'integration'
|
68
|
+
stack: 'blue'
|
69
|
+
repo_dir: '~/govuk/govuk-aws'
|
70
|
+
data_dir: '~/govuk/govuk-aws-data/data'
|
71
|
+
|
72
|
+
app-some-project:
|
73
|
+
stack: 'green'
|
70
74
|
```
|
71
75
|
|
76
|
+
Specify default values under the "default" block, and if you need any project specific values, add them under the key of the same name of that project.
|
77
|
+
|
78
|
+
Project specific values will take precedence over default values.
|
79
|
+
|
72
80
|
## Optional global arguments
|
73
81
|
|
74
82
|
These may be set in the same way as described above, with the same precedence, but they are not required.
|
data/lib/terragov/cli.rb
CHANGED
@@ -96,59 +96,90 @@ module Terragov
|
|
96
96
|
def load_config_file
|
97
97
|
if $config_file || ENV['TERRAGOV_CONFIG_FILE']
|
98
98
|
file = $config_file || ENV['TERRAGOV_CONFIG_FILE']
|
99
|
-
|
100
|
-
|
99
|
+
YAML.load_file(File.expand_path(file))
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def config_file_default
|
104
|
+
if load_config_file['default'].nil?
|
105
|
+
return nil
|
106
|
+
else
|
107
|
+
return load_config_file['default']
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def config_file_specific_project(project_name)
|
112
|
+
load_config_file[project_name]
|
113
|
+
end
|
114
|
+
|
115
|
+
def config_file(option)
|
116
|
+
# This has to be loaded in seperately to avoid any cyclic dependencies
|
117
|
+
project_name = $project || ENV['TERRAGOV_PROJECT']
|
118
|
+
|
119
|
+
if project_name.nil?
|
120
|
+
if config_file_default.nil?
|
121
|
+
return nil
|
122
|
+
else
|
123
|
+
return config_file_default[option]
|
124
|
+
end
|
125
|
+
else
|
126
|
+
project_config = config_file_specific_project(project_name)
|
127
|
+
if project_config.nil? or project_config[option].nil?
|
128
|
+
return config_file_default[option]
|
129
|
+
else
|
130
|
+
return project_config[option]
|
131
|
+
end
|
101
132
|
end
|
102
133
|
end
|
103
134
|
|
104
135
|
def config(option, file = false, required = true)
|
105
136
|
env_var = "TERRAGOV_#{option.upcase}"
|
106
137
|
error_message = "Must set #{option}. Use --help for details."
|
138
|
+
|
139
|
+
# Load from CLI option
|
107
140
|
if public_send(option)
|
108
141
|
if file
|
109
142
|
return File.expand_path(public_send(option))
|
110
143
|
else
|
111
144
|
return public_send(option)
|
112
145
|
end
|
146
|
+
|
147
|
+
# Load from environment variable
|
113
148
|
elsif ENV[env_var]
|
114
149
|
if file
|
115
150
|
return File.expand_path(ENV[env_var])
|
116
151
|
else
|
117
152
|
return ENV[env_var]
|
118
153
|
end
|
154
|
+
|
155
|
+
# Load from config file
|
119
156
|
elsif !load_config_file.nil?
|
120
|
-
if
|
121
|
-
if required
|
122
|
-
|
123
|
-
else
|
124
|
-
return false
|
125
|
-
end
|
157
|
+
if config_file(option).nil?
|
158
|
+
abort(error_message) if required
|
159
|
+
return false
|
126
160
|
else
|
127
161
|
if file
|
128
|
-
return File.expand_path(
|
162
|
+
return File.expand_path(config_file(option))
|
129
163
|
else
|
130
|
-
return
|
164
|
+
return config_file(option)
|
131
165
|
end
|
132
166
|
end
|
133
167
|
else
|
134
|
-
if required
|
135
|
-
|
136
|
-
else
|
137
|
-
return false
|
138
|
-
end
|
168
|
+
abort(error_message) if required
|
169
|
+
return false
|
139
170
|
end
|
140
171
|
end
|
141
172
|
|
142
173
|
def cmd_options
|
143
|
-
|
174
|
+
{
|
175
|
+
# Always load the project name first
|
176
|
+
'project' => config('project'),
|
144
177
|
'environment' => config('environment'),
|
145
178
|
'data_dir' => config('data_dir', true),
|
146
|
-
'project' => config('project'),
|
147
179
|
'stack' => config('stack'),
|
148
180
|
'repo_dir' => config('repo_dir', true),
|
149
181
|
'extra' => extra
|
150
182
|
}
|
151
|
-
cmd_options_hash
|
152
183
|
end
|
153
184
|
|
154
185
|
def git_compare_repo_and_data(skip = false)
|
data/lib/terragov/terraform.rb
CHANGED
@@ -26,6 +26,10 @@ module Terragov
|
|
26
26
|
Dir.chdir directory
|
27
27
|
init(backend, dryrun, verbose)
|
28
28
|
|
29
|
+
if command == 'plan'
|
30
|
+
command = 'plan -detailed-exitcode'
|
31
|
+
end
|
32
|
+
|
29
33
|
full_command = "bash -c 'terraform #{command} #{vars}'"
|
30
34
|
|
31
35
|
run(full_command, dryrun, verbose)
|
@@ -41,7 +45,15 @@ module Terragov
|
|
41
45
|
puts command
|
42
46
|
else
|
43
47
|
puts command if verbose
|
44
|
-
|
48
|
+
system(command)
|
49
|
+
|
50
|
+
# Catch the output of "-detailed-exitcode"
|
51
|
+
if $?.exitstatus == 2
|
52
|
+
puts "Command completed successfully, but with updates available to apply"
|
53
|
+
exit 2
|
54
|
+
elsif $?.exitstatus != (0 or 2)
|
55
|
+
abort("There was an issue running command: #{command}")
|
56
|
+
end
|
45
57
|
end
|
46
58
|
end
|
47
59
|
end
|
data/lib/terragov/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: terragov
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Laura Martin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: commander
|