ruby-terraform 0.65.0.pre.9 → 0.65.0.pre.14
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 +18 -10
- data/lib/ruby_terraform.rb +131 -4
- data/lib/ruby_terraform/commands.rb +29 -8
- data/lib/ruby_terraform/commands/apply.rb +85 -6
- data/lib/ruby_terraform/commands/base.rb +21 -18
- data/lib/ruby_terraform/commands/clean.rb +2 -2
- data/lib/ruby_terraform/commands/destroy.rb +17 -8
- data/lib/ruby_terraform/commands/force_unlock.rb +24 -0
- data/lib/ruby_terraform/commands/format.rb +11 -9
- data/lib/ruby_terraform/commands/get.rb +8 -5
- data/lib/ruby_terraform/commands/graph.rb +24 -0
- data/lib/ruby_terraform/commands/import.rb +15 -6
- data/lib/ruby_terraform/commands/init.rb +16 -6
- 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 +10 -10
- data/lib/ruby_terraform/commands/plan.rb +15 -6
- 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 +19 -6
- data/lib/ruby_terraform/commands/remote_config.rb +4 -4
- data/lib/ruby_terraform/commands/show.rb +8 -6
- 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 +8 -9
- 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/options.rb +26 -3
- data/lib/ruby_terraform/options/common.rb +12 -0
- data/lib/ruby_terraform/options/definition.rb +172 -0
- data/lib/ruby_terraform/options/definitions.rb +103 -0
- data/lib/ruby_terraform/options/factory.rb +10 -101
- data/lib/ruby_terraform/options/name.rb +11 -19
- data/lib/ruby_terraform/options/types.rb +27 -0
- data/lib/ruby_terraform/options/types/base.rb +6 -13
- data/lib/ruby_terraform/options/types/flag.rb +1 -3
- data/lib/ruby_terraform/options/types/standard.rb +1 -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 +13 -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 +7 -7
- data/lib/ruby_terraform/version.rb +1 -1
- data/ruby_terraform.gemspec +3 -1
- metadata +63 -6
- data/lib/ruby_terraform/commands/workspace.rb +0 -26
- data/lib/ruby_terraform/options/types/boolean.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 897da01f6ce70cf4c6f38c95d50a49c620da02e78078c1da7a14daa2f7f15f11
|
4
|
+
data.tar.gz: 476f49771b6acd39233c7b36987b397556ada57fc5bf5d4eeccec42bfe414ea0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98e74c44146a22196085aaa288c9ac93cf94ebb17aacd9e16473de232c0e9e87f59682df2978c8902f561f2e4ae040e57398f550c7a3fc359fba80e184615fb9
|
7
|
+
data.tar.gz: 98f3870cf241284aa5197012e72d7132e6e5a52f9e70724b07a65231c8605a7020aaa064b9920240d4e02585df0cd05cd664c411113589e79fc288cc5b24845c
|
data/Gemfile.lock
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ruby-terraform (0.65.0.pre.
|
5
|
-
|
4
|
+
ruby-terraform (0.65.0.pre.14)
|
5
|
+
immutable-struct (>= 2.4)
|
6
|
+
lino (>= 2.5)
|
6
7
|
|
7
8
|
GEM
|
8
9
|
remote: https://rubygems.org/
|
@@ -21,14 +22,18 @@ GEM
|
|
21
22
|
concurrent-ruby (1.1.8)
|
22
23
|
diff-lcs (1.4.4)
|
23
24
|
docile (1.3.5)
|
24
|
-
excon (0.
|
25
|
+
excon (0.80.1)
|
25
26
|
faker (2.17.0)
|
26
27
|
i18n (>= 1.6, < 2)
|
27
|
-
faraday (1.
|
28
|
+
faraday (1.4.1)
|
29
|
+
faraday-excon (~> 1.1)
|
28
30
|
faraday-net_http (~> 1.0)
|
31
|
+
faraday-net_http_persistent (~> 1.1)
|
29
32
|
multipart-post (>= 1.2, < 3)
|
30
|
-
ruby2_keywords
|
33
|
+
ruby2_keywords (>= 0.0.4)
|
34
|
+
faraday-excon (1.1.0)
|
31
35
|
faraday-net_http (1.0.1)
|
36
|
+
faraday-net_http_persistent (1.1.0)
|
32
37
|
ffi (1.15.0)
|
33
38
|
formatador (0.2.5)
|
34
39
|
gem-release (2.2.1)
|
@@ -50,7 +55,8 @@ GEM
|
|
50
55
|
concurrent-ruby (~> 1.0)
|
51
56
|
i18n (1.8.10)
|
52
57
|
concurrent-ruby (~> 1.0)
|
53
|
-
|
58
|
+
immutable-struct (2.4.1)
|
59
|
+
lino (2.5.0)
|
54
60
|
hamster (~> 3.0)
|
55
61
|
open4 (~> 1.3)
|
56
62
|
listen (3.5.1)
|
@@ -69,9 +75,9 @@ GEM
|
|
69
75
|
sawyer (~> 0.8.0, >= 0.5.3)
|
70
76
|
open4 (1.3.4)
|
71
77
|
parallel (1.20.1)
|
72
|
-
parser (3.0.
|
78
|
+
parser (3.0.1.0)
|
73
79
|
ast (~> 2.4.1)
|
74
|
-
pry (0.14.
|
80
|
+
pry (0.14.1)
|
75
81
|
coderay (~> 1.1)
|
76
82
|
method_source (~> 1.0)
|
77
83
|
public_suffix (4.0.6)
|
@@ -115,7 +121,7 @@ GEM
|
|
115
121
|
diff-lcs (>= 1.2.0, < 2.0)
|
116
122
|
rspec-support (~> 3.10.0)
|
117
123
|
rspec-support (3.10.2)
|
118
|
-
rubocop (1.
|
124
|
+
rubocop (1.13.0)
|
119
125
|
parallel (~> 1.10)
|
120
126
|
parser (>= 3.0.0.0)
|
121
127
|
rainbow (>= 2.2.2, < 4.0)
|
@@ -150,6 +156,7 @@ GEM
|
|
150
156
|
tzinfo (2.0.4)
|
151
157
|
concurrent-ruby (~> 1.0)
|
152
158
|
unicode-display_width (2.0.0)
|
159
|
+
yard (0.9.26)
|
153
160
|
zeitwerk (2.4.2)
|
154
161
|
|
155
162
|
PLATFORMS
|
@@ -172,6 +179,7 @@ DEPENDENCIES
|
|
172
179
|
rubocop-rspec (~> 2.2)
|
173
180
|
ruby-terraform!
|
174
181
|
simplecov (~> 0.21)
|
182
|
+
yard (~> 0.9)
|
175
183
|
|
176
184
|
BUNDLED WITH
|
177
|
-
2.2.
|
185
|
+
2.2.16
|
data/lib/ruby_terraform.rb
CHANGED
@@ -24,26 +24,144 @@ module RubyTerraform
|
|
24
24
|
end
|
25
25
|
|
26
26
|
module ClassMethods
|
27
|
+
# Invokes the +terraform apply+ command which creates or updates
|
28
|
+
# infrastructure according to terraform configuration files in the provided
|
29
|
+
# directory.
|
30
|
+
#
|
31
|
+
# By default, terraform will generate a new plan and present it for approval
|
32
|
+
# before taking any action. Alternatively, the command accepts a plan file
|
33
|
+
# created by a previous invocation, in which case terraform will take the
|
34
|
+
# actions described in that plan without any confirmation prompt.
|
35
|
+
#
|
36
|
+
# @param parameters The parameters used to invoke the command
|
37
|
+
# @option parameters [String] :directory The directory containing terraform
|
38
|
+
# configuration; required unless +:plan+ is provided.
|
39
|
+
# @option parameters [String] :plan The path to a pre-computed plan to be
|
40
|
+
# applied; required unless +:directory+ is provided.
|
41
|
+
# @option parameters [Boolean] :auto_approve (false) If +true+, skips
|
42
|
+
# interactive approval of the generated plan before applying.
|
43
|
+
# @option parameters [String] :backup The path to backup the existing state
|
44
|
+
# file before modifying; defaults to the +:state_out+ path with
|
45
|
+
# +".backup"+ extension; set +:no_backup+ to +true+ to skip backups
|
46
|
+
# entirely.
|
47
|
+
# @option parameters [String] :chdir The path of a working directory to
|
48
|
+
# switch to before executing the given subcommand.
|
49
|
+
# @option parameters [Boolean] :compact_warnings (false) When +true+, if
|
50
|
+
# terraform produces any warnings that are not accompanied by errors,
|
51
|
+
# they are shown in a more compact form that includes only the summary
|
52
|
+
# messages.
|
53
|
+
# @option parameters [Boolean] :input (true) When +false+, will not ask for
|
54
|
+
# input for variables not directly set.
|
55
|
+
# @option parameters [Boolean] :lock (true) When +true+, locks the state
|
56
|
+
# file when locking is supported; when +false+, does not lock the state
|
57
|
+
# file.
|
58
|
+
# @option parameters [String] :lock_timeout ("0s") The duration to retry a
|
59
|
+
# state lock.
|
60
|
+
# @option parameters [Boolean] :no_backup (false) When +true+, no backup
|
61
|
+
# file will be written.
|
62
|
+
# @option parameters [Boolean] :no_color (false) Whether or not the output
|
63
|
+
# from the command should be in color.
|
64
|
+
# @option parameters [Integer] :parallelism (10) The number of parallel
|
65
|
+
# resource operations.
|
66
|
+
# @option parameters [Boolean] :refresh (true) When +true+, updates state
|
67
|
+
# prior to checking for differences; when +false+ uses locally available
|
68
|
+
# state; this has no effect when +:plan+ is provided.
|
69
|
+
# @option parameters [String] :state ("terraform.tfstate") The path to the
|
70
|
+
# state file from which to read state and in which to store state (unless
|
71
|
+
# +:state_out+ is specified).
|
72
|
+
# @option parameters [String] :state_out The path to write state to that is
|
73
|
+
# different than +:state+; this can be used to preserve the old state.
|
74
|
+
# @option parameters [String] :target The address of a resource to target;
|
75
|
+
# if both +:target+ and +:targets+ are provided, all targets will be
|
76
|
+
# passed to terraform.
|
77
|
+
# @option parameters [Array<String>] :targets An array of resource addresses
|
78
|
+
# to target; if both +:target+ and +:targets+ are provided, all targets
|
79
|
+
# will be passed to terraform.
|
80
|
+
# @option parameters [Hash<String, Object>] :vars A map of variables to be
|
81
|
+
# passed to the terraform configuration.
|
82
|
+
# @option parameters [String] :var_file The path to a terraform var file;
|
83
|
+
# if both +:var_file+ and +:var_files+ are provided, all var files will be
|
84
|
+
# passed to terraform.
|
85
|
+
# @option parameters [Array<String>] :var_files An array of paths to
|
86
|
+
# terraform var files; if both +:var_file+ and +:var_files+ are provided,
|
87
|
+
# all var files will be passed to terraform.
|
88
|
+
#
|
89
|
+
# @example Basic Invocation
|
90
|
+
# RubyTerraform.apply(
|
91
|
+
# directory: 'infra/networking',
|
92
|
+
# vars: {
|
93
|
+
# region: 'eu-central'
|
94
|
+
# })
|
95
|
+
#
|
96
|
+
def apply(parameters = {})
|
97
|
+
exec(RubyTerraform::Commands::Apply, parameters)
|
98
|
+
end
|
99
|
+
|
27
100
|
{
|
28
|
-
apply: RubyTerraform::Commands::Apply,
|
29
101
|
clean: RubyTerraform::Commands::Clean,
|
30
102
|
destroy: RubyTerraform::Commands::Destroy,
|
31
103
|
format: RubyTerraform::Commands::Format,
|
104
|
+
force_unlock: RubyTerraform::Commands::ForceUnlock,
|
32
105
|
get: RubyTerraform::Commands::Get,
|
106
|
+
graph: RubyTerraform::Commands::Graph,
|
33
107
|
import: RubyTerraform::Commands::Import,
|
34
108
|
init: RubyTerraform::Commands::Init,
|
109
|
+
login: RubyTerraform::Commands::Login,
|
110
|
+
logout: RubyTerraform::Commands::Logout,
|
35
111
|
output: RubyTerraform::Commands::Output,
|
36
112
|
plan: RubyTerraform::Commands::Plan,
|
113
|
+
providers: RubyTerraform::Commands::Providers,
|
114
|
+
providers_lock: RubyTerraform::Commands::ProvidersLock,
|
115
|
+
providers_mirror: RubyTerraform::Commands::ProvidersMirror,
|
116
|
+
providers_schema: RubyTerraform::Commands::ProvidersSchema,
|
37
117
|
refresh: RubyTerraform::Commands::Refresh,
|
38
118
|
remote_config: RubyTerraform::Commands::RemoteConfig,
|
39
119
|
show: RubyTerraform::Commands::Show,
|
120
|
+
state_list: RubyTerraform::Commands::StateList,
|
121
|
+
state_mv: RubyTerraform::Commands::StateMove,
|
122
|
+
state_pull: RubyTerraform::Commands::StatePull,
|
123
|
+
state_push: RubyTerraform::Commands::StatePush,
|
124
|
+
state_replace_provider: RubyTerraform::Commands::StateReplaceProvider,
|
125
|
+
state_rm: RubyTerraform::Commands::StateRemove,
|
126
|
+
state_show: RubyTerraform::Commands::StateShow,
|
127
|
+
taint: RubyTerraform::Commands::Taint,
|
128
|
+
untaint: RubyTerraform::Commands::Untaint,
|
40
129
|
validate: RubyTerraform::Commands::Validate,
|
41
|
-
|
130
|
+
workspace_list: RubyTerraform::Commands::WorkspaceList,
|
131
|
+
workspace_select: RubyTerraform::Commands::WorkspaceSelect,
|
132
|
+
workspace_new: RubyTerraform::Commands::WorkspaceNew,
|
133
|
+
workspace_delete: RubyTerraform::Commands::WorkspaceDelete,
|
134
|
+
workspace_show: RubyTerraform::Commands::WorkspaceShow
|
42
135
|
}.each do |method, command_class|
|
43
136
|
define_method(method) do |parameters = {}|
|
44
|
-
command_class
|
137
|
+
exec(command_class, parameters)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
def workspace(parameters = {}) # rubocop:disable Metrics/MethodLength
|
142
|
+
case parameters[:operation]
|
143
|
+
when nil, 'list'
|
144
|
+
exec(RubyTerraform::Commands::WorkspaceList, parameters)
|
145
|
+
when 'select'
|
146
|
+
exec(RubyTerraform::Commands::WorkspaceSelect, parameters)
|
147
|
+
when 'new'
|
148
|
+
exec(RubyTerraform::Commands::WorkspaceNew, parameters)
|
149
|
+
when 'delete'
|
150
|
+
exec(RubyTerraform::Commands::WorkspaceDelete, parameters)
|
151
|
+
when 'show'
|
152
|
+
exec(RubyTerraform::Commands::WorkspaceShow, parameters)
|
153
|
+
else
|
154
|
+
raise(
|
155
|
+
"Invalid operation '#{parameters[:operation]}' supplied to workspace"
|
156
|
+
)
|
45
157
|
end
|
46
158
|
end
|
159
|
+
|
160
|
+
private
|
161
|
+
|
162
|
+
def exec(command_class, parameters)
|
163
|
+
command_class.new.execute(parameters)
|
164
|
+
end
|
47
165
|
end
|
48
166
|
extend ClassMethods
|
49
167
|
|
@@ -52,7 +170,7 @@ module RubyTerraform
|
|
52
170
|
end
|
53
171
|
|
54
172
|
class Configuration
|
55
|
-
attr_accessor :binary, :logger, :stdin, :stdout, :stderr
|
173
|
+
attr_accessor :binary, :logger, :options, :stdin, :stdout, :stderr
|
56
174
|
|
57
175
|
def default_logger
|
58
176
|
logger = Logger.new($stdout)
|
@@ -60,9 +178,14 @@ module RubyTerraform
|
|
60
178
|
logger
|
61
179
|
end
|
62
180
|
|
181
|
+
def default_options
|
182
|
+
Options::Factory.new(Options::DEFINITIONS)
|
183
|
+
end
|
184
|
+
|
63
185
|
def initialize
|
64
186
|
@binary = 'terraform'
|
65
187
|
@logger = default_logger
|
188
|
+
@options = default_options
|
66
189
|
@stdin = ''
|
67
190
|
@stdout = $stdout
|
68
191
|
@stderr = $stderr
|
@@ -81,5 +204,9 @@ module RubyTerraform
|
|
81
204
|
def close
|
82
205
|
@targets.each(&:close)
|
83
206
|
end
|
207
|
+
|
208
|
+
def reopen(*args)
|
209
|
+
@targets.each { |t| t.reopen(*args) }
|
210
|
+
end
|
84
211
|
end
|
85
212
|
end
|
@@ -1,19 +1,40 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative 'commands/clean'
|
4
|
-
require_relative 'commands/init'
|
5
|
-
require_relative 'commands/get'
|
6
|
-
require_relative 'commands/validate'
|
7
|
-
require_relative 'commands/plan'
|
8
3
|
require_relative 'commands/apply'
|
4
|
+
require_relative 'commands/clean'
|
9
5
|
require_relative 'commands/destroy'
|
6
|
+
require_relative 'commands/force_unlock'
|
7
|
+
require_relative 'commands/format'
|
8
|
+
require_relative 'commands/get'
|
9
|
+
require_relative 'commands/graph'
|
10
|
+
require_relative 'commands/import'
|
11
|
+
require_relative 'commands/init'
|
12
|
+
require_relative 'commands/login'
|
13
|
+
require_relative 'commands/logout'
|
10
14
|
require_relative 'commands/output'
|
15
|
+
require_relative 'commands/plan'
|
16
|
+
require_relative 'commands/providers'
|
17
|
+
require_relative 'commands/providers_lock'
|
18
|
+
require_relative 'commands/providers_mirror'
|
19
|
+
require_relative 'commands/providers_schema'
|
11
20
|
require_relative 'commands/refresh'
|
12
21
|
require_relative 'commands/remote_config'
|
13
22
|
require_relative 'commands/show'
|
14
|
-
require_relative 'commands/
|
15
|
-
require_relative 'commands/
|
16
|
-
require_relative 'commands/
|
23
|
+
require_relative 'commands/state_list'
|
24
|
+
require_relative 'commands/state_move'
|
25
|
+
require_relative 'commands/state_pull'
|
26
|
+
require_relative 'commands/state_push'
|
27
|
+
require_relative 'commands/state_replace_provider'
|
28
|
+
require_relative 'commands/state_remove'
|
29
|
+
require_relative 'commands/state_show'
|
30
|
+
require_relative 'commands/taint'
|
31
|
+
require_relative 'commands/untaint'
|
32
|
+
require_relative 'commands/validate'
|
33
|
+
require_relative 'commands/workspace_delete'
|
34
|
+
require_relative 'commands/workspace_list'
|
35
|
+
require_relative 'commands/workspace_new'
|
36
|
+
require_relative 'commands/workspace_select'
|
37
|
+
require_relative 'commands/workspace_show'
|
17
38
|
|
18
39
|
module RubyTerraform
|
19
40
|
module Commands
|
@@ -1,39 +1,118 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative 'base'
|
4
|
+
require_relative '../options/common'
|
4
5
|
|
5
6
|
module RubyTerraform
|
6
7
|
module Commands
|
8
|
+
# Wraps the +terraform apply+ command which creates or updates
|
9
|
+
# infrastructure according to terraform configuration files in the provided
|
10
|
+
# directory.
|
11
|
+
#
|
12
|
+
# By default, terraform will generate a new plan and present it for approval
|
13
|
+
# before taking any action. Alternatively, the command accepts a plan file
|
14
|
+
# created by a previous invocation, in which case terraform will take the
|
15
|
+
# actions described in that plan without any confirmation prompt.
|
16
|
+
#
|
17
|
+
# For options accepted on construction, see {#initialize}.
|
18
|
+
#
|
19
|
+
# When executing an instance of {Apply} via {#execute}, the following
|
20
|
+
# options are supported:
|
21
|
+
#
|
22
|
+
# * +:directory+: the directory containing terraform configuration;
|
23
|
+
# required unless +:plan+ is provided.
|
24
|
+
# * +:plan+: the path to a pre-computed plan to be applied;
|
25
|
+
# required unless +:directory+ is provided.
|
26
|
+
# * +:auto_approve+: if +true+, skips interactive approval of the generated
|
27
|
+
# plan before applying; defaults to +false+.
|
28
|
+
# * +:backup+: the path to backup the existing state file before modifying;
|
29
|
+
# defaults to the +:state_out+ path with +".backup"+ extension; set
|
30
|
+
# +:no_backup+ to +true+ to skip backups entirely.
|
31
|
+
# * +:chdir+: the path of a working directory to switch to before executing
|
32
|
+
# the given subcommand.
|
33
|
+
# * +:compact_warnings+: when +true+, if terraform produces any warnings
|
34
|
+
# that are not accompanied by errors, they are shown in a more compact
|
35
|
+
# form that includes only the summary messages; defaults to +false+.
|
36
|
+
# * +:input+: when +false+, will not ask for input for variables not
|
37
|
+
# directly set; defaults to +true+.
|
38
|
+
# * +:lock+: when +true+, locks the state file when locking is supported;
|
39
|
+
# when +false+, does not lock the state file; defaults to +true+.
|
40
|
+
# * +:lock_timeout+: the duration to retry a state lock; defaults to +"0s"+.
|
41
|
+
# * +:no_backup+: when +true+, no backup file will be written; defaults to
|
42
|
+
# +false+.
|
43
|
+
# * +:no_color+: whether or not the output from the command should be in
|
44
|
+
# color; defaults to +false+.
|
45
|
+
# * +:parallelism+: the number of parallel resource operations; defaults to
|
46
|
+
# +10+.
|
47
|
+
# * +:refresh+: when +true+, updates state prior to checking for
|
48
|
+
# differences; when +false+ uses locally available state; defaults to
|
49
|
+
# +true+; this has no effect when +:plan+ is provided.
|
50
|
+
# * +:state+: the path to the state file from which to read state and in
|
51
|
+
# which to store state (unless +:state_out+ is specified); defaults to
|
52
|
+
# +"terraform.tfstate"+.
|
53
|
+
# * +:state_out+: the path to write state to that is different than
|
54
|
+
# +:state+; this can be used to preserve the old state.
|
55
|
+
# * +:target+: the address of a resource to target; if both +:target+ and
|
56
|
+
# +:targets+ are provided, all targets will be passed to terraform.
|
57
|
+
# * +:targets+: an array of resource addresses to target; if both +:target+
|
58
|
+
# and +:targets+ are provided, all targets will be passed to terraform.
|
59
|
+
# * +:vars+: a map of variables to be passed to the terraform configuration.
|
60
|
+
# * +:var_file+: the path to a terraform var file; if both +:var_file+ and
|
61
|
+
# +:var_files+ are provided, all var files will be passed to terraform.
|
62
|
+
# * +:var_files+: an array of paths to terraform var files; if both
|
63
|
+
# +:var_file+ and +:var_files+ are provided, all var files will be passed
|
64
|
+
# to terraform.
|
65
|
+
#
|
66
|
+
# @example Basic Invocation
|
67
|
+
# RubyTerraform::Commands::Apply.new.execute(
|
68
|
+
# directory: 'infra/networking',
|
69
|
+
# vars: {
|
70
|
+
# region: 'eu-central'
|
71
|
+
# })
|
72
|
+
#
|
7
73
|
class Apply < Base
|
8
|
-
|
74
|
+
include RubyTerraform::Options::Common
|
75
|
+
|
76
|
+
# @!visibility private
|
77
|
+
def subcommands
|
9
78
|
%w[apply]
|
10
79
|
end
|
11
80
|
|
12
81
|
# rubocop:disable Metrics/MethodLength
|
82
|
+
|
83
|
+
# @!visibility private
|
13
84
|
def options
|
14
85
|
%w[
|
15
|
-
-auto-approve
|
16
86
|
-backup
|
17
|
-
-
|
87
|
+
-compact-warnings
|
18
88
|
-lock
|
19
89
|
-lock-timeout
|
90
|
+
-input
|
91
|
+
-auto-approve
|
20
92
|
-no-color
|
93
|
+
-parallelism
|
94
|
+
-refresh
|
21
95
|
-state
|
96
|
+
-state-out
|
22
97
|
-target
|
23
98
|
-var
|
24
99
|
-var-file
|
25
|
-
]
|
100
|
+
] + super
|
26
101
|
end
|
102
|
+
|
27
103
|
# rubocop:enable Metrics/MethodLength
|
28
104
|
|
29
|
-
|
30
|
-
|
105
|
+
# @!visibility private
|
106
|
+
def arguments(parameters)
|
107
|
+
[parameters[:plan] || parameters[:directory]]
|
31
108
|
end
|
32
109
|
|
110
|
+
# @!visibility private
|
33
111
|
def parameter_defaults(_parameters)
|
34
112
|
{ vars: {}, var_files: [], targets: [] }
|
35
113
|
end
|
36
114
|
|
115
|
+
# @!visibility private
|
37
116
|
def parameter_overrides(parameters)
|
38
117
|
{ backup: parameters[:no_backup] ? '-' : parameters[:backup] }
|
39
118
|
end
|
@@ -3,22 +3,27 @@
|
|
3
3
|
require 'lino'
|
4
4
|
|
5
5
|
require_relative '../errors'
|
6
|
-
require_relative '../options/factory'
|
7
6
|
|
8
7
|
module RubyTerraform
|
9
8
|
module Commands
|
10
9
|
class Base
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
@
|
17
|
-
@
|
18
|
-
@
|
19
|
-
|
10
|
+
# rubocop:disable Metrics/AbcSize
|
11
|
+
|
12
|
+
# Constructs an instance of the command.
|
13
|
+
#
|
14
|
+
def initialize(**opts)
|
15
|
+
@binary = opts[:binary] || RubyTerraform.configuration.binary
|
16
|
+
@logger = opts[:logger] || RubyTerraform.configuration.logger
|
17
|
+
@options = opts[:options] || RubyTerraform.configuration.options
|
18
|
+
@stdin = opts[:stdin] || RubyTerraform.configuration.stdin
|
19
|
+
@stdout = opts[:stdout] || RubyTerraform.configuration.stdout
|
20
|
+
@stderr = opts[:stderr] || RubyTerraform.configuration.stderr
|
20
21
|
end
|
21
22
|
|
23
|
+
# rubocop:enable Metrics/AbcSize
|
24
|
+
|
25
|
+
# Executes the command instance.
|
26
|
+
#
|
22
27
|
def execute(parameters = {})
|
23
28
|
do_before(parameters)
|
24
29
|
build_and_execute_command(parameters)
|
@@ -35,6 +40,7 @@ module RubyTerraform
|
|
35
40
|
|
36
41
|
def build_and_execute_command(parameters)
|
37
42
|
command = build_command(parameters)
|
43
|
+
|
38
44
|
logger.debug("Running '#{command}'.")
|
39
45
|
command.execute(
|
40
46
|
stdin: stdin,
|
@@ -53,8 +59,6 @@ module RubyTerraform
|
|
53
59
|
|
54
60
|
private
|
55
61
|
|
56
|
-
def initialize_command; end
|
57
|
-
|
58
62
|
def build_command(parameters)
|
59
63
|
parameters = resolve_parameters(parameters)
|
60
64
|
|
@@ -62,10 +66,9 @@ module RubyTerraform
|
|
62
66
|
.for_command(@binary)
|
63
67
|
.with_options_after_subcommands
|
64
68
|
.with_option_separator('=')
|
65
|
-
.with_appliables(
|
66
|
-
.with_subcommands(subcommands
|
67
|
-
.with_arguments(arguments(parameters))
|
68
|
-
.build
|
69
|
+
.with_appliables(@options.resolve(options, parameters))
|
70
|
+
.with_subcommands(subcommands)
|
71
|
+
.with_arguments(arguments(parameters)).build
|
69
72
|
end
|
70
73
|
|
71
74
|
def resolve_parameters(parameters)
|
@@ -82,7 +85,7 @@ module RubyTerraform
|
|
82
85
|
{}
|
83
86
|
end
|
84
87
|
|
85
|
-
def subcommands
|
88
|
+
def subcommands
|
86
89
|
[]
|
87
90
|
end
|
88
91
|
|
@@ -90,7 +93,7 @@ module RubyTerraform
|
|
90
93
|
[]
|
91
94
|
end
|
92
95
|
|
93
|
-
def arguments(
|
96
|
+
def arguments(_parameters)
|
94
97
|
[]
|
95
98
|
end
|
96
99
|
end
|