ruby-terraform 0.4.0 → 0.5.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 +3 -3
- data/README.md +184 -9
- data/lib/ruby_terraform/commands/plan.rb +30 -0
- data/lib/ruby_terraform/commands.rb +1 -0
- data/lib/ruby_terraform/version.rb +1 -1
- data/lib/ruby_terraform.rb +13 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 495ef01318ddc57c37fb25cf6c04c4e9db15cd28
|
4
|
+
data.tar.gz: 2809580c9ace7a4af184cb699b0ee94759421767
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9181054e31a60c8c8c21e9f6dc69ce842db9b6eb0b7672ec3b1146e50fe2357ff437c055ade4682b1108661fc85001774ca206b259b4d80513572cdc8280460c
|
7
|
+
data.tar.gz: 474597664db46e457dbd770efed5a46d4b34d37017c64663d1da8a21b46b4f31c2632c0220aac216ae0c84ed7f4086f3076e90d1111b1f5c3fab6ae132858930
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ruby-terraform (0.
|
4
|
+
ruby-terraform (0.5.0)
|
5
5
|
lino (~> 1.1)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
concurrent-ruby (1.0.
|
10
|
+
concurrent-ruby (1.0.5)
|
11
11
|
diff-lcs (1.3)
|
12
12
|
gem-release (0.7.4)
|
13
13
|
hamster (3.0.0)
|
@@ -42,4 +42,4 @@ DEPENDENCIES
|
|
42
42
|
ruby-terraform!
|
43
43
|
|
44
44
|
BUNDLED WITH
|
45
|
-
1.14.
|
45
|
+
1.14.5
|
data/README.md
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
# RubyTerraform
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
3
|
+
A simple wrapper around the Terraform binary to allow execution from within
|
4
|
+
a Ruby program or Rakefile.
|
6
5
|
|
7
6
|
## Installation
|
8
7
|
|
@@ -20,22 +19,198 @@ Or install it yourself as:
|
|
20
19
|
|
21
20
|
$ gem install ruby_terraform
|
22
21
|
|
22
|
+
|
23
23
|
## Usage
|
24
24
|
|
25
|
-
|
25
|
+
RubyTerraform needs to know where the terraform binary is located before it
|
26
|
+
can do anything. By default, RubyTerraform looks on the path however this can
|
27
|
+
be configured with:
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
RubyTerraform.configure do |config|
|
31
|
+
config.binary = 'vendor/terraform/bin/terraform'
|
32
|
+
end
|
33
|
+
```
|
34
|
+
|
35
|
+
In addition, each command that requires the terraform binary (all except
|
36
|
+
`clean`) takes a `binary` keyword argument at initialisation that overrides the
|
37
|
+
global configuration value.
|
38
|
+
|
39
|
+
Currently, there is partial support for the following commands:
|
40
|
+
* `RubyTerraform::Commands::Clean`: clean up all locally held terraform state
|
41
|
+
and modules.
|
42
|
+
* `RubyTerraform::Commands::Get`: executes `terraform get`
|
43
|
+
* `RubyTerraform::Commands::Apply`: executes `terraform apply`
|
44
|
+
* `RubyTerraform::Commands::Destroy`: executes `terraform destroy`
|
45
|
+
* `RubyTerraform::Commands::Output`: executes `terraform output`
|
46
|
+
* `RubyTerraform::Commands::RemoteConfig`: executes `terraform remote config`
|
47
|
+
|
48
|
+
### RubyTerraform::Commands::Clean
|
49
|
+
|
50
|
+
The clean command can be called in the following ways:
|
51
|
+
|
52
|
+
```ruby
|
53
|
+
RubyTerraform.clean
|
54
|
+
RubyTerraform.clean(directory: 'infra/.terraform')
|
55
|
+
RubyTerraform::Commands::Clean.new(base_directory: 'infra').execute
|
56
|
+
RubyTerraform::Commands::Clean.new.execute(directory: 'infra/.terraform')
|
57
|
+
```
|
58
|
+
|
59
|
+
When called, it removes the contents of the .terraform directory in the
|
60
|
+
working directory by default. If another directory is specified, it instead
|
61
|
+
removes the specified directory. If the base directory is specified, it
|
62
|
+
removes the .terraform directory from within the base directory.
|
63
|
+
|
64
|
+
|
65
|
+
### RubyTerraform::Commands::Get
|
66
|
+
|
67
|
+
The get command will fetch any modules referenced in the provided terraform
|
68
|
+
configuration directory. It can be called in the following ways:
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
RubyTerraform.get(directory: 'infra/networking')
|
72
|
+
RubyTerraforn::Commands::Get.new.execute(directory: 'infra/networking')
|
73
|
+
```
|
74
|
+
|
75
|
+
The get command supports the following options passed as keyword arguments:
|
76
|
+
* `directory`: the directory containing terraform configuration; required.
|
77
|
+
* `update`: whether or not already downloaded modules should be updated;
|
78
|
+
defaults to `false`.
|
79
|
+
* `no_color`: whether or not the output from the command should be in color;
|
80
|
+
defaults to `false`.
|
81
|
+
|
82
|
+
|
83
|
+
### RubyTerraform::Commands::Apply
|
84
|
+
|
85
|
+
The apply command applies terraform configuration in the provided terraform
|
86
|
+
configuration directory. It can be called in the following ways:
|
87
|
+
|
88
|
+
```ruby
|
89
|
+
RubyTerraform.apply(
|
90
|
+
directory: 'infra/networking',
|
91
|
+
vars: {
|
92
|
+
region: 'eu-central'
|
93
|
+
})
|
94
|
+
RubyTerraform::Commands::Apply.new.execute(
|
95
|
+
directory: 'infra/networking',
|
96
|
+
vars: {
|
97
|
+
region: 'eu-central'
|
98
|
+
})
|
99
|
+
```
|
100
|
+
|
101
|
+
The apply command supports the following options passed as keyword arguments:
|
102
|
+
* `directory`: the directory containing terraform configuration; required.
|
103
|
+
* `vars`: a map of vars to be passed in to the terraform configuration.
|
104
|
+
* `state`: the path to the state file in which to store state; defaults to
|
105
|
+
terraform.tfstate in the working directory or the remote state if configured.
|
106
|
+
* `backup`: the path to the backup file in which to store the state backup.
|
107
|
+
* `no_backup`: when `true`, no backup file will be written; defaults to `false`.
|
108
|
+
* `no_color`: whether or not the output from the command should be in color;
|
109
|
+
defaults to `false`.
|
110
|
+
|
111
|
+
|
112
|
+
### RubyTerraform::Commands::Destroy
|
113
|
+
|
114
|
+
The destroy command destroys all resources defined in the terraform
|
115
|
+
configuration in the provided terraform configuration directory. It can be
|
116
|
+
called in the following ways:
|
117
|
+
|
118
|
+
```ruby
|
119
|
+
RubyTerraform.destroy(
|
120
|
+
directory: 'infra/networking',
|
121
|
+
vars: {
|
122
|
+
region: 'eu-central'
|
123
|
+
})
|
124
|
+
RubyTerraform::Commands::Destroy.new.execute(
|
125
|
+
directory: 'infra/networking',
|
126
|
+
vars: {
|
127
|
+
region: 'eu-central'
|
128
|
+
})
|
129
|
+
```
|
130
|
+
|
131
|
+
The destroy command supports the following options passed as keyword arguments:
|
132
|
+
* `directory`: the directory containing terraform configuration; required.
|
133
|
+
* `vars`: a map of vars to be passed in to the terraform configuration.
|
134
|
+
* `state`: the path to the state file containing the current state; defaults to
|
135
|
+
terraform.tfstate in the working directory or the remote state if configured.
|
136
|
+
* `force`: if `true`, the command destroys without prompting the user to confirm
|
137
|
+
the destruction; defaults to `false`.
|
138
|
+
* `backup`: the path to the backup file in which to store the state backup.
|
139
|
+
* `no_backup`: when `true`, no backup file will be written; defaults to `false`.
|
140
|
+
* `no_color`: whether or not the output from the command should be in color;
|
141
|
+
defaults to `false`.
|
142
|
+
|
143
|
+
|
144
|
+
### RubyTerraform::Commands::Output
|
145
|
+
|
146
|
+
The output command retrieves an output from a state file. It can be called in
|
147
|
+
the following ways:
|
148
|
+
|
149
|
+
```ruby
|
150
|
+
RubyTerraform.output(name: 'vpc_id')
|
151
|
+
RubyTerraform::Commands::Destroy.new.execute(name: 'vpc_id')
|
152
|
+
```
|
153
|
+
|
154
|
+
The output command supports the following options passed as keyword arguments:
|
155
|
+
* `name`: the name of the output to retrieve; required.
|
156
|
+
* `state`: the path to the state file containing the current state; defaults to
|
157
|
+
terraform.tfstate in the working directory or the remote state if configured.
|
158
|
+
* `no_color`: whether or not the output from the command should be in color;
|
159
|
+
defaults to `false`.
|
160
|
+
|
161
|
+
|
162
|
+
### RubyTerraform::Commands::RemoteConfig
|
163
|
+
|
164
|
+
The remote config command configures storage of state using a remote backend. It
|
165
|
+
can be called in the following ways:
|
166
|
+
|
167
|
+
```ruby
|
168
|
+
RubyTerraform.remote_config(
|
169
|
+
backend: 's3',
|
170
|
+
backend_config: {
|
171
|
+
bucket: 'example-state-bucket',
|
172
|
+
key: 'infra/terraform.tfstate',
|
173
|
+
region: 'eu-west-2'
|
174
|
+
})
|
175
|
+
RubyTerraform::Commands::RemoteConfig.new.execute(
|
176
|
+
backend: 's3',
|
177
|
+
backend_config: {
|
178
|
+
bucket: 'example-state-bucket',
|
179
|
+
key: 'infra/terraform.tfstate',
|
180
|
+
region: 'eu-west-2'
|
181
|
+
})
|
182
|
+
```
|
183
|
+
|
184
|
+
The remote config command supports the following options passed as keyword
|
185
|
+
arguments:
|
186
|
+
* `backend`: the type of backend to use; required.
|
187
|
+
* `backend_config`: a map of backend specific configuration parameters;
|
188
|
+
required.
|
189
|
+
* `no_color`: whether or not the output from the command should be in color;
|
190
|
+
defaults to `false`.
|
191
|
+
|
26
192
|
|
27
193
|
## Development
|
28
194
|
|
29
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then,
|
195
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then,
|
196
|
+
run `rake spec` to run the tests. You can also run `bin/console` for an
|
197
|
+
interactive prompt that will allow you to experiment.
|
30
198
|
|
31
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To
|
199
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To
|
200
|
+
release a new version, update the version number in `version.rb`, and then run
|
201
|
+
`bundle exec rake release`, which will create a git tag for the version, push
|
202
|
+
git commits and tags, and push the `.gem` file to
|
203
|
+
[rubygems.org](https://rubygems.org).
|
32
204
|
|
33
205
|
## Contributing
|
34
206
|
|
35
|
-
Bug reports and pull requests are welcome on GitHub at
|
207
|
+
Bug reports and pull requests are welcome on GitHub at
|
208
|
+
https://github.com/tobyclemson/ruby_terraform. This project is intended to be a
|
209
|
+
safe, welcoming space for collaboration, and contributors are expected to adhere
|
210
|
+
to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
36
211
|
|
37
212
|
|
38
213
|
## License
|
39
214
|
|
40
|
-
The gem is available as open source under the terms of the
|
41
|
-
|
215
|
+
The gem is available as open source under the terms of the
|
216
|
+
[MIT License](http://opensource.org/licenses/MIT).
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'lino'
|
2
|
+
require_relative 'base'
|
3
|
+
|
4
|
+
module RubyTerraform
|
5
|
+
module Commands
|
6
|
+
class Plan < Base
|
7
|
+
def configure_command(builder, opts)
|
8
|
+
directory = opts[:directory]
|
9
|
+
vars = opts[:vars] || {}
|
10
|
+
state = opts[:state]
|
11
|
+
plan = opts[:plan]
|
12
|
+
destroy = opts[:destroy]
|
13
|
+
no_color = opts[:no_color]
|
14
|
+
|
15
|
+
builder
|
16
|
+
.with_subcommand('plan') do |sub|
|
17
|
+
vars.each do |key, value|
|
18
|
+
sub = sub.with_option('-var', "'#{key}=#{value}'", separator: ' ')
|
19
|
+
end
|
20
|
+
sub = sub.with_option('-state', state) if state
|
21
|
+
sub = sub.with_option('-out', plan) if plan
|
22
|
+
sub = sub.with_flag('-destroy') if destroy
|
23
|
+
sub = sub.with_flag('-no-color') if no_color
|
24
|
+
sub
|
25
|
+
end
|
26
|
+
.with_argument(directory)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/ruby_terraform.rb
CHANGED
@@ -24,6 +24,10 @@ module RubyTerraform
|
|
24
24
|
Commands::Get.new.execute(opts)
|
25
25
|
end
|
26
26
|
|
27
|
+
def plan(opts = {})
|
28
|
+
Commands::Plan.new.execute(opts)
|
29
|
+
end
|
30
|
+
|
27
31
|
def apply(opts = {})
|
28
32
|
Commands::Apply.new.execute(opts)
|
29
33
|
end
|
@@ -39,6 +43,15 @@ module RubyTerraform
|
|
39
43
|
def output(opts = {})
|
40
44
|
Commands::Output.new.execute(opts)
|
41
45
|
end
|
46
|
+
|
47
|
+
def output_from_remote(opts)
|
48
|
+
output_name = opts[:name]
|
49
|
+
remote_opts = opts[:remote]
|
50
|
+
|
51
|
+
clean
|
52
|
+
remote_config(remote_opts)
|
53
|
+
output(name: output_name)
|
54
|
+
end
|
42
55
|
end
|
43
56
|
extend ClassMethods
|
44
57
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-terraform
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Toby Clemson
|
@@ -108,6 +108,7 @@ files:
|
|
108
108
|
- lib/ruby_terraform/commands/destroy.rb
|
109
109
|
- lib/ruby_terraform/commands/get.rb
|
110
110
|
- lib/ruby_terraform/commands/output.rb
|
111
|
+
- lib/ruby_terraform/commands/plan.rb
|
111
112
|
- lib/ruby_terraform/commands/remote_config.rb
|
112
113
|
- lib/ruby_terraform/version.rb
|
113
114
|
- ruby_terraform.gemspec
|
@@ -131,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
131
132
|
version: '0'
|
132
133
|
requirements: []
|
133
134
|
rubyforge_project:
|
134
|
-
rubygems_version: 2.
|
135
|
+
rubygems_version: 2.0.14.1
|
135
136
|
signing_key:
|
136
137
|
specification_version: 4
|
137
138
|
summary: A simple Ruby wrapper for invoking Terraform commands.
|