ruby-terraform 0.65.0.pre.2 → 0.65.0.pre.7
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 +10 -10
- data/README.md +29 -9
- data/Rakefile +19 -3
- data/lib/ruby_terraform.rb +20 -54
- data/lib/ruby_terraform/commands/apply.rb +30 -39
- data/lib/ruby_terraform/commands/base.rb +58 -15
- data/lib/ruby_terraform/commands/destroy.rb +26 -37
- data/lib/ruby_terraform/commands/format.rb +15 -19
- data/lib/ruby_terraform/commands/get.rb +13 -8
- data/lib/ruby_terraform/commands/import.rb +25 -36
- data/lib/ruby_terraform/commands/init.rb +19 -27
- data/lib/ruby_terraform/commands/output.rb +19 -20
- data/lib/ruby_terraform/commands/plan.rb +22 -36
- data/lib/ruby_terraform/commands/refresh.rb +20 -32
- data/lib/ruby_terraform/commands/remote_config.rb +12 -15
- data/lib/ruby_terraform/commands/show.rb +13 -15
- data/lib/ruby_terraform/commands/validate.rb +20 -29
- data/lib/ruby_terraform/commands/workspace.rb +13 -12
- data/lib/ruby_terraform/options.rb +5 -0
- data/lib/ruby_terraform/options/factory.rb +116 -0
- data/lib/ruby_terraform/options/name.rb +43 -0
- data/lib/ruby_terraform/options/types/base.rb +24 -0
- data/lib/ruby_terraform/options/types/boolean.rb +16 -0
- data/lib/ruby_terraform/options/types/flag.rb +16 -0
- data/lib/ruby_terraform/options/types/standard.rb +41 -0
- data/lib/ruby_terraform/options/values/boolean.rb +29 -0
- data/lib/ruby_terraform/output.rb +15 -11
- data/lib/ruby_terraform/version.rb +1 -1
- metadata +32 -24
@@ -1,38 +1,29 @@
|
|
1
|
-
require 'json'
|
2
1
|
require_relative 'base'
|
3
2
|
|
4
3
|
module RubyTerraform
|
5
4
|
module Commands
|
6
5
|
class Validate < Base
|
7
|
-
def
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
6
|
+
def switches
|
7
|
+
%w[
|
8
|
+
-check-variables
|
9
|
+
-json
|
10
|
+
-no-color
|
11
|
+
-state
|
12
|
+
-var
|
13
|
+
-var-file
|
14
|
+
]
|
15
|
+
end
|
16
|
+
|
17
|
+
def subcommands(_values)
|
18
|
+
%w[validate]
|
19
|
+
end
|
20
|
+
|
21
|
+
def arguments(values)
|
22
|
+
[values[:directory]]
|
23
|
+
end
|
16
24
|
|
17
|
-
|
18
|
-
|
19
|
-
vars.each do |key, value|
|
20
|
-
var_value = value.is_a?(String) ? value : JSON.generate(value)
|
21
|
-
sub = sub.with_option(
|
22
|
-
'-var', "'#{key}=#{var_value}'", separator: ' ')
|
23
|
-
end
|
24
|
-
sub = sub.with_option('-var-file', var_file) if var_file
|
25
|
-
var_files.each do |file|
|
26
|
-
sub = sub.with_option('-var-file', file)
|
27
|
-
end
|
28
|
-
sub = sub.with_option('-state', state) if state
|
29
|
-
sub = sub.with_option('-check-variables', check_variables) unless
|
30
|
-
check_variables.nil?
|
31
|
-
sub = sub.with_flag('-no-color') if no_color
|
32
|
-
sub = sub.with_flag('-json') if json_format
|
33
|
-
sub
|
34
|
-
end
|
35
|
-
.with_argument(directory)
|
25
|
+
def option_default_values(_opts)
|
26
|
+
{ vars: {}, var_files: [] }
|
36
27
|
end
|
37
28
|
end
|
38
29
|
end
|
@@ -3,20 +3,21 @@ require_relative 'base'
|
|
3
3
|
module RubyTerraform
|
4
4
|
module Commands
|
5
5
|
class Workspace < Base
|
6
|
-
def
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
6
|
+
def subcommands(values)
|
7
|
+
commands = ['workspace', values[:operation]]
|
8
|
+
if values[:workspace] && values[:operation] != 'list'
|
9
|
+
commands << values[:workspace]
|
10
|
+
else
|
11
|
+
commands
|
12
|
+
end
|
13
|
+
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
def arguments(values)
|
16
|
+
[values[:directory]]
|
17
|
+
end
|
18
18
|
|
19
|
-
|
19
|
+
def option_default_values(_opts)
|
20
|
+
{ directory: nil, operation: 'list', workspace: nil }
|
20
21
|
end
|
21
22
|
end
|
22
23
|
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require_relative 'name'
|
2
|
+
require_relative 'types/boolean'
|
3
|
+
require_relative 'types/flag'
|
4
|
+
require_relative 'types/standard'
|
5
|
+
|
6
|
+
module RubyTerraform
|
7
|
+
module Options
|
8
|
+
class Factory
|
9
|
+
PLURAL_OPTIONS =
|
10
|
+
Set.new(
|
11
|
+
%w[
|
12
|
+
-var
|
13
|
+
-target
|
14
|
+
-var-file
|
15
|
+
]
|
16
|
+
).freeze
|
17
|
+
|
18
|
+
BOOLEAN_OPTIONS =
|
19
|
+
Set.new(
|
20
|
+
%w[
|
21
|
+
-auto-approve
|
22
|
+
-backend
|
23
|
+
-get
|
24
|
+
-get-plugins
|
25
|
+
-input
|
26
|
+
-list
|
27
|
+
-lock
|
28
|
+
-refresh
|
29
|
+
-upgrade
|
30
|
+
-verify-plugins
|
31
|
+
-write
|
32
|
+
]
|
33
|
+
).freeze
|
34
|
+
|
35
|
+
FLAG_OPTIONS =
|
36
|
+
Set.new(
|
37
|
+
%w[
|
38
|
+
-allow-missing
|
39
|
+
-allow-missing-config
|
40
|
+
-check
|
41
|
+
-compact-warnings
|
42
|
+
-destroy
|
43
|
+
-detailed-exitcode
|
44
|
+
-diff
|
45
|
+
-draw-cycles
|
46
|
+
-force
|
47
|
+
-force-copy
|
48
|
+
-ignore-remote-version
|
49
|
+
-json
|
50
|
+
-no-color
|
51
|
+
-raw
|
52
|
+
-reconfigure
|
53
|
+
-recursive
|
54
|
+
-update
|
55
|
+
]
|
56
|
+
).freeze
|
57
|
+
|
58
|
+
OVERRIDE_OPTIONS =
|
59
|
+
{
|
60
|
+
config: :directory,
|
61
|
+
out: :plan
|
62
|
+
}.freeze
|
63
|
+
|
64
|
+
def self.from(values, switches)
|
65
|
+
new(values, switches).from
|
66
|
+
end
|
67
|
+
|
68
|
+
private_class_method :new
|
69
|
+
|
70
|
+
def initialize(values, names)
|
71
|
+
@names = names.map { |switch| Name.new(switch) }
|
72
|
+
@values = values
|
73
|
+
end
|
74
|
+
|
75
|
+
def from
|
76
|
+
names.each_with_object([]) do |name, options|
|
77
|
+
options.append(*options_from_name(name))
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
private
|
82
|
+
|
83
|
+
attr_reader :names, :values
|
84
|
+
|
85
|
+
def options_from_name(name)
|
86
|
+
return plural_options(name) if PLURAL_OPTIONS.include?(name)
|
87
|
+
return boolean_option(name) if BOOLEAN_OPTIONS.include?(name)
|
88
|
+
return flag_option(name) if FLAG_OPTIONS.include?(name)
|
89
|
+
return override_option(name) if OVERRIDE_OPTIONS.key?(name.as_key)
|
90
|
+
|
91
|
+
standard_option(name, name.as_key)
|
92
|
+
end
|
93
|
+
|
94
|
+
def boolean_option(name)
|
95
|
+
[Types::Boolean.new(name.to_s, values[name.as_key])]
|
96
|
+
end
|
97
|
+
|
98
|
+
def flag_option(name)
|
99
|
+
[Types::Flag.new(name.to_s, values[name.as_key])]
|
100
|
+
end
|
101
|
+
|
102
|
+
def standard_option(name, hash_key)
|
103
|
+
[Types::Standard.new(name.to_s, values[hash_key])]
|
104
|
+
end
|
105
|
+
|
106
|
+
def override_option(name)
|
107
|
+
standard_option(name, OVERRIDE_OPTIONS[name.as_key])
|
108
|
+
end
|
109
|
+
|
110
|
+
def plural_options(name)
|
111
|
+
standard_option(name.to_s, name.as_key) +
|
112
|
+
standard_option(name.to_s, name.as_plural_key)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module RubyTerraform
|
2
|
+
module Options
|
3
|
+
class Name
|
4
|
+
def initialize(name)
|
5
|
+
@name = name
|
6
|
+
end
|
7
|
+
|
8
|
+
def without_prefix
|
9
|
+
@name[0] == '-' ? @name[1..] : @name
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_s
|
13
|
+
"-#{without_prefix}"
|
14
|
+
end
|
15
|
+
|
16
|
+
def as_key
|
17
|
+
snake_case.to_sym
|
18
|
+
end
|
19
|
+
|
20
|
+
def as_plural_key
|
21
|
+
"#{snake_case}s".to_sym
|
22
|
+
end
|
23
|
+
|
24
|
+
def ==(other)
|
25
|
+
to_s == other
|
26
|
+
end
|
27
|
+
|
28
|
+
def eql?(other)
|
29
|
+
to_s == other
|
30
|
+
end
|
31
|
+
|
32
|
+
def hash
|
33
|
+
to_s.hash
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def snake_case
|
39
|
+
without_prefix.gsub('-', '_')
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module RubyTerraform
|
2
|
+
module Options
|
3
|
+
module Types
|
4
|
+
class Base
|
5
|
+
def initialize(name, value)
|
6
|
+
@name = name
|
7
|
+
coerce_value(value)
|
8
|
+
end
|
9
|
+
|
10
|
+
def apply(_builder)
|
11
|
+
raise 'not implemented'
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
attr_reader :name, :value
|
17
|
+
|
18
|
+
def coerce_value(value)
|
19
|
+
@value = value
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
require_relative '../values/boolean'
|
3
|
+
|
4
|
+
module RubyTerraform
|
5
|
+
module Options
|
6
|
+
module Types
|
7
|
+
class Boolean < Base
|
8
|
+
include Values::Boolean
|
9
|
+
|
10
|
+
def apply(builder)
|
11
|
+
builder.with_option(name, value)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
require_relative '../values/boolean'
|
3
|
+
|
4
|
+
module RubyTerraform
|
5
|
+
module Options
|
6
|
+
module Types
|
7
|
+
class Flag < Base
|
8
|
+
include Values::Boolean
|
9
|
+
|
10
|
+
def apply(builder)
|
11
|
+
value ? builder.with_flag(name) : builder
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module RubyTerraform
|
6
|
+
module Options
|
7
|
+
module Types
|
8
|
+
class Standard < Base
|
9
|
+
def apply(builder)
|
10
|
+
if value.respond_to?(:keys)
|
11
|
+
apply_hash(builder)
|
12
|
+
elsif value.respond_to?(:each)
|
13
|
+
apply_array(builder)
|
14
|
+
else
|
15
|
+
builder.with_option(name, value)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def apply_hash(builder)
|
22
|
+
builder.with_repeated_option(
|
23
|
+
name,
|
24
|
+
value.map do |hash_key, hash_value|
|
25
|
+
"'#{hash_key}=#{as_string(hash_value)}'"
|
26
|
+
end,
|
27
|
+
separator: ' '
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
def apply_array(builder)
|
32
|
+
builder.with_repeated_option(name, value)
|
33
|
+
end
|
34
|
+
|
35
|
+
def as_string(value)
|
36
|
+
value.is_a?(String) ? value : JSON.generate(value)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module RubyTerraform
|
2
|
+
module Options
|
3
|
+
module Values
|
4
|
+
module Boolean
|
5
|
+
def coerce_value(value)
|
6
|
+
@value = to_boolean(value)
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def to_boolean(value)
|
12
|
+
return nil if value.nil?
|
13
|
+
return value if a_boolean?(value)
|
14
|
+
return true if true_as_string?(value)
|
15
|
+
|
16
|
+
false
|
17
|
+
end
|
18
|
+
|
19
|
+
def a_boolean?(value)
|
20
|
+
value.is_a?(TrueClass) || value.is_a?(FalseClass)
|
21
|
+
end
|
22
|
+
|
23
|
+
def true_as_string?(value)
|
24
|
+
value.respond_to?(:downcase) && value.downcase == 'true'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -1,20 +1,24 @@
|
|
1
1
|
module RubyTerraform
|
2
2
|
class Output
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
class << self
|
4
|
+
def for(opts)
|
5
|
+
Dir.chdir(create_config_directory(opts)) do
|
6
|
+
RubyTerraform.init(backend_config: opts[:backend_config])
|
7
|
+
RubyTerraform.output(name: opts[:name])
|
8
|
+
end
|
9
|
+
end
|
6
10
|
|
7
|
-
|
8
|
-
work_directory = opts[:work_directory]
|
11
|
+
private
|
9
12
|
|
10
|
-
|
13
|
+
def create_config_directory(opts)
|
14
|
+
source_directory = opts[:source_directory]
|
15
|
+
work_directory = opts[:work_directory]
|
11
16
|
|
12
|
-
|
13
|
-
|
17
|
+
configuration_directory = File.join(work_directory, source_directory)
|
18
|
+
FileUtils.mkdir_p File.dirname(configuration_directory)
|
19
|
+
FileUtils.cp_r source_directory, configuration_directory
|
14
20
|
|
15
|
-
|
16
|
-
RubyTerraform.init(backend_config: backend_config)
|
17
|
-
RubyTerraform.output(name: name)
|
21
|
+
configuration_directory
|
18
22
|
end
|
19
23
|
end
|
20
24
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-terraform
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.65.0.pre.
|
4
|
+
version: 0.65.0.pre.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Toby Clemson
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-04-
|
11
|
+
date: 2021-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: lino
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.3'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,30 +70,30 @@ dependencies:
|
|
70
70
|
name: guard
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '2.16'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '2.16'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: guard-rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '4.7'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '4.7'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rake
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -182,44 +182,44 @@ dependencies:
|
|
182
182
|
name: rubocop
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
|
-
- - "
|
185
|
+
- - "~>"
|
186
186
|
- !ruby/object:Gem::Version
|
187
|
-
version: '
|
187
|
+
version: '1.12'
|
188
188
|
type: :development
|
189
189
|
prerelease: false
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
192
|
-
- - "
|
192
|
+
- - "~>"
|
193
193
|
- !ruby/object:Gem::Version
|
194
|
-
version: '
|
194
|
+
version: '1.12'
|
195
195
|
- !ruby/object:Gem::Dependency
|
196
196
|
name: rubocop-rspec
|
197
197
|
requirement: !ruby/object:Gem::Requirement
|
198
198
|
requirements:
|
199
|
-
- - "
|
199
|
+
- - "~>"
|
200
200
|
- !ruby/object:Gem::Version
|
201
|
-
version: '
|
201
|
+
version: '2.2'
|
202
202
|
type: :development
|
203
203
|
prerelease: false
|
204
204
|
version_requirements: !ruby/object:Gem::Requirement
|
205
205
|
requirements:
|
206
|
-
- - "
|
206
|
+
- - "~>"
|
207
207
|
- !ruby/object:Gem::Version
|
208
|
-
version: '
|
208
|
+
version: '2.2'
|
209
209
|
- !ruby/object:Gem::Dependency
|
210
210
|
name: simplecov
|
211
211
|
requirement: !ruby/object:Gem::Requirement
|
212
212
|
requirements:
|
213
|
-
- - "
|
213
|
+
- - "~>"
|
214
214
|
- !ruby/object:Gem::Version
|
215
|
-
version: '0'
|
215
|
+
version: '0.21'
|
216
216
|
type: :development
|
217
217
|
prerelease: false
|
218
218
|
version_requirements: !ruby/object:Gem::Requirement
|
219
219
|
requirements:
|
220
|
-
- - "
|
220
|
+
- - "~>"
|
221
221
|
- !ruby/object:Gem::Version
|
222
|
-
version: '0'
|
222
|
+
version: '0.21'
|
223
223
|
description: Wraps the Terraform CLI so that Terraform can be invoked from a Ruby
|
224
224
|
script or Rakefile.
|
225
225
|
email:
|
@@ -256,6 +256,14 @@ files:
|
|
256
256
|
- lib/ruby_terraform/commands/workspace.rb
|
257
257
|
- lib/ruby_terraform/errors.rb
|
258
258
|
- lib/ruby_terraform/errors/execution_error.rb
|
259
|
+
- lib/ruby_terraform/options.rb
|
260
|
+
- lib/ruby_terraform/options/factory.rb
|
261
|
+
- lib/ruby_terraform/options/name.rb
|
262
|
+
- lib/ruby_terraform/options/types/base.rb
|
263
|
+
- lib/ruby_terraform/options/types/boolean.rb
|
264
|
+
- lib/ruby_terraform/options/types/flag.rb
|
265
|
+
- lib/ruby_terraform/options/types/standard.rb
|
266
|
+
- lib/ruby_terraform/options/values/boolean.rb
|
259
267
|
- lib/ruby_terraform/output.rb
|
260
268
|
- lib/ruby_terraform/version.rb
|
261
269
|
homepage: https://github.com/infrablocks/ruby_terraform
|