ruby-terraform 0.65.0.pre.8 → 0.65.0.pre.13
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 +2 -0
- data/Gemfile.lock +11 -6
- data/Rakefile +7 -3
- data/bin/console +1 -0
- data/lib/ruby-terraform.rb +2 -0
- data/lib/ruby_terraform.rb +61 -4
- data/lib/ruby_terraform/commands.rb +31 -8
- data/lib/ruby_terraform/commands/apply.rb +19 -12
- data/lib/ruby_terraform/commands/base.rb +32 -39
- data/lib/ruby_terraform/commands/clean.rb +4 -2
- data/lib/ruby_terraform/commands/destroy.rb +24 -13
- data/lib/ruby_terraform/commands/force_unlock.rb +24 -0
- data/lib/ruby_terraform/commands/format.rb +16 -12
- data/lib/ruby_terraform/commands/get.rb +13 -8
- data/lib/ruby_terraform/commands/graph.rb +24 -0
- data/lib/ruby_terraform/commands/import.rb +22 -11
- data/lib/ruby_terraform/commands/init.rb +21 -9
- data/lib/ruby_terraform/commands/login.rb +20 -0
- data/lib/ruby_terraform/commands/logout.rb +20 -0
- data/lib/ruby_terraform/commands/output.rb +17 -15
- data/lib/ruby_terraform/commands/plan.rb +20 -9
- data/lib/ruby_terraform/commands/providers.rb +16 -0
- data/lib/ruby_terraform/commands/providers_lock.rb +28 -0
- data/lib/ruby_terraform/commands/providers_mirror.rb +24 -0
- data/lib/ruby_terraform/commands/providers_schema.rb +25 -0
- data/lib/ruby_terraform/commands/refresh.rb +23 -8
- data/lib/ruby_terraform/commands/remote_config.rb +8 -6
- data/lib/ruby_terraform/commands/show.rb +13 -9
- data/lib/ruby_terraform/commands/state_list.rb +20 -0
- data/lib/ruby_terraform/commands/state_move.rb +34 -0
- data/lib/ruby_terraform/commands/state_pull.rb +16 -0
- data/lib/ruby_terraform/commands/state_push.rb +24 -0
- data/lib/ruby_terraform/commands/state_remove.rb +32 -0
- data/lib/ruby_terraform/commands/state_replace_provider.rb +35 -0
- data/lib/ruby_terraform/commands/state_show.rb +24 -0
- data/lib/ruby_terraform/commands/taint.rb +36 -0
- data/lib/ruby_terraform/commands/untaint.rb +37 -0
- data/lib/ruby_terraform/commands/validate.rb +14 -13
- data/lib/ruby_terraform/commands/workspace_delete.rb +32 -0
- data/lib/ruby_terraform/commands/workspace_list.rb +24 -0
- data/lib/ruby_terraform/commands/workspace_new.rb +32 -0
- data/lib/ruby_terraform/commands/workspace_select.rb +24 -0
- data/lib/ruby_terraform/commands/workspace_show.rb +16 -0
- data/lib/ruby_terraform/errors.rb +2 -0
- data/lib/ruby_terraform/errors/execution_error.rb +2 -0
- data/lib/ruby_terraform/options.rb +28 -3
- data/lib/ruby_terraform/options/common.rb +11 -0
- data/lib/ruby_terraform/options/definition.rb +170 -0
- data/lib/ruby_terraform/options/definitions.rb +103 -0
- data/lib/ruby_terraform/options/factory.rb +12 -101
- data/lib/ruby_terraform/options/name.rb +13 -19
- data/lib/ruby_terraform/options/types.rb +27 -0
- data/lib/ruby_terraform/options/types/base.rb +8 -13
- data/lib/ruby_terraform/options/types/flag.rb +3 -3
- data/lib/ruby_terraform/options/types/standard.rb +3 -27
- data/lib/ruby_terraform/options/values.rb +38 -0
- data/lib/ruby_terraform/options/values/base.rb +15 -0
- data/lib/ruby_terraform/options/values/boolean.rb +15 -11
- data/lib/ruby_terraform/options/values/complex.rb +19 -0
- data/lib/ruby_terraform/options/values/key_value.rb +21 -0
- data/lib/ruby_terraform/options/values/string.rb +17 -0
- data/lib/ruby_terraform/output.rb +9 -7
- data/lib/ruby_terraform/version.rb +3 -1
- data/ruby_terraform.gemspec +59 -0
- metadata +64 -6
- data/lib/ruby_terraform/commands/workspace.rb +0 -24
- data/lib/ruby_terraform/options/types/boolean.rb +0 -16
@@ -0,0 +1,103 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyTerraform
|
4
|
+
module Options
|
5
|
+
DEFINITIONS =
|
6
|
+
[
|
7
|
+
# complex repeatable options with space separator
|
8
|
+
%w[-var].map do |o|
|
9
|
+
definition(
|
10
|
+
name: o, option_type: :standard, value_type: :complex,
|
11
|
+
repeatable: true, separator: ' '
|
12
|
+
)
|
13
|
+
end,
|
14
|
+
|
15
|
+
# complex repeatable options with default separator
|
16
|
+
%w[-backend-config].map do |o|
|
17
|
+
definition(
|
18
|
+
name: o, option_type: :standard, value_type: :complex,
|
19
|
+
repeatable: true,
|
20
|
+
override_keys: { singular: false, plural: :backend_config }
|
21
|
+
)
|
22
|
+
end,
|
23
|
+
|
24
|
+
# string repeatable options
|
25
|
+
%w[-var-file -target -platform].map do |o|
|
26
|
+
definition(
|
27
|
+
name: o, option_type: :standard, value_type: :string,
|
28
|
+
repeatable: true
|
29
|
+
)
|
30
|
+
end,
|
31
|
+
|
32
|
+
# boolean options
|
33
|
+
%w[
|
34
|
+
-auto-approve
|
35
|
+
-backend
|
36
|
+
-get
|
37
|
+
-get-plugins
|
38
|
+
-input
|
39
|
+
-list
|
40
|
+
-lock
|
41
|
+
-refresh
|
42
|
+
-upgrade
|
43
|
+
-verify-plugins
|
44
|
+
-write
|
45
|
+
].map do |o|
|
46
|
+
definition(name: o, option_type: :standard, value_type: :boolean)
|
47
|
+
end,
|
48
|
+
|
49
|
+
# flag options
|
50
|
+
%w[
|
51
|
+
-allow-missing
|
52
|
+
-allow-missing-config
|
53
|
+
-check
|
54
|
+
-compact-warnings
|
55
|
+
-destroy
|
56
|
+
-detailed-exitcode
|
57
|
+
-diff
|
58
|
+
-draw-cycles
|
59
|
+
-force
|
60
|
+
-force-copy
|
61
|
+
-ignore-remote-version
|
62
|
+
-json
|
63
|
+
-no-color
|
64
|
+
-raw
|
65
|
+
-reconfigure
|
66
|
+
-recursive
|
67
|
+
-update
|
68
|
+
].map do |o|
|
69
|
+
definition(name: o, option_type: :flag, value_type: :boolean)
|
70
|
+
end,
|
71
|
+
|
72
|
+
# string options
|
73
|
+
%w[
|
74
|
+
-backup
|
75
|
+
-backup-out
|
76
|
+
-chdir
|
77
|
+
-from-module
|
78
|
+
-fs-mirror
|
79
|
+
-lock-timeout
|
80
|
+
-module-depth
|
81
|
+
-net-mirror
|
82
|
+
-parallelism
|
83
|
+
-plugin-dir
|
84
|
+
-provider
|
85
|
+
-state
|
86
|
+
-state-out
|
87
|
+
-type
|
88
|
+
].map do |o|
|
89
|
+
definition(name: o, option_type: :standard, value_type: :string)
|
90
|
+
end,
|
91
|
+
|
92
|
+
# string options with extra keys
|
93
|
+
definition(
|
94
|
+
name: '-config', option_type: :standard, value_type: :string,
|
95
|
+
extra_keys: { singular: %i[directory] }
|
96
|
+
),
|
97
|
+
definition(
|
98
|
+
name: '-out', option_type: :standard, value_type: :string,
|
99
|
+
extra_keys: { singular: %i[plan] }
|
100
|
+
)
|
101
|
+
].flatten.freeze
|
102
|
+
end
|
103
|
+
end
|
@@ -1,115 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'name'
|
2
|
-
require_relative 'types/boolean'
|
3
|
-
require_relative 'types/flag'
|
4
|
-
require_relative 'types/standard'
|
5
4
|
|
6
5
|
module RubyTerraform
|
7
6
|
module Options
|
8
7
|
class Factory
|
9
|
-
|
10
|
-
|
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
|
8
|
+
def initialize(definitions)
|
9
|
+
@definitions = definitions
|
66
10
|
end
|
67
11
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
def from
|
76
|
-
names.each_with_object([]) do |name, options|
|
77
|
-
options.append(*options_from_name(name))
|
78
|
-
end
|
12
|
+
def resolve(names, parameters)
|
13
|
+
names
|
14
|
+
.map { |name| Name.new(name) }
|
15
|
+
.inject([]) do |options, name|
|
16
|
+
options + resolve_name(name, parameters)
|
17
|
+
end
|
79
18
|
end
|
80
19
|
|
81
20
|
private
|
82
21
|
|
83
|
-
|
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)
|
22
|
+
def resolve_name(name, parameters)
|
23
|
+
@definitions.find { |d| d.matches?(name) }.build(parameters)
|
113
24
|
end
|
114
25
|
end
|
115
26
|
end
|
@@ -1,19 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'immutable-struct'
|
4
|
+
|
1
5
|
module RubyTerraform
|
2
6
|
module Options
|
3
|
-
class Name
|
7
|
+
class Name < ImmutableStruct.new(:name)
|
4
8
|
def initialize(name)
|
5
|
-
|
9
|
+
super(name: name.to_s)
|
6
10
|
end
|
7
11
|
|
8
|
-
def
|
9
|
-
@name[0] == '-' ? @name[1..] : @name
|
10
|
-
end
|
11
|
-
|
12
|
-
def to_s
|
12
|
+
def name
|
13
13
|
"-#{without_prefix}"
|
14
14
|
end
|
15
15
|
|
16
|
-
|
16
|
+
alias to_s name
|
17
|
+
|
18
|
+
def as_singular_key
|
17
19
|
snake_case.to_sym
|
18
20
|
end
|
19
21
|
|
@@ -21,20 +23,12 @@ module RubyTerraform
|
|
21
23
|
"#{snake_case}s".to_sym
|
22
24
|
end
|
23
25
|
|
24
|
-
|
25
|
-
to_s == other
|
26
|
-
end
|
27
|
-
|
28
|
-
def eql?(other)
|
29
|
-
to_s == other
|
30
|
-
end
|
26
|
+
private
|
31
27
|
|
32
|
-
def
|
33
|
-
|
28
|
+
def without_prefix
|
29
|
+
@name.sub(/^-+/, '')
|
34
30
|
end
|
35
31
|
|
36
|
-
private
|
37
|
-
|
38
32
|
def snake_case
|
39
33
|
without_prefix.gsub('-', '_')
|
40
34
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'types/base'
|
4
|
+
require_relative 'types/standard'
|
5
|
+
require_relative 'types/flag'
|
6
|
+
|
7
|
+
module RubyTerraform
|
8
|
+
module Options
|
9
|
+
module Types
|
10
|
+
def self.standard(name, value, **opts)
|
11
|
+
Standard.new(name, value, **opts)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.flag(name, value)
|
15
|
+
Flag.new(name, value)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.resolve(type)
|
19
|
+
case type
|
20
|
+
when :standard then Types::Standard
|
21
|
+
when :flag then Types::Flag
|
22
|
+
else type
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -1,22 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'immutable-struct'
|
4
|
+
|
1
5
|
module RubyTerraform
|
2
6
|
module Options
|
3
7
|
module Types
|
4
|
-
class Base
|
5
|
-
def initialize(name, value)
|
6
|
-
|
7
|
-
coerce_value(value)
|
8
|
+
class Base < ImmutableStruct.new(:name, :value, :separator)
|
9
|
+
def initialize(name, value, **opts)
|
10
|
+
super(name: name, value: value, separator: opts[:separator])
|
8
11
|
end
|
9
12
|
|
10
13
|
def apply(_builder)
|
11
|
-
raise '
|
12
|
-
end
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
attr_reader :name, :value
|
17
|
-
|
18
|
-
def coerce_value(value)
|
19
|
-
@value = value
|
14
|
+
raise 'Not implemented.'
|
20
15
|
end
|
21
16
|
end
|
22
17
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'base'
|
2
4
|
require_relative '../values/boolean'
|
3
5
|
|
@@ -5,10 +7,8 @@ module RubyTerraform
|
|
5
7
|
module Options
|
6
8
|
module Types
|
7
9
|
class Flag < Base
|
8
|
-
include Values::Boolean
|
9
|
-
|
10
10
|
def apply(builder)
|
11
|
-
value ? builder.with_flag(name) : builder
|
11
|
+
value.resolve ? builder.with_flag(name) : builder
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'json'
|
2
4
|
|
3
5
|
require_relative 'base'
|
@@ -7,33 +9,7 @@ module RubyTerraform
|
|
7
9
|
module Types
|
8
10
|
class Standard < Base
|
9
11
|
def apply(builder)
|
10
|
-
|
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)
|
12
|
+
builder.with_option(name, value.render, separator: separator)
|
37
13
|
end
|
38
14
|
end
|
39
15
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'values/boolean'
|
4
|
+
require_relative 'values/string'
|
5
|
+
require_relative 'values/complex'
|
6
|
+
require_relative 'values/key_value'
|
7
|
+
|
8
|
+
module RubyTerraform
|
9
|
+
module Options
|
10
|
+
module Values
|
11
|
+
def self.boolean(value)
|
12
|
+
Boolean.new(value)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.string(value)
|
16
|
+
String.new(value)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.complex(value)
|
20
|
+
Complex.new(value)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.key_value(key, value)
|
24
|
+
KeyValue.new(key, value)
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.resolve(type)
|
28
|
+
case type
|
29
|
+
when :string then Values::String
|
30
|
+
when :boolean then Values::Boolean
|
31
|
+
when :complex then Values::Complex
|
32
|
+
when :key_value then Values::KeyValue
|
33
|
+
else type
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|