ruby-terraform 0.65.0.pre.12 → 1.0.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/Gemfile.lock +23 -17
- data/README.md +148 -414
- data/Rakefile +25 -0
- data/lib/ruby_terraform.rb +1365 -41
- data/lib/ruby_terraform/commands.rb +0 -2
- data/lib/ruby_terraform/commands/apply.rb +78 -4
- data/lib/ruby_terraform/commands/base.rb +13 -2
- data/lib/ruby_terraform/commands/destroy.rb +71 -4
- data/lib/ruby_terraform/commands/force_unlock.rb +33 -3
- data/lib/ruby_terraform/commands/format.rb +45 -2
- data/lib/ruby_terraform/commands/get.rb +35 -2
- data/lib/ruby_terraform/commands/graph.rb +48 -2
- data/lib/ruby_terraform/commands/import.rb +98 -3
- data/lib/ruby_terraform/commands/init.rb +84 -3
- data/lib/ruby_terraform/commands/login.rb +26 -2
- data/lib/ruby_terraform/commands/logout.rb +23 -2
- data/lib/ruby_terraform/commands/output.rb +34 -2
- data/lib/ruby_terraform/commands/plan.rb +72 -3
- data/lib/ruby_terraform/commands/providers.rb +30 -2
- data/lib/ruby_terraform/commands/providers_lock.rb +72 -3
- data/lib/ruby_terraform/commands/providers_mirror.rb +44 -2
- data/lib/ruby_terraform/commands/providers_schema.rb +21 -2
- data/lib/ruby_terraform/commands/refresh.rb +70 -3
- data/lib/ruby_terraform/commands/show.rb +26 -3
- data/lib/ruby_terraform/commands/state_list.rb +54 -3
- data/lib/ruby_terraform/commands/state_move.rb +64 -6
- data/lib/ruby_terraform/commands/state_pull.rb +24 -2
- data/lib/ruby_terraform/commands/state_push.rb +49 -3
- data/lib/ruby_terraform/commands/state_remove.rb +55 -7
- data/lib/ruby_terraform/commands/state_replace_provider.rb +39 -6
- data/lib/ruby_terraform/commands/state_show.rb +26 -2
- data/lib/ruby_terraform/commands/taint.rb +63 -2
- data/lib/ruby_terraform/commands/untaint.rb +55 -2
- data/lib/ruby_terraform/commands/validate.rb +51 -6
- data/lib/ruby_terraform/commands/workspace_delete.rb +29 -7
- data/lib/ruby_terraform/commands/workspace_list.rb +21 -6
- data/lib/ruby_terraform/commands/workspace_new.rb +28 -7
- data/lib/ruby_terraform/commands/workspace_select.rb +23 -7
- data/lib/ruby_terraform/commands/workspace_show.rb +17 -2
- data/lib/ruby_terraform/options.rb +1 -1
- data/lib/ruby_terraform/options/definition.rb +6 -2
- data/lib/ruby_terraform/options/definitions.rb +12 -3
- data/lib/ruby_terraform/options/{common.rb → global.rb} +2 -1
- data/lib/ruby_terraform/options/types.rb +0 -1
- data/lib/ruby_terraform/options/types/flag.rb +8 -4
- data/lib/ruby_terraform/options/types/standard.rb +20 -6
- data/lib/ruby_terraform/version.rb +1 -1
- data/ruby_terraform.gemspec +3 -2
- metadata +25 -14
- data/lib/ruby_terraform/commands/clean.rb +0 -26
- data/lib/ruby_terraform/commands/remote_config.rb +0 -25
- data/lib/ruby_terraform/options/types/base.rb +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e6f8748d4275fd6af4f13f53eb3440b10012bc05895b1f3e7bf1e4f29614720
|
4
|
+
data.tar.gz: 315faa89600f7f8d31b92b47e66dc500a71bd5ea5c92ab214195a37738f65237
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a30d286d7565203a82a299f210df2c6293999b11b66e6547cf721610648621550552a50d95b6a54363cdbb7414e1f66f00628b3f3086149162deb5df9d6df77f
|
7
|
+
data.tar.gz: 2225cfc75f9233fd5017eee048913ce850c37f85d636f1057786a29c683088a5408c897b3a9845c13381613ac1b12b8b2045d7f69682a0af7081c7b225717f4c
|
data/Gemfile.lock
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ruby-terraform (0.
|
5
|
-
immutable-struct (
|
6
|
-
lino (
|
4
|
+
ruby-terraform (1.0.0)
|
5
|
+
immutable-struct (~> 2.4)
|
6
|
+
lino (~> 2.7)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
activesupport (6.1.3.
|
11
|
+
activesupport (6.1.3.2)
|
12
12
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
13
13
|
i18n (>= 1.6, < 2)
|
14
14
|
minitest (>= 5.1)
|
@@ -22,14 +22,18 @@ GEM
|
|
22
22
|
concurrent-ruby (1.1.8)
|
23
23
|
diff-lcs (1.4.4)
|
24
24
|
docile (1.3.5)
|
25
|
-
excon (0.
|
25
|
+
excon (0.81.0)
|
26
26
|
faker (2.17.0)
|
27
27
|
i18n (>= 1.6, < 2)
|
28
|
-
faraday (1.
|
28
|
+
faraday (1.4.1)
|
29
|
+
faraday-excon (~> 1.1)
|
29
30
|
faraday-net_http (~> 1.0)
|
31
|
+
faraday-net_http_persistent (~> 1.1)
|
30
32
|
multipart-post (>= 1.2, < 3)
|
31
|
-
ruby2_keywords
|
33
|
+
ruby2_keywords (>= 0.0.4)
|
34
|
+
faraday-excon (1.1.0)
|
32
35
|
faraday-net_http (1.0.1)
|
36
|
+
faraday-net_http_persistent (1.1.0)
|
33
37
|
ffi (1.15.0)
|
34
38
|
formatador (0.2.5)
|
35
39
|
gem-release (2.2.1)
|
@@ -52,7 +56,7 @@ GEM
|
|
52
56
|
i18n (1.8.10)
|
53
57
|
concurrent-ruby (~> 1.0)
|
54
58
|
immutable-struct (2.4.1)
|
55
|
-
lino (2.
|
59
|
+
lino (2.7.0)
|
56
60
|
hamster (~> 3.0)
|
57
61
|
open4 (~> 1.3)
|
58
62
|
listen (3.5.1)
|
@@ -66,12 +70,12 @@ GEM
|
|
66
70
|
notiffany (0.1.3)
|
67
71
|
nenv (~> 0.1)
|
68
72
|
shellany (~> 0.0)
|
69
|
-
octokit (4.
|
73
|
+
octokit (4.21.0)
|
70
74
|
faraday (>= 0.9)
|
71
75
|
sawyer (~> 0.8.0, >= 0.5.3)
|
72
76
|
open4 (1.3.4)
|
73
77
|
parallel (1.20.1)
|
74
|
-
parser (3.0.1.
|
78
|
+
parser (3.0.1.1)
|
75
79
|
ast (~> 2.4.1)
|
76
80
|
pry (0.14.1)
|
77
81
|
coderay (~> 1.1)
|
@@ -117,20 +121,20 @@ GEM
|
|
117
121
|
diff-lcs (>= 1.2.0, < 2.0)
|
118
122
|
rspec-support (~> 3.10.0)
|
119
123
|
rspec-support (3.10.2)
|
120
|
-
rubocop (1.
|
124
|
+
rubocop (1.14.0)
|
121
125
|
parallel (~> 1.10)
|
122
126
|
parser (>= 3.0.0.0)
|
123
127
|
rainbow (>= 2.2.2, < 4.0)
|
124
128
|
regexp_parser (>= 1.8, < 3.0)
|
125
129
|
rexml
|
126
|
-
rubocop-ast (>= 1.
|
130
|
+
rubocop-ast (>= 1.5.0, < 2.0)
|
127
131
|
ruby-progressbar (~> 1.7)
|
128
132
|
unicode-display_width (>= 1.4.0, < 3.0)
|
129
|
-
rubocop-ast (1.
|
130
|
-
parser (>=
|
133
|
+
rubocop-ast (1.5.0)
|
134
|
+
parser (>= 3.0.1.1)
|
131
135
|
rubocop-rake (0.5.1)
|
132
136
|
rubocop
|
133
|
-
rubocop-rspec (2.
|
137
|
+
rubocop-rspec (2.3.0)
|
134
138
|
rubocop (~> 1.0)
|
135
139
|
rubocop-ast (>= 1.1.0)
|
136
140
|
ruby-progressbar (1.11.0)
|
@@ -146,12 +150,13 @@ GEM
|
|
146
150
|
simplecov-html (~> 0.11)
|
147
151
|
simplecov_json_formatter (~> 0.1)
|
148
152
|
simplecov-html (0.12.3)
|
149
|
-
simplecov_json_formatter (0.1.
|
153
|
+
simplecov_json_formatter (0.1.3)
|
150
154
|
sshkey (2.0.0)
|
151
155
|
thor (1.1.0)
|
152
156
|
tzinfo (2.0.4)
|
153
157
|
concurrent-ruby (~> 1.0)
|
154
158
|
unicode-display_width (2.0.0)
|
159
|
+
yard (0.9.26)
|
155
160
|
zeitwerk (2.4.2)
|
156
161
|
|
157
162
|
PLATFORMS
|
@@ -174,6 +179,7 @@ DEPENDENCIES
|
|
174
179
|
rubocop-rspec (~> 2.2)
|
175
180
|
ruby-terraform!
|
176
181
|
simplecov (~> 0.21)
|
182
|
+
yard (~> 0.9)
|
177
183
|
|
178
184
|
BUNDLED WITH
|
179
|
-
2.2.
|
185
|
+
2.2.17
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# RubyTerraform
|
2
2
|
|
3
3
|
A simple wrapper around the Terraform binary to allow execution from within
|
4
|
-
a Ruby program or Rakefile.
|
4
|
+
a Ruby program, RSpec test or Rakefile.
|
5
5
|
|
6
6
|
|
7
7
|
## Installation
|
@@ -23,468 +23,161 @@ Or install it yourself as:
|
|
23
23
|
|
24
24
|
## Usage
|
25
25
|
|
26
|
-
|
27
|
-
can do anything. By default, RubyTerraform looks on the path however this can
|
28
|
-
be configured with:
|
26
|
+
To require `RubyTerraform`:
|
29
27
|
|
30
28
|
```ruby
|
31
|
-
|
32
|
-
config.binary = 'vendor/terraform/bin/terraform'
|
33
|
-
end
|
34
|
-
```
|
35
|
-
|
36
|
-
In addition, each command that requires the terraform binary (all except
|
37
|
-
`clean`) takes a `binary` keyword argument at initialisation that overrides the
|
38
|
-
global configuration value.
|
39
|
-
|
40
|
-
Currently, there is partial support for the following commands:
|
41
|
-
* `RubyTerraform::Commands::Clean`: clean up all locally held terraform state
|
42
|
-
and modules.
|
43
|
-
* `RubyTerraform::Commands::Init`: executes `terraform init`
|
44
|
-
* `RubyTerraform::Commands::Get`: executes `terraform get`
|
45
|
-
* `RubyTerraform::Commands::Plan`: executes `terraform plan`
|
46
|
-
* `RubyTerraform::Commands::Apply`: executes `terraform apply`
|
47
|
-
* `RubyTerraform::Commands::Show`: executes `terraform show`
|
48
|
-
* `RubyTerraform::Commands::Destroy`: executes `terraform destroy`
|
49
|
-
* `RubyTerraform::Commands::Output`: executes `terraform output`
|
50
|
-
* `RubyTerraform::Commands::Refresh`: executes `terraform refresh`
|
51
|
-
* `RubyTerraform::Commands::Import`: executes `terraform import`
|
52
|
-
* `RubyTerraform::Commands::RemoteConfig`: executes `terraform remote config`
|
53
|
-
* `RubyTerraform::Commands::Format`: executes `terraform fmt`
|
54
|
-
* `RubyTerraform::Commands::Validate`: executes `terraform validate`
|
55
|
-
* `RubyTerraform::Commands::Workspace`: executes `terraform workspace`
|
56
|
-
|
57
|
-
### RubyTerraform::Commands::Clean
|
58
|
-
|
59
|
-
The clean command can be called in the following ways:
|
60
|
-
|
61
|
-
```ruby
|
62
|
-
RubyTerraform.clean
|
63
|
-
RubyTerraform.clean(directory: 'infra/.terraform')
|
64
|
-
RubyTerraform::Commands::Clean.new(directory: 'infra/.terraform').execute
|
65
|
-
RubyTerraform::Commands::Clean.new.execute(directory: 'infra/.terraform')
|
29
|
+
require 'ruby-terraform'
|
66
30
|
```
|
67
31
|
|
68
|
-
|
69
|
-
working directory by default. If another directory is specified, it instead
|
70
|
-
removes the specified directory.
|
71
|
-
|
72
|
-
|
73
|
-
### RubyTerraform::Commands::Init
|
32
|
+
### Supported versions and commands
|
74
33
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
```ruby
|
79
|
-
RubyTerraform.init
|
80
|
-
RubyTerraform.init(from_module: 'some/module/path', path: 'infra/module')
|
81
|
-
RubyTerraform::Commands::Init.new.execute
|
82
|
-
RubyTerraform::Commands::Init.new.execute(
|
83
|
-
from_module: 'some/module/path',
|
84
|
-
path: 'infra/module')
|
85
|
-
```
|
34
|
+
`RubyTerraform` supports all commands and options up to Terraform 0.15, except
|
35
|
+
`terraform console`, `terraform test` and `terraform version`.
|
86
36
|
|
87
|
-
|
88
|
-
* `from_module`: the source module to use to initialise; required if `path` is
|
89
|
-
specified
|
90
|
-
* `path`: the path to initialise.
|
91
|
-
* `backend`: `true`/`false`, whether or not to configure the backend.
|
92
|
-
* `get`: `true`/`false`, whether or not to get dependency modules.
|
93
|
-
* `backend_config`: a map of backend specific configuration parameters.
|
94
|
-
* `no_color`: whether or not the output from the command should be in color;
|
95
|
-
defaults to `false`.
|
96
|
-
* `plugin_dir`: directory containing plugin binaries. Overrides all default;
|
97
|
-
search paths for plugins and prevents the automatic installation of plugins.
|
37
|
+
### Getting started
|
98
38
|
|
39
|
+
There are a couple of ways to call Terraform using `RubyTerraform`.
|
99
40
|
|
100
|
-
|
41
|
+
Firstly, the `RubyTerraform` module includes class methods for each of the
|
42
|
+
supported Terraform commands. Each class method takes a parameter hash
|
43
|
+
containing options to pass to Terraform.
|
101
44
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
```ruby
|
106
|
-
RubyTerraform.get(directory: 'infra/networking')
|
107
|
-
RubyTerraform::Commands::Get.new.execute(directory: 'infra/networking')
|
108
|
-
```
|
109
|
-
|
110
|
-
The get command supports the following options passed as keyword arguments:
|
111
|
-
* `directory`: the directory containing terraform configuration; required.
|
112
|
-
* `update`: whether or not already downloaded modules should be updated;
|
113
|
-
defaults to `false`.
|
114
|
-
* `no_color`: whether or not the output from the command should be in color;
|
115
|
-
defaults to `false`.
|
116
|
-
|
117
|
-
|
118
|
-
### RubyTerraform::Commands::Plan
|
119
|
-
|
120
|
-
The plan command will generate the execution plan in the provided
|
121
|
-
configuration directory. It can be called in the following ways:
|
45
|
+
For example, to save the plan of changes for a Terraform configuration located
|
46
|
+
under `infra/network` to a file called `network.tfplan` whilst providing some
|
47
|
+
vars:
|
122
48
|
|
123
49
|
```ruby
|
124
50
|
RubyTerraform.plan(
|
125
|
-
|
126
|
-
|
127
|
-
region: 'eu-central'
|
128
|
-
})
|
129
|
-
RubyTerraform::Commands::Plan.new.execute(
|
130
|
-
directory: 'infra/networking',
|
51
|
+
chdir: 'infra/network',
|
52
|
+
out: 'network.tfplan',
|
131
53
|
vars: {
|
132
54
|
region: 'eu-central'
|
133
|
-
}
|
55
|
+
},
|
56
|
+
var_file: 'defaults.tfvars'
|
57
|
+
)
|
134
58
|
```
|
135
59
|
|
136
|
-
|
137
|
-
* `directory`: the directory containing terraform configuration; required.
|
138
|
-
* `vars`: a map of vars to be passed in to the terraform configuration.
|
139
|
-
* `var_file`: the path to a terraform var file; if both `var_file` and
|
140
|
-
`var_files` are provided, all var files will be passed to terraform.
|
141
|
-
* `var_files`: an array of paths to terraform var files; if both `var_file` and
|
142
|
-
`var_files` are provided, all var files will be passed to terraform.
|
143
|
-
* `target`: the address of a resource to target; if both `target` and
|
144
|
-
`targets` are provided, all targets will be passed to terraform.
|
145
|
-
* `targets`: and array of resource addresses to target; if both `target` and
|
146
|
-
`targets` are provided, all targets will be passed to terraform.
|
147
|
-
* `state`: the path to the state file in which to store state; defaults to
|
148
|
-
terraform.tfstate in the working directory or the remote state if configured.
|
149
|
-
* `plan`: the name of the file in which to save the generated plan.
|
150
|
-
* `input`: when `false`, will not ask for input for variables not directly set;
|
151
|
-
defaults to `true`.
|
152
|
-
* `destroy`: when `true`, a plan will be generated to destroy all resources
|
153
|
-
managed by the given configuration and state; defaults to `false`.
|
154
|
-
* `no_color`: whether or not the output from the command should be in color;
|
155
|
-
defaults to `false`.
|
156
|
-
|
157
|
-
|
158
|
-
### RubyTerraform::Commands::Apply
|
159
|
-
|
160
|
-
The apply command applies terraform configuration in the provided terraform
|
161
|
-
configuration directory. It can be called in the following ways:
|
60
|
+
To apply the generated plan of changes:
|
162
61
|
|
163
62
|
```ruby
|
164
63
|
RubyTerraform.apply(
|
165
|
-
|
166
|
-
|
167
|
-
region: 'eu-central'
|
168
|
-
})
|
169
|
-
RubyTerraform::Commands::Apply.new.execute(
|
170
|
-
directory: 'infra/networking',
|
64
|
+
chdir: 'infra/network',
|
65
|
+
plan: 'network.tfplan',
|
171
66
|
vars: {
|
172
67
|
region: 'eu-central'
|
173
|
-
}
|
68
|
+
},
|
69
|
+
var_file: 'defaults.tfvars'
|
70
|
+
)
|
174
71
|
```
|
175
72
|
|
176
|
-
|
177
|
-
* `directory`: the directory containing terraform configuration; required.
|
178
|
-
* `vars`: a map of vars to be passed in to the terraform configuration.
|
179
|
-
* `var_file`: the path to a terraform var file; if both `var_file` and
|
180
|
-
`var_files` are provided, all var files will be passed to terraform.
|
181
|
-
* `var_files`: an array of paths to terraform var files; if both `var_file` and
|
182
|
-
`var_files` are provided, all var files will be passed to terraform.
|
183
|
-
* `target`: the address of a resource to target; if both `target` and
|
184
|
-
`targets` are provided, all targets will be passed to terraform.
|
185
|
-
* `targets`: and array of resource addresses to target; if both `target` and
|
186
|
-
`targets` are provided, all targets will be passed to terraform.
|
187
|
-
* `state`: the path to the state file in which to store state; defaults to
|
188
|
-
terraform.tfstate in the working directory or the remote state if configured.
|
189
|
-
* `backup`: the path to the backup file in which to store the state backup.
|
190
|
-
* `input`: when `false`, will not ask for input for variables not directly set;
|
191
|
-
defaults to `true`.
|
192
|
-
* `no_backup`: when `true`, no backup file will be written; defaults to `false`.
|
193
|
-
* `no_color`: whether or not the output from the command should be in color;
|
194
|
-
defaults to `false`.
|
195
|
-
* `auto_approve`: if `true`, the command applys without prompting the user to
|
196
|
-
confirm the changes; defaults to `false`.
|
197
|
-
|
198
|
-
|
199
|
-
### RubyTerraform::Commands::Show
|
200
|
-
|
201
|
-
The show command produces human-readable output from a state file or a plan
|
202
|
-
file. It can be called in the following ways:
|
203
|
-
|
204
|
-
```ruby
|
205
|
-
RubyTerraform.show(
|
206
|
-
path: 'infra/networking')
|
207
|
-
RubyTerraform::Commands::Show.new.execute(
|
208
|
-
path: 'infra/networking')
|
209
|
-
```
|
210
|
-
|
211
|
-
The show command supports the following options passed as keyword arguments:
|
212
|
-
* `path`: the path to a state or plan file; required.
|
213
|
-
* `no_color`: whether or not the output from the command should be in color;
|
214
|
-
defaults to `false`.
|
215
|
-
* `module_depth`: the depth of modules to show in the output; defaults to
|
216
|
-
showing all modules.
|
217
|
-
* `json`: whether or not the output from the command should be in json format;
|
218
|
-
defaults to `false`.
|
219
|
-
|
220
|
-
### RubyTerraform::Commands::Destroy
|
221
|
-
|
222
|
-
The destroy command destroys all resources defined in the terraform
|
223
|
-
configuration in the provided terraform configuration directory. It can be
|
224
|
-
called in the following ways:
|
73
|
+
...and to destroy the resulting resources:
|
225
74
|
|
226
75
|
```ruby
|
227
76
|
RubyTerraform.destroy(
|
228
|
-
|
77
|
+
chdir: 'infra/network',
|
229
78
|
vars: {
|
230
79
|
region: 'eu-central'
|
231
|
-
}
|
232
|
-
|
233
|
-
|
234
|
-
vars: {
|
235
|
-
region: 'eu-central'
|
236
|
-
})
|
237
|
-
```
|
238
|
-
|
239
|
-
The destroy command supports the following options passed as keyword arguments:
|
240
|
-
* `directory`: the directory containing terraform configuration; required.
|
241
|
-
* `vars`: a map of vars to be passed in to the terraform configuration.
|
242
|
-
* `var_file`: the path to a terraform var file; if both `var_file` and
|
243
|
-
`var_files` are provided, all var files will be passed to terraform.
|
244
|
-
* `var_files`: an array of paths to terraform var files; if both `var_file` and
|
245
|
-
`var_files` are provided, all var files will be passed to terraform.
|
246
|
-
* `target`: the address of a resource to target; if both `target` and
|
247
|
-
`targets` are provided, all targets will be passed to terraform.
|
248
|
-
* `targets`: and array of resource addresses to target; if both `target` and
|
249
|
-
`targets` are provided, all targets will be passed to terraform.
|
250
|
-
* `state`: the path to the state file containing the current state; defaults to
|
251
|
-
terraform.tfstate in the working directory or the remote state if configured.
|
252
|
-
* `force`: if `true`, the command destroys without prompting the user to confirm
|
253
|
-
the destruction; defaults to `false`.
|
254
|
-
* `backup`: the path to the backup file in which to store the state backup.
|
255
|
-
* `no_backup`: when `true`, no backup file will be written; defaults to `false`.
|
256
|
-
* `no_color`: whether or not the output from the command should be in color;
|
257
|
-
defaults to `false`.
|
258
|
-
|
259
|
-
|
260
|
-
### RubyTerraform::Commands::Output
|
261
|
-
|
262
|
-
The output command retrieves an output from a state file. It can be called in
|
263
|
-
the following ways:
|
264
|
-
|
265
|
-
```ruby
|
266
|
-
RubyTerraform.output(name: 'vpc_id')
|
267
|
-
RubyTerraform::Commands::Destroy.new.execute(name: 'vpc_id')
|
80
|
+
},
|
81
|
+
var_file: 'defaults.tfvars'
|
82
|
+
)
|
268
83
|
```
|
269
84
|
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
* `no_color`: whether or not the output from the command should be in color;
|
275
|
-
defaults to `false`.
|
276
|
-
* `module`: the name of a module to retrieve output from.
|
277
|
-
|
278
|
-
|
279
|
-
### RubyTerraform::Commands::Refresh
|
85
|
+
Additionally, `RubyTerraform` allows command instances to be constructed and
|
86
|
+
invoked separately. This is useful when you need to override global
|
87
|
+
configuration on a command by command basis or when you need to pass a command
|
88
|
+
around.
|
280
89
|
|
281
|
-
|
282
|
-
|
90
|
+
Using the command class approach, the equivalent plan invocation above can be
|
91
|
+
achieved using:
|
283
92
|
|
284
93
|
```ruby
|
285
|
-
RubyTerraform.
|
286
|
-
|
94
|
+
command = RubyTerraform::Commands::Plan.new
|
95
|
+
command.execute(
|
96
|
+
chdir: 'infra/network',
|
97
|
+
out: 'network.tfplan',
|
287
98
|
vars: {
|
288
99
|
region: 'eu-central'
|
289
|
-
}
|
290
|
-
|
291
|
-
|
292
|
-
vars: {
|
293
|
-
region: 'eu-central'
|
294
|
-
})
|
100
|
+
},
|
101
|
+
var_file: 'defaults.tfvars'
|
102
|
+
)
|
295
103
|
```
|
296
104
|
|
297
|
-
|
298
|
-
|
299
|
-
* `vars`: a map of vars to be passed in to the terraform configuration.
|
300
|
-
* `var_file`: the path to a terraform var file; if both `var_file` and
|
301
|
-
`var_files` are provided, all var files will be passed to terraform.
|
302
|
-
* `var_files`: an array of paths to terraform var files; if both `var_file` and
|
303
|
-
`var_files` are provided, all var files will be passed to terraform.
|
304
|
-
* `target`: the address of a resource to target; if both `target` and
|
305
|
-
`targets` are provided, all targets will be passed to terraform.
|
306
|
-
* `targets`: and array of resource addresses to target; if both `target` and
|
307
|
-
`targets` are provided, all targets will be passed to terraform.
|
308
|
-
* `state`: the path to the state file in which to store state; defaults to
|
309
|
-
terraform.tfstate in the working directory or the remote state if configured.
|
310
|
-
* `input`: when `false`, will not ask for input for variables not directly set;
|
311
|
-
defaults to `true`.
|
312
|
-
* `no_color`: whether or not the output from the command should be in color;
|
313
|
-
defaults to `false`.
|
314
|
-
|
315
|
-
|
316
|
-
### RubyTerraform::Commands::Import
|
317
|
-
|
318
|
-
The import command imports existing infrastructure into your terraform state.
|
319
|
-
It can be called in the following ways:
|
105
|
+
See the [API docs](https://infrablocks.github.io/ruby_terraform/index.html) for
|
106
|
+
more details on the supported commands.
|
320
107
|
|
321
|
-
|
322
|
-
RubyTerraform.import(
|
323
|
-
directory: 'infra/networking',
|
324
|
-
address: 'a.resource.address',
|
325
|
-
id: 'a-resource-id',
|
326
|
-
vars: {
|
327
|
-
region: 'eu-central'
|
328
|
-
}))
|
329
|
-
RubyTerraform::Commands::Import.new.execute(
|
330
|
-
directory: 'infra/networking',
|
331
|
-
address: 'a.resource.address',
|
332
|
-
id: 'a-resource-id',
|
333
|
-
vars: {
|
334
|
-
region: 'eu-central'
|
335
|
-
}))
|
336
|
-
```
|
108
|
+
### Parameters
|
337
109
|
|
338
|
-
The
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
* `
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
* `no_color`: whether or not the output from the command should be in color;
|
354
|
-
defaults to `false`.
|
355
|
-
|
356
|
-
|
357
|
-
### RubyTerraform::Commands::RemoteConfig
|
358
|
-
|
359
|
-
The remote config command configures storage of state using a remote backend. It
|
360
|
-
has been deprecated and since removed from terraform but is retained in this
|
361
|
-
library for backwards compatibility. It can be called in the following ways:
|
110
|
+
The parameter hash passed to each command, whether via the class methods or the
|
111
|
+
`#execute` method, supports all the options available on the corresponding
|
112
|
+
Terraform command. There are a few different types of options depending on what
|
113
|
+
Terraform expects to receive:
|
114
|
+
|
115
|
+
* `Boolean` options, accepting `true` or `false`, such as `:input` or `:lock`;
|
116
|
+
* `String` options, accepting a single string value, such as `:state` or
|
117
|
+
`:target`;
|
118
|
+
* `Array<String>` options, accepting an array of strings, such as `:var_files`
|
119
|
+
`:targets`; and
|
120
|
+
* `Hash<String,Object>` options, accepting a hash of key value pairs, where the
|
121
|
+
value might be complex, such as `:vars` and `:backend_config`.
|
122
|
+
|
123
|
+
For all options that allow multiple values, both a singular and a plural option
|
124
|
+
key are supported. For example, to specify multiple var files during a plan:
|
362
125
|
|
363
126
|
```ruby
|
364
|
-
RubyTerraform.
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
})
|
371
|
-
RubyTerraform::Commands::RemoteConfig.new.execute(
|
372
|
-
backend: 's3',
|
373
|
-
backend_config: {
|
374
|
-
bucket: 'example-state-bucket',
|
375
|
-
key: 'infra/terraform.tfstate',
|
376
|
-
region: 'eu-west-2'
|
377
|
-
})
|
127
|
+
RubyTerraform.plan(
|
128
|
+
chdir: 'infra/network',
|
129
|
+
out: 'network.tfplan',
|
130
|
+
var_file: 'defaults.tfvars',
|
131
|
+
var_files: %w[environment.tfvars secrets.tfvars]
|
132
|
+
)
|
378
133
|
```
|
379
134
|
|
380
|
-
|
381
|
-
arguments:
|
382
|
-
* `backend`: the type of backend to use; required.
|
383
|
-
* `backend_config`: a map of backend specific configuration parameters;
|
384
|
-
required.
|
385
|
-
* `no_color`: whether or not the output from the command should be in color;
|
386
|
-
defaults to `false`.
|
135
|
+
In this case, all three var files are passed to Terraform.
|
387
136
|
|
388
|
-
|
137
|
+
Some options have aliases. For example, the `:out` option can also be provided
|
138
|
+
as `:plan` for symmetry with other terraform commands. However, in such
|
139
|
+
situations only one of the aliases should be used in the provided parameters
|
140
|
+
hash.
|
389
141
|
|
390
|
-
|
142
|
+
See the [API docs](https://infrablocks.github.io/ruby_terraform/index.html) for
|
143
|
+
a more complete listing of available parameter options.
|
391
144
|
|
392
|
-
|
393
|
-
RubyTerraform.format(
|
394
|
-
directory: 'infra/networking',
|
395
|
-
vars: {
|
396
|
-
region: 'eu-central'
|
397
|
-
})
|
398
|
-
RubyTerraform::Commands::Format.new.execute(
|
399
|
-
directory: 'infra/networking',
|
400
|
-
vars: {
|
401
|
-
region: 'eu-central'
|
402
|
-
})
|
403
|
-
```
|
145
|
+
### Configuration
|
404
146
|
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
* `list`: Don't list files whose formatting differs;
|
410
|
-
defaults to `false`.
|
411
|
-
* `write`: Don't write to source files;
|
412
|
-
defaults to `false`.
|
413
|
-
* `check`: Checks if the input is formatted, exit status will be 0 if all input is properly formatted and non zero otherwise;
|
414
|
-
defaults to `false`.
|
415
|
-
* `diff`: Displays a diff of the formatting changes;
|
416
|
-
defaults to `false`.
|
417
|
-
* `no_color`: whether or not the output from the command should be in color;
|
418
|
-
defaults to `false`.
|
419
|
-
|
420
|
-
### RubyTerraform::Commands::Validate
|
147
|
+
`RubyTerraform` uses sensible defaults for all configuration options. However,
|
148
|
+
there are a couple of ways to override the defaults when they are sufficient.
|
149
|
+
|
150
|
+
#### Binary
|
421
151
|
|
422
|
-
|
423
|
-
|
152
|
+
By default, `RubyTerraform` looks for the Terraform binary on the system path.
|
153
|
+
To globally configure a specific binary location:
|
424
154
|
|
425
155
|
```ruby
|
426
|
-
RubyTerraform.
|
427
|
-
|
428
|
-
|
429
|
-
region: 'eu-central'
|
430
|
-
})
|
431
|
-
RubyTerraform::Commands::Validate.new.execute(
|
432
|
-
directory: 'infra/networking',
|
433
|
-
vars: {
|
434
|
-
region: 'eu-central'
|
435
|
-
})
|
156
|
+
RubyTerraform.configure do |config|
|
157
|
+
config.binary = 'vendor/terraform/bin/terraform'
|
158
|
+
end
|
436
159
|
```
|
437
160
|
|
438
|
-
|
439
|
-
|
440
|
-
* `vars`: a map of vars to be passed in to the terraform configuration.
|
441
|
-
* `var_file`: the path to a terraform var file; if both `var_file` and
|
442
|
-
`var_files` are provided, all var files will be passed to terraform.
|
443
|
-
* `var_files`: an array of paths to terraform var files; if both `var_file` and
|
444
|
-
`var_files` are provided, all var files will be passed to terraform.
|
445
|
-
* `no_color`: whether or not the output from the command should be in color;
|
446
|
-
defaults to `false`.
|
447
|
-
* `check_variables`: if `true`, the command checks whether all variables have
|
448
|
-
been provided; defaults to `true`.
|
449
|
-
* `json`: whether or not the output from the command should be in json format;
|
450
|
-
defaults to `false`.
|
451
|
-
|
452
|
-
### RubyTerraform::Commands::Workspace
|
453
|
-
|
454
|
-
The `workspace` command configures
|
455
|
-
[Terraform Workspaces](https://www.terraform.io/docs/state/workspaces.html#using-workspaces).
|
456
|
-
It can be used as follows:
|
161
|
+
To configure the Terraform binary on a command by command basis, for example for
|
162
|
+
the `Plan` command:
|
457
163
|
|
458
164
|
```ruby
|
459
|
-
RubyTerraform.
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
165
|
+
command = RubyTerraform::Commands::Plan.new(
|
166
|
+
binary: 'vendor/terraform/bin/terraform'
|
167
|
+
)
|
168
|
+
command.execute(
|
169
|
+
# ...
|
170
|
+
)
|
465
171
|
```
|
466
172
|
|
467
|
-
|
468
|
-
* `directory`: the directory containing terraform configuration, the default is
|
469
|
-
the current path.
|
470
|
-
* `operation`: `list`, `select`, `new` or `delete`. default `list`.
|
471
|
-
* `workspace`: Workspace name.
|
173
|
+
#### Logging
|
472
174
|
|
175
|
+
By default, `RubyTerraform` 's own log statements are logged to `$stdout` with
|
176
|
+
level `info`.
|
473
177
|
|
474
|
-
|
178
|
+
To globally configure a custom logger:
|
475
179
|
|
476
|
-
|
477
|
-
offers configuration of logging and standard streams. By default standard
|
478
|
-
streams map to `$stdin`, `$stdout` and `$stderr` and all logging goes to
|
479
|
-
`$stdout`.
|
480
|
-
|
481
|
-
### Logging
|
482
|
-
|
483
|
-
By default, RubyTerraform logs to `$stdout` with level `info`.
|
484
|
-
|
485
|
-
To configure a custom logger:
|
486
|
-
|
487
|
-
``` ruby
|
180
|
+
```ruby
|
488
181
|
require 'logger'
|
489
182
|
|
490
183
|
logger = Logger.new($stdout)
|
@@ -495,13 +188,13 @@ RubyTerraform.configure do |config|
|
|
495
188
|
end
|
496
189
|
```
|
497
190
|
|
498
|
-
RubyTerraform supports logging to multiple different outputs at once,
|
191
|
+
`RubyTerraform` supports logging to multiple different outputs at once,
|
499
192
|
for example:
|
500
193
|
|
501
|
-
```
|
194
|
+
```ruby
|
502
195
|
require 'logger'
|
503
196
|
|
504
|
-
log_file = Logger::LogDevice.new('/foo/bar.log')
|
197
|
+
log_file = Logger::LogDevice.new('/foo/bar.log')
|
505
198
|
logger = Logger.new(RubyTerraform::MultiIO.new(STDOUT, log_file), level: :debug)
|
506
199
|
|
507
200
|
RubyTerraform.configure do |config|
|
@@ -511,18 +204,37 @@ RubyTerraform.configure do |config|
|
|
511
204
|
config.stderr = logger
|
512
205
|
end
|
513
206
|
```
|
514
|
-
> Creating the Logger with a file this way (using `Logger::LogDevice`),
|
207
|
+
> Creating the Logger with a file this way (using `Logger::LogDevice`),
|
208
|
+
> guarantees that the buffer content will be saved/written, as it sets
|
209
|
+
> **implicit flushing**.
|
210
|
+
|
211
|
+
Configured in this way, any logging performed by `RubyTerraform` will log to
|
212
|
+
both `STDOUT` and the provided `log_file`.
|
515
213
|
|
516
|
-
|
517
|
-
`
|
214
|
+
To configure the logger on a command by command basis, for example for the
|
215
|
+
`Show` command:
|
518
216
|
|
519
|
-
|
217
|
+
```ruby
|
218
|
+
require 'logger'
|
520
219
|
|
521
|
-
|
220
|
+
logger = Logger.new($stdout)
|
221
|
+
logger.level = Logger::DEBUG
|
222
|
+
|
223
|
+
command = RubyTerraform::Commands::Show.new(
|
224
|
+
logger: logger
|
225
|
+
)
|
226
|
+
command.execute(
|
227
|
+
# ...
|
228
|
+
)
|
229
|
+
```
|
230
|
+
|
231
|
+
#### Standard streams
|
232
|
+
|
233
|
+
By default, `RubyTerraform` uses streams `$stdin`, `$stdout` and `$stderr`.
|
522
234
|
|
523
235
|
To configure custom output and error streams:
|
524
236
|
|
525
|
-
```
|
237
|
+
```ruby
|
526
238
|
log_file = File.open('path/to/some/ruby_terraform.log', 'a')
|
527
239
|
|
528
240
|
RubyTerraform.configure do |config|
|
@@ -535,7 +247,7 @@ In this way, both outputs will be redirected to `log_file`.
|
|
535
247
|
|
536
248
|
Similarly, a custom input stream can be configured:
|
537
249
|
|
538
|
-
```
|
250
|
+
```ruby
|
539
251
|
require 'stringio'
|
540
252
|
|
541
253
|
input = StringIO.new("user\ninput\n")
|
@@ -548,6 +260,28 @@ end
|
|
548
260
|
In this way, terraform can be driven by input from somewhere other than
|
549
261
|
interactive input from the terminal.
|
550
262
|
|
263
|
+
To configure the standard streams on a command by command basis, for example for
|
264
|
+
the `Init` command:
|
265
|
+
|
266
|
+
```ruby
|
267
|
+
require 'logger'
|
268
|
+
|
269
|
+
input = StringIO.new("user\ninput\n")
|
270
|
+
log_file = File.open('path/to/some/ruby_terraform.log', 'a')
|
271
|
+
|
272
|
+
command = RubyTerraform::Commands::Init.new(
|
273
|
+
stdin: input,
|
274
|
+
stdout: log_file,
|
275
|
+
stderr: log_file
|
276
|
+
)
|
277
|
+
command.execute(
|
278
|
+
# ...
|
279
|
+
)
|
280
|
+
```
|
281
|
+
|
282
|
+
## Documentation
|
283
|
+
|
284
|
+
* [API docs](https://infrablocks.github.io/ruby_terraform/index.html)
|
551
285
|
|
552
286
|
## Development
|
553
287
|
|