terragov 0.3.0 → 0.3.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 +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +28 -1
- data/lib/terragov/cli.rb +56 -8
- data/lib/terragov/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b370d90ba03ce0099a9971f81f4fbc7b1b52e73
|
4
|
+
data.tar.gz: ff3d7bd9b1053b301cf20f670c3eca8038f8a81c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 76887d22c0ec35ce3274f26b6e120ad6558c7efb7c7a79a652a4582255be95958a4f9ca2143e925c059cc891dc40cc1a7e1f6899040cbb7d998688bf70c80c00
|
7
|
+
data.tar.gz: '092fb3626be1b16143ed90098939207bfd4d9e293b2251b63033c6990aaae3c6ca42a31c9dad9caefa9e1498541d0f640091f35b1b01dff9bd3cbfd82196c700'
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -26,7 +26,8 @@ Command | Description
|
|
26
26
|
--- | ---
|
27
27
|
`plan` | Plan Terraform resources
|
28
28
|
`apply` | Apply Terraform changes
|
29
|
-
`
|
29
|
+
`destroy` | Delete Terraform resources
|
30
|
+
`deploy` | Deploy multiple projects as defined by a deployment file
|
30
31
|
`clean` | Delete any files that have been left by Terraform
|
31
32
|
|
32
33
|
There are several **required** arguments to pass when running `apply`, `plan` or `destroy`:
|
@@ -87,6 +88,32 @@ Argument | Description
|
|
87
88
|
`dryrun` | CLI option is `--dry-run`, but config file and env var is `dryrun` and `TERRAGOV_DRYRUN` respectively
|
88
89
|
`skip_git_check` | Do not compare branches between the repo and data directories
|
89
90
|
|
91
|
+
## Deployment
|
92
|
+
|
93
|
+
You can run multiple projects using the `deploy` command. Create a deployment file with the following:
|
94
|
+
|
95
|
+
```
|
96
|
+
---
|
97
|
+
default:
|
98
|
+
- 'app-one'
|
99
|
+
- 'app-two'
|
100
|
+
- 'app-three'
|
101
|
+
|
102
|
+
development:
|
103
|
+
- 'app-foo'
|
104
|
+
- 'app-bar'
|
105
|
+
```
|
106
|
+
|
107
|
+
It will use whatever is defined in the `default` configuration:
|
108
|
+
|
109
|
+
`terragov deploy --file integration.yaml --command plan`
|
110
|
+
|
111
|
+
Define a specific group to deploy:
|
112
|
+
|
113
|
+
`terragov deploy --file integration.yaml --command plan --group development`
|
114
|
+
|
115
|
+
This will use the configuration set by all the methods described previously.
|
116
|
+
|
90
117
|
## Development
|
91
118
|
|
92
119
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/terragov/cli.rb
CHANGED
@@ -170,16 +170,21 @@ module Terragov
|
|
170
170
|
end
|
171
171
|
end
|
172
172
|
|
173
|
-
def cmd_options
|
174
|
-
{
|
175
|
-
|
176
|
-
|
173
|
+
def cmd_options(deployment = false)
|
174
|
+
cmd_hash = {}
|
175
|
+
|
176
|
+
# Always load the project name first
|
177
|
+
unless deployment
|
178
|
+
cmd_hash = { 'project' => config('project') }
|
179
|
+
end
|
180
|
+
|
181
|
+
cmd_hash.merge({
|
177
182
|
'environment' => config('environment'),
|
178
183
|
'data_dir' => config('data_dir', true),
|
179
184
|
'stack' => config('stack'),
|
180
185
|
'repo_dir' => config('repo_dir', true),
|
181
186
|
'extra' => extra
|
182
|
-
}
|
187
|
+
})
|
183
188
|
end
|
184
189
|
|
185
190
|
def git_compare_repo_and_data(skip = false)
|
@@ -211,7 +216,7 @@ module Terragov
|
|
211
216
|
end
|
212
217
|
end
|
213
218
|
|
214
|
-
def run_terraform_cmd(cmd, opt = nil)
|
219
|
+
def run_terraform_cmd(cmd, opt = nil, deployment = false)
|
215
220
|
paths = Terragov::BuildPaths.new.base(cmd_options)
|
216
221
|
varfiles = Terragov::BuildPaths.new.build_command(cmd_options)
|
217
222
|
backend = paths[:backend_file]
|
@@ -221,8 +226,10 @@ module Terragov
|
|
221
226
|
|
222
227
|
do_dryrun = config('dryrun', false, false)
|
223
228
|
|
224
|
-
|
225
|
-
|
229
|
+
unless deployment
|
230
|
+
skip_check = config('skip_git_check', false, false)
|
231
|
+
git_compare_repo_and_data(skip_check)
|
232
|
+
end
|
226
233
|
|
227
234
|
puts cmd_options.to_yaml if be_verbose
|
228
235
|
|
@@ -230,6 +237,33 @@ module Terragov
|
|
230
237
|
Terragov::Terraform.new.execute(cmd, varfiles, backend, project_dir, do_dryrun, be_verbose)
|
231
238
|
end
|
232
239
|
|
240
|
+
def run_deployment(file, group, command)
|
241
|
+
abort("Must set deployment file: --file") unless file
|
242
|
+
abort("Must set command to run: --command") unless command
|
243
|
+
abort("Cannot find deployment file: #{file}") unless File.exist?(file)
|
244
|
+
|
245
|
+
deployment_file = YAML.load_file(file)
|
246
|
+
deployment_config = deployment_file[group]
|
247
|
+
|
248
|
+
if deployment_config.nil?
|
249
|
+
abort("Deployment configuration must be an array of projects to run")
|
250
|
+
end
|
251
|
+
|
252
|
+
if command == 'plan' || command == 'apply'
|
253
|
+
deployment_config.each do |proj|
|
254
|
+
$project = proj
|
255
|
+
run_terraform_cmd(command, nil, true)
|
256
|
+
end
|
257
|
+
elsif command == 'destroy'
|
258
|
+
deployment_config.reverse.each do |proj|
|
259
|
+
$project = proj
|
260
|
+
run_terraform_cmd(command, nil, true)
|
261
|
+
end
|
262
|
+
else
|
263
|
+
abort("Command must be apply, plan or destroy")
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
233
267
|
def run
|
234
268
|
command :plan do |c|
|
235
269
|
c.syntax = 'terragov plan'
|
@@ -260,6 +294,20 @@ module Terragov
|
|
260
294
|
end
|
261
295
|
end
|
262
296
|
|
297
|
+
command :deploy do |c|
|
298
|
+
c.syntax = 'terragov deploy -f <deployment file>'
|
299
|
+
c.description = 'Deploy a group of projects as specified in a deployment configuration'
|
300
|
+
c.option '-f', '--file STRING', 'Specify deployment file'
|
301
|
+
c.option '-g', '--group STRING', 'Specify group that you wish to deploy'
|
302
|
+
c.option '-c', '--command STRING', 'What command to run: apply, plan or destroy.'
|
303
|
+
c.action do |_args, options|
|
304
|
+
|
305
|
+
group = options.group.nil? ? 'default' : options.group
|
306
|
+
|
307
|
+
run_deployment(options.file, group, options.command)
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
263
311
|
command :clean do |c|
|
264
312
|
c.syntax = 'terragov clean'
|
265
313
|
c.description = 'Clean your directory of any files terraform may have left lying around'
|
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.3.
|
4
|
+
version: 0.3.1
|
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
|
+
date: 2017-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: commander
|
@@ -201,7 +201,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
201
201
|
version: '0'
|
202
202
|
requirements: []
|
203
203
|
rubyforge_project:
|
204
|
-
rubygems_version: 2.6.
|
204
|
+
rubygems_version: 2.6.8
|
205
205
|
signing_key:
|
206
206
|
specification_version: 4
|
207
207
|
summary: Wrapper for GOV.UK Terraform deployments.
|