ruby-terraform 0.65.0.pre.3 → 0.65.0.pre.8
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 +5 -5
- data/lib/ruby_terraform.rb +20 -54
- data/lib/ruby_terraform/commands/apply.rb +30 -40
- data/lib/ruby_terraform/commands/base.rb +58 -15
- data/lib/ruby_terraform/commands/destroy.rb +26 -38
- 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 -34
- data/lib/ruby_terraform/commands/output.rb +19 -20
- data/lib/ruby_terraform/commands/plan.rb +22 -37
- data/lib/ruby_terraform/commands/refresh.rb +20 -33
- data/lib/ruby_terraform/commands/remote_config.rb +12 -16
- data/lib/ruby_terraform/commands/show.rb +13 -15
- data/lib/ruby_terraform/commands/validate.rb +20 -30
- data/lib/ruby_terraform/commands/workspace.rb +13 -10
- 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 +12 -4
@@ -3,18 +3,21 @@ require_relative 'base'
|
|
3
3
|
module RubyTerraform
|
4
4
|
module Commands
|
5
5
|
class Workspace < Base
|
6
|
-
def
|
7
|
-
|
8
|
-
|
9
|
-
|
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
|
10
14
|
|
11
|
-
|
12
|
-
|
13
|
-
|
15
|
+
def arguments(values)
|
16
|
+
[values[:directory]]
|
17
|
+
end
|
14
18
|
|
15
|
-
|
16
|
-
|
17
|
-
builder.with_argument(directory)
|
19
|
+
def option_default_values(_opts)
|
20
|
+
{ directory: nil, operation: 'list', workspace: nil }
|
18
21
|
end
|
19
22
|
end
|
20
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.8
|
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
|
@@ -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
|