ruby-terraform 0.65.0.pre.7 → 0.65.0.pre.12
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,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
require_relative '../options/common'
|
5
|
+
|
6
|
+
module RubyTerraform
|
7
|
+
module Commands
|
8
|
+
class Untaint < Base
|
9
|
+
include RubyTerraform::Options::Common
|
10
|
+
|
11
|
+
def subcommands
|
12
|
+
%w[untaint]
|
13
|
+
end
|
14
|
+
|
15
|
+
def options
|
16
|
+
%w[
|
17
|
+
-allow-missing
|
18
|
+
-backup
|
19
|
+
-lock
|
20
|
+
-lock-timeout
|
21
|
+
-no-color
|
22
|
+
-state
|
23
|
+
-state-out
|
24
|
+
-ignore-remote-version
|
25
|
+
] + super
|
26
|
+
end
|
27
|
+
|
28
|
+
def arguments(parameters)
|
29
|
+
[parameters[:name]]
|
30
|
+
end
|
31
|
+
|
32
|
+
def parameter_overrides(parameters)
|
33
|
+
{ backup: parameters[:no_backup] ? '-' : parameters[:backup] }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -1,28 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'base'
|
4
|
+
require_relative '../options/common'
|
2
5
|
|
3
6
|
module RubyTerraform
|
4
7
|
module Commands
|
5
8
|
class Validate < Base
|
6
|
-
|
9
|
+
include RubyTerraform::Options::Common
|
10
|
+
|
11
|
+
def subcommands
|
12
|
+
%w[validate]
|
13
|
+
end
|
14
|
+
|
15
|
+
def options
|
7
16
|
%w[
|
8
|
-
-check-variables
|
9
17
|
-json
|
10
18
|
-no-color
|
11
|
-
|
12
|
-
-var
|
13
|
-
-var-file
|
14
|
-
]
|
15
|
-
end
|
16
|
-
|
17
|
-
def subcommands(_values)
|
18
|
-
%w[validate]
|
19
|
+
] + super
|
19
20
|
end
|
20
21
|
|
21
|
-
def arguments(
|
22
|
-
[
|
22
|
+
def arguments(parameters)
|
23
|
+
[parameters[:directory]]
|
23
24
|
end
|
24
25
|
|
25
|
-
def
|
26
|
+
def parameter_defaults(_parameters)
|
26
27
|
{ vars: {}, var_files: [] }
|
27
28
|
end
|
28
29
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
require_relative '../options/common'
|
5
|
+
|
6
|
+
module RubyTerraform
|
7
|
+
module Commands
|
8
|
+
class WorkspaceDelete < Base
|
9
|
+
include RubyTerraform::Options::Common
|
10
|
+
|
11
|
+
def subcommands
|
12
|
+
%w[workspace delete]
|
13
|
+
end
|
14
|
+
|
15
|
+
def options
|
16
|
+
%w[
|
17
|
+
-force
|
18
|
+
-lock
|
19
|
+
-lock-timeout
|
20
|
+
] + super
|
21
|
+
end
|
22
|
+
|
23
|
+
def arguments(parameters)
|
24
|
+
[parameters[:workspace], parameters[:directory]]
|
25
|
+
end
|
26
|
+
|
27
|
+
def parameter_defaults(_parameters)
|
28
|
+
{ directory: nil }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
require_relative '../options/common'
|
5
|
+
|
6
|
+
module RubyTerraform
|
7
|
+
module Commands
|
8
|
+
class WorkspaceList < Base
|
9
|
+
include RubyTerraform::Options::Common
|
10
|
+
|
11
|
+
def subcommands
|
12
|
+
%w[workspace list]
|
13
|
+
end
|
14
|
+
|
15
|
+
def arguments(parameters)
|
16
|
+
[parameters[:directory]]
|
17
|
+
end
|
18
|
+
|
19
|
+
def parameter_defaults(_parameters)
|
20
|
+
{ directory: nil }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
require_relative '../options/common'
|
5
|
+
|
6
|
+
module RubyTerraform
|
7
|
+
module Commands
|
8
|
+
class WorkspaceNew < Base
|
9
|
+
include RubyTerraform::Options::Common
|
10
|
+
|
11
|
+
def subcommands
|
12
|
+
%w[workspace new]
|
13
|
+
end
|
14
|
+
|
15
|
+
def options
|
16
|
+
%w[
|
17
|
+
-lock
|
18
|
+
-lock-timeout
|
19
|
+
-state
|
20
|
+
] + super
|
21
|
+
end
|
22
|
+
|
23
|
+
def arguments(parameters)
|
24
|
+
[parameters[:workspace], parameters[:directory]]
|
25
|
+
end
|
26
|
+
|
27
|
+
def parameter_defaults(_parameters)
|
28
|
+
{ directory: nil }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
require_relative '../options/common'
|
5
|
+
|
6
|
+
module RubyTerraform
|
7
|
+
module Commands
|
8
|
+
class WorkspaceSelect < Base
|
9
|
+
include RubyTerraform::Options::Common
|
10
|
+
|
11
|
+
def subcommands
|
12
|
+
%w[workspace select]
|
13
|
+
end
|
14
|
+
|
15
|
+
def arguments(parameters)
|
16
|
+
[parameters[:workspace], parameters[:directory]]
|
17
|
+
end
|
18
|
+
|
19
|
+
def parameter_defaults(_parameters)
|
20
|
+
{ directory: nil }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
require_relative '../options/common'
|
5
|
+
|
6
|
+
module RubyTerraform
|
7
|
+
module Commands
|
8
|
+
class WorkspaceShow < Base
|
9
|
+
include RubyTerraform::Options::Common
|
10
|
+
|
11
|
+
def subcommands
|
12
|
+
%w[workspace show]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -1,5 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'options/name'
|
2
|
-
require_relative 'options/types
|
3
|
-
require_relative 'options/
|
4
|
-
require_relative 'options/
|
4
|
+
require_relative 'options/types'
|
5
|
+
require_relative 'options/values'
|
6
|
+
require_relative 'options/definition'
|
5
7
|
require_relative 'options/factory'
|
8
|
+
require_relative 'options/common'
|
9
|
+
|
10
|
+
module RubyTerraform
|
11
|
+
module Options
|
12
|
+
def self.name(name)
|
13
|
+
Name.new(name)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.definition(opts)
|
17
|
+
Definition.new(opts)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.types
|
21
|
+
Types
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.values
|
25
|
+
Values
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
require_relative 'options/definitions'
|
@@ -0,0 +1,170 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'immutable-struct'
|
4
|
+
|
5
|
+
require_relative 'name'
|
6
|
+
require_relative 'types'
|
7
|
+
require_relative 'values'
|
8
|
+
|
9
|
+
module RubyTerraform
|
10
|
+
module Options
|
11
|
+
# rubocop:disable Metrics/ClassLength
|
12
|
+
class Definition < ImmutableStruct.new(
|
13
|
+
:name,
|
14
|
+
:option_type,
|
15
|
+
:value_type,
|
16
|
+
:override_keys,
|
17
|
+
:extra_keys,
|
18
|
+
:separator,
|
19
|
+
:repeatable?
|
20
|
+
)
|
21
|
+
def initialize(opts) # rubocop:disable Metrics/MethodLength
|
22
|
+
raise 'Missing name.' unless opts[:name]
|
23
|
+
|
24
|
+
super(
|
25
|
+
name: Name.new(opts[:name]),
|
26
|
+
option_type: Types.resolve(opts[:option_type]) || Types::Standard,
|
27
|
+
value_type: Values.resolve(opts[:value_type]) || Values::String,
|
28
|
+
repeatable: opts[:repeatable] || false,
|
29
|
+
separator: opts[:separator],
|
30
|
+
extra_keys:
|
31
|
+
{ singular: [], plural: [] }
|
32
|
+
.merge(opts[:extra_keys] || {}),
|
33
|
+
override_keys:
|
34
|
+
{ singular: nil, plural: nil }
|
35
|
+
.merge(opts[:override_keys] || {})
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
def matches?(name)
|
40
|
+
@name == Name.new(name)
|
41
|
+
end
|
42
|
+
|
43
|
+
def build(parameters)
|
44
|
+
build_singular_options(parameters) + build_plural_options(parameters)
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def resolved_singular_key
|
50
|
+
if override_keys[:singular] == false
|
51
|
+
nil
|
52
|
+
else
|
53
|
+
override_keys[:singular] || name.as_singular_key
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def all_singular_keys
|
58
|
+
([resolved_singular_key] + extra_keys[:singular]).compact
|
59
|
+
end
|
60
|
+
|
61
|
+
def resolved_plural_key
|
62
|
+
if override_keys[:plural] == false
|
63
|
+
nil
|
64
|
+
else
|
65
|
+
override_keys[:plural] || name.as_plural_key
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def all_plural_keys
|
70
|
+
([resolved_plural_key] + extra_keys[:plural]).compact
|
71
|
+
end
|
72
|
+
|
73
|
+
def too_many_values?(values)
|
74
|
+
!repeatable? && values.length > 1
|
75
|
+
end
|
76
|
+
|
77
|
+
def values(parameters, keys)
|
78
|
+
keys.map { |k| parameters[k] }.compact
|
79
|
+
end
|
80
|
+
|
81
|
+
def needs_plural?(value)
|
82
|
+
repeatable? && !value.nil?
|
83
|
+
end
|
84
|
+
|
85
|
+
def only_singular?(value)
|
86
|
+
!needs_plural?(value)
|
87
|
+
end
|
88
|
+
|
89
|
+
def key_valued?(value)
|
90
|
+
value.respond_to?(:keys)
|
91
|
+
end
|
92
|
+
|
93
|
+
def multi_valued?(value)
|
94
|
+
value.respond_to?(:each)
|
95
|
+
end
|
96
|
+
|
97
|
+
def build_option(value)
|
98
|
+
option_type.new(name, value, separator: separator)
|
99
|
+
end
|
100
|
+
|
101
|
+
def build_value(value)
|
102
|
+
value_type.new(value)
|
103
|
+
end
|
104
|
+
|
105
|
+
def build_key_value(key, value)
|
106
|
+
Values::KeyValue.new(key, build_value(value))
|
107
|
+
end
|
108
|
+
|
109
|
+
def build_singular(value)
|
110
|
+
build_single_option(value)
|
111
|
+
end
|
112
|
+
|
113
|
+
def build_singulars(values)
|
114
|
+
values.map { |p| build_singular(p) }.flatten
|
115
|
+
end
|
116
|
+
|
117
|
+
def build_singular_options(parameters)
|
118
|
+
keys = all_singular_keys
|
119
|
+
values = values(parameters, keys)
|
120
|
+
|
121
|
+
if too_many_values?(values)
|
122
|
+
raise "Multiple values provided for '#{name}' " \
|
123
|
+
"(with keys #{keys}) and option not repeatable."
|
124
|
+
end
|
125
|
+
|
126
|
+
build_singulars(values)
|
127
|
+
end
|
128
|
+
|
129
|
+
def build_plural(value)
|
130
|
+
if only_singular?(value)
|
131
|
+
build_no_options
|
132
|
+
elsif key_valued?(value)
|
133
|
+
build_key_value_options(value)
|
134
|
+
elsif multi_valued?(value)
|
135
|
+
build_multiple_options(value)
|
136
|
+
else
|
137
|
+
build_single_option(value)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
def build_plurals(values)
|
142
|
+
values.map { |p| build_plural(p) }.flatten
|
143
|
+
end
|
144
|
+
|
145
|
+
def build_plural_options(parameters)
|
146
|
+
keys = all_plural_keys
|
147
|
+
values = values(parameters, keys)
|
148
|
+
|
149
|
+
build_plurals(values)
|
150
|
+
end
|
151
|
+
|
152
|
+
def build_key_value_options(value)
|
153
|
+
value.map { |k, v| build_option(build_key_value(k, v)) }
|
154
|
+
end
|
155
|
+
|
156
|
+
def build_multiple_options(value)
|
157
|
+
value.map { |v| build_option(build_value(v)) }
|
158
|
+
end
|
159
|
+
|
160
|
+
def build_single_option(value)
|
161
|
+
[build_option(build_value(value))]
|
162
|
+
end
|
163
|
+
|
164
|
+
def build_no_options
|
165
|
+
[]
|
166
|
+
end
|
167
|
+
end
|
168
|
+
# rubocop:enable Metrics/ClassLength
|
169
|
+
end
|
170
|
+
end
|