bolt 2.1.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of bolt might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Puppetfile +5 -5
- data/bolt-modules/boltlib/lib/puppet/functions/run_command.rb +1 -1
- data/bolt-modules/boltlib/lib/puppet/functions/run_plan.rb +1 -1
- data/bolt-modules/boltlib/lib/puppet/functions/run_script.rb +1 -1
- data/bolt-modules/boltlib/lib/puppet/functions/run_task.rb +1 -1
- data/bolt-modules/boltlib/lib/puppet/functions/upload_file.rb +1 -1
- data/lib/bolt/applicator.rb +2 -2
- data/lib/bolt/bolt_option_parser.rb +1 -1
- data/lib/bolt/cli.rb +1 -1
- data/lib/bolt/config.rb +201 -206
- data/lib/bolt/config/transport/base.rb +142 -0
- data/lib/bolt/config/transport/docker.rb +42 -0
- data/lib/bolt/config/transport/local.rb +73 -0
- data/lib/bolt/config/transport/orch.rb +47 -0
- data/lib/bolt/config/transport/remote.rb +25 -0
- data/lib/bolt/config/transport/ssh.rb +105 -0
- data/lib/bolt/config/transport/winrm.rb +80 -0
- data/lib/bolt/executor.rb +17 -0
- data/lib/bolt/inventory.rb +12 -5
- data/lib/bolt/inventory/group.rb +1 -1
- data/lib/bolt/inventory/inventory.rb +16 -22
- data/lib/bolt/inventory/target.rb +26 -29
- data/lib/bolt/plugin.rb +5 -5
- data/lib/bolt/plugin/module.rb +1 -1
- data/lib/bolt/plugin/pkcs7.rb +1 -1
- data/lib/bolt/result.rb +1 -1
- data/lib/bolt/target.rb +5 -2
- data/lib/bolt/transport/base.rb +0 -18
- data/lib/bolt/transport/docker.rb +0 -26
- data/lib/bolt/transport/local.rb +0 -30
- data/lib/bolt/transport/local_windows.rb +4 -36
- data/lib/bolt/transport/orch.rb +0 -20
- data/lib/bolt/transport/remote.rb +0 -20
- data/lib/bolt/transport/ssh.rb +0 -85
- data/lib/bolt/transport/sudoable.rb +0 -7
- data/lib/bolt/transport/winrm.rb +0 -66
- data/lib/bolt/util.rb +11 -0
- data/lib/bolt/version.rb +1 -1
- data/lib/bolt_server/transport_app.rb +1 -0
- data/lib/bolt_spec/plans.rb +1 -1
- data/lib/bolt_spec/plans/action_stubs/command_stub.rb +1 -1
- data/lib/bolt_spec/plans/action_stubs/script_stub.rb +1 -1
- data/lib/bolt_spec/plans/action_stubs/task_stub.rb +2 -2
- data/lib/bolt_spec/plans/action_stubs/upload_stub.rb +1 -1
- data/lib/bolt_spec/run.rb +1 -1
- data/libexec/apply_catalog.rb +1 -1
- data/libexec/custom_facts.rb +1 -1
- data/libexec/query_resources.rb +1 -1
- metadata +9 -2
data/lib/bolt/executor.rb
CHANGED
@@ -10,8 +10,25 @@ require 'bolt/result'
|
|
10
10
|
require 'bolt/config'
|
11
11
|
require 'bolt/result_set'
|
12
12
|
require 'bolt/puppetdb'
|
13
|
+
# Load transports
|
14
|
+
require 'bolt/transport/ssh'
|
15
|
+
require 'bolt/transport/winrm'
|
16
|
+
require 'bolt/transport/orch'
|
17
|
+
require 'bolt/transport/local'
|
18
|
+
require 'bolt/transport/local_windows'
|
19
|
+
require 'bolt/transport/docker'
|
20
|
+
require 'bolt/transport/remote'
|
13
21
|
|
14
22
|
module Bolt
|
23
|
+
TRANSPORTS = {
|
24
|
+
ssh: Bolt::Transport::SSH,
|
25
|
+
winrm: Bolt::Transport::WinRM,
|
26
|
+
pcp: Bolt::Transport::Orch,
|
27
|
+
local: Bolt::Util.windows? ? Bolt::Transport::LocalWindows : Bolt::Transport::Local,
|
28
|
+
docker: Bolt::Transport::Docker,
|
29
|
+
remote: Bolt::Transport::Remote
|
30
|
+
}.freeze
|
31
|
+
|
15
32
|
class Executor
|
16
33
|
attr_reader :noop, :transports
|
17
34
|
attr_accessor :run_as
|
data/lib/bolt/inventory.rb
CHANGED
@@ -60,25 +60,32 @@ module Bolt
|
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
|
-
|
63
|
+
# Resolve plugin references from transport config
|
64
|
+
config.transports.each_value do |t|
|
65
|
+
t.resolve(plugins) unless t.resolved?
|
66
|
+
end
|
67
|
+
|
68
|
+
inventory = create_version(data, config.transport, config.transports, plugins)
|
64
69
|
inventory.validate
|
65
70
|
inventory
|
66
71
|
end
|
67
72
|
|
68
|
-
def self.create_version(data,
|
73
|
+
def self.create_version(data, transport, transports, plugins)
|
69
74
|
version = (data || {}).delete('version') { 2 }
|
75
|
+
|
70
76
|
case version
|
71
77
|
when 2
|
72
|
-
Bolt::Inventory::Inventory.new(data,
|
78
|
+
Bolt::Inventory::Inventory.new(data, transport, transports, plugins)
|
73
79
|
else
|
74
80
|
raise ValidationError.new("Unsupported version #{version} specified in inventory", nil)
|
75
81
|
end
|
76
82
|
end
|
77
83
|
|
78
84
|
def self.empty
|
79
|
-
config
|
85
|
+
config = Bolt::Config.default
|
80
86
|
plugins = Bolt::Plugin.setup(config, nil, nil, Bolt::Analytics::NoopClient)
|
81
|
-
|
87
|
+
|
88
|
+
create_version({}, config.transport, config.transports, plugins)
|
82
89
|
end
|
83
90
|
end
|
84
91
|
end
|
data/lib/bolt/inventory/group.rb
CHANGED
@@ -15,7 +15,7 @@ module Bolt
|
|
15
15
|
DATA_KEYS = %w[config facts vars features plugin_hooks].freeze
|
16
16
|
TARGET_KEYS = DATA_KEYS + %w[name alias uri]
|
17
17
|
GROUP_KEYS = DATA_KEYS + %w[name groups targets]
|
18
|
-
CONFIG_KEYS = Bolt::
|
18
|
+
CONFIG_KEYS = Bolt::Config::TRANSPORT_CONFIG.keys + ['transport']
|
19
19
|
|
20
20
|
def initialize(input, plugins)
|
21
21
|
@logger = Logging.logger[self]
|
@@ -6,24 +6,26 @@ require 'bolt/inventory/target'
|
|
6
6
|
module Bolt
|
7
7
|
class Inventory
|
8
8
|
class Inventory
|
9
|
-
attr_reader :targets, :plugins, :config
|
9
|
+
attr_reader :targets, :plugins, :config, :transport
|
10
10
|
class WildcardError < Bolt::Error
|
11
11
|
def initialize(target)
|
12
12
|
super("Found 0 targets matching wildcard pattern #{target}", 'bolt.inventory/wildcard-error')
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
@
|
20
|
-
@
|
21
|
-
@
|
22
|
-
@plugins
|
16
|
+
# TODO: Pass transport config instead of config object
|
17
|
+
def initialize(data, transport, transports, plugins)
|
18
|
+
@logger = Logging.logger[self]
|
19
|
+
@data = data || {}
|
20
|
+
@transport = transport
|
21
|
+
@config = transports
|
22
|
+
@plugins = plugins
|
23
|
+
@groups = Group.new(@data.merge('name' => 'all'), plugins)
|
23
24
|
@group_lookup = {}
|
24
|
-
|
25
|
-
|
25
|
+
@targets = {}
|
26
|
+
|
26
27
|
@groups.resolve_string_targets(@groups.target_aliases, @groups.all_targets)
|
28
|
+
|
27
29
|
collect_groups
|
28
30
|
end
|
29
31
|
|
@@ -71,18 +73,6 @@ module Bolt
|
|
71
73
|
target_array.first
|
72
74
|
end
|
73
75
|
|
74
|
-
def data_hash
|
75
|
-
{
|
76
|
-
data: {},
|
77
|
-
target_hash: {
|
78
|
-
target_vars: {},
|
79
|
-
target_facts: {},
|
80
|
-
target_features: {}
|
81
|
-
},
|
82
|
-
config: @config.transport_data_get
|
83
|
-
}
|
84
|
-
end
|
85
|
-
|
86
76
|
def self.localhost_defaults(data)
|
87
77
|
defaults = {
|
88
78
|
'config' => {
|
@@ -284,6 +274,10 @@ module Bolt
|
|
284
274
|
end
|
285
275
|
end
|
286
276
|
|
277
|
+
def transport_data_get
|
278
|
+
{ transport: transport, transports: config.transform_values(&:to_h) }
|
279
|
+
end
|
280
|
+
|
287
281
|
def set_var(target, var_hash)
|
288
282
|
@targets[target.name].set_var(var_hash)
|
289
283
|
end
|
@@ -91,6 +91,7 @@ module Bolt
|
|
91
91
|
end
|
92
92
|
location[key] = value
|
93
93
|
end
|
94
|
+
|
94
95
|
invalidate_config_cache!
|
95
96
|
end
|
96
97
|
|
@@ -101,28 +102,8 @@ module Bolt
|
|
101
102
|
end
|
102
103
|
|
103
104
|
def invalidate_config_cache!
|
104
|
-
@
|
105
|
-
|
106
|
-
|
107
|
-
# Computing the transport config is expensive as it requires cloning the
|
108
|
-
# base config, so we cache the effective config
|
109
|
-
def transport_config_cache
|
110
|
-
if @transport_config_cache.nil?
|
111
|
-
merged_config = Bolt::Util.deep_merge(group_cache['config'], @config)
|
112
|
-
base_config = @inventory.config
|
113
|
-
transport_data = Bolt::Util.deep_clone(base_config.transports)
|
114
|
-
Bolt::Config.update_transport_hash(base_config.boltdir.path, transport_data, merged_config)
|
115
|
-
transport = merged_config['transport'] || base_config.transport
|
116
|
-
Bolt::TRANSPORTS.each do |name, impl|
|
117
|
-
impl.validate(transport_data[name])
|
118
|
-
end
|
119
|
-
@transport_config_cache = {
|
120
|
-
'transport' => transport,
|
121
|
-
'transports' => transport_data
|
122
|
-
}
|
123
|
-
end
|
124
|
-
|
125
|
-
@transport_config_cache
|
105
|
+
@transport = nil
|
106
|
+
@transport_config = nil
|
126
107
|
end
|
127
108
|
|
128
109
|
# Validate the target. This implicitly also primes the group and config
|
@@ -135,6 +116,8 @@ module Bolt
|
|
135
116
|
unless transport.nil? || Bolt::TRANSPORTS.include?(transport.to_sym)
|
136
117
|
raise Bolt::UnknownTransportError.new(transport, uri)
|
137
118
|
end
|
119
|
+
|
120
|
+
transport_config
|
138
121
|
end
|
139
122
|
|
140
123
|
def host
|
@@ -156,15 +139,23 @@ module Bolt
|
|
156
139
|
# For remote targets, the transport is always 'remote'. Otherwise, it
|
157
140
|
# will be either the URI scheme or set explicitly.
|
158
141
|
def transport
|
159
|
-
if
|
160
|
-
'
|
161
|
-
|
162
|
-
|
142
|
+
if @transport.nil?
|
143
|
+
config_transport = @config['transport'] ||
|
144
|
+
group_cache.dig('config', 'transport') ||
|
145
|
+
@inventory.transport
|
146
|
+
|
147
|
+
@transport = if @uri_obj.scheme == 'remote' || config_transport == 'remote'
|
148
|
+
'remote'
|
149
|
+
else
|
150
|
+
@uri_obj.scheme || config_transport
|
151
|
+
end
|
163
152
|
end
|
153
|
+
|
154
|
+
@transport
|
164
155
|
end
|
165
156
|
|
166
157
|
def remote?
|
167
|
-
|
158
|
+
transport == 'remote'
|
168
159
|
end
|
169
160
|
|
170
161
|
def user
|
@@ -176,13 +167,19 @@ module Bolt
|
|
176
167
|
end
|
177
168
|
|
178
169
|
def options
|
179
|
-
transport_config
|
170
|
+
transport_config
|
180
171
|
end
|
181
172
|
|
182
173
|
# We only want to look up transport config keys for the configured
|
183
174
|
# transport
|
184
175
|
def transport_config
|
185
|
-
|
176
|
+
if @transport_config.nil?
|
177
|
+
config = @inventory.config[transport]
|
178
|
+
.merge(group_cache.dig('config', transport), @config[transport])
|
179
|
+
@transport_config = config
|
180
|
+
end
|
181
|
+
|
182
|
+
@transport_config
|
186
183
|
end
|
187
184
|
|
188
185
|
def config
|
data/lib/bolt/plugin.rb
CHANGED
@@ -126,14 +126,14 @@ module Bolt
|
|
126
126
|
# we can just add it first.
|
127
127
|
plugins.add_plugin(Bolt::Plugin::Puppetdb.new(pdb_client))
|
128
128
|
|
129
|
-
# Initialize any plugins referenced in config. This will also indirectly
|
129
|
+
# Initialize any plugins referenced in plugin config. This will also indirectly
|
130
130
|
# initialize any plugins they depend on.
|
131
131
|
if plugins.reference?(config.plugins)
|
132
132
|
msg = "The 'plugins' setting cannot be set by a plugin reference"
|
133
133
|
raise PluginError.new(msg, 'bolt/plugin-error')
|
134
134
|
end
|
135
135
|
|
136
|
-
config.plugins.
|
136
|
+
config.plugins.each_key do |plugin|
|
137
137
|
plugins.by_name(plugin)
|
138
138
|
end
|
139
139
|
|
@@ -263,9 +263,9 @@ module Bolt
|
|
263
263
|
if data.is_a?(Array)
|
264
264
|
data.flat_map { |elem| resolve_top_level_references(elem) }
|
265
265
|
elsif reference?(data)
|
266
|
-
partially_resolved = data.
|
267
|
-
|
268
|
-
end
|
266
|
+
partially_resolved = data.transform_values do |v|
|
267
|
+
resolve_references(v)
|
268
|
+
end
|
269
269
|
fully_resolved = resolve_single_reference(partially_resolved)
|
270
270
|
# The top-level reference may have returned more references, so repeat the process
|
271
271
|
resolve_top_level_references(fully_resolved)
|
data/lib/bolt/plugin/module.rb
CHANGED
@@ -91,7 +91,7 @@ module Bolt
|
|
91
91
|
end
|
92
92
|
|
93
93
|
def validate_config(config, config_schema)
|
94
|
-
config.
|
94
|
+
config.each_key do |key|
|
95
95
|
msg = "Config for #{name} plugin contains unexpected key #{key}"
|
96
96
|
raise Bolt::ValidationError, msg unless config_schema.include?(key)
|
97
97
|
end
|
data/lib/bolt/plugin/pkcs7.rb
CHANGED
data/lib/bolt/result.rb
CHANGED
@@ -78,7 +78,7 @@ module Bolt
|
|
78
78
|
|
79
79
|
def _pcore_init_from_hash(init_hash)
|
80
80
|
opts = init_hash.reject { |k, _v| k == 'target' }
|
81
|
-
initialize(init_hash['target'], opts.
|
81
|
+
initialize(init_hash['target'], opts.transform_keys(&:to_sym))
|
82
82
|
end
|
83
83
|
|
84
84
|
def _pcore_init_hash
|
data/lib/bolt/target.rb
CHANGED
@@ -76,7 +76,7 @@ module Bolt
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def to_h
|
79
|
-
options.merge(
|
79
|
+
options.to_h.merge(
|
80
80
|
'name' => name,
|
81
81
|
'uri' => uri,
|
82
82
|
'protocol' => protocol,
|
@@ -92,7 +92,10 @@ module Bolt
|
|
92
92
|
'name' => name,
|
93
93
|
'uri' => uri,
|
94
94
|
'alias' => target_alias,
|
95
|
-
'config' =>
|
95
|
+
'config' => {
|
96
|
+
'transport' => transport,
|
97
|
+
transport => options.to_h
|
98
|
+
},
|
96
99
|
'vars' => vars,
|
97
100
|
'features' => features,
|
98
101
|
'facts' => facts,
|
data/lib/bolt/transport/base.rb
CHANGED
@@ -42,24 +42,6 @@ module Bolt
|
|
42
42
|
|
43
43
|
attr_reader :logger
|
44
44
|
|
45
|
-
# Returns options this transport supports
|
46
|
-
def self.options
|
47
|
-
raise NotImplementedError,
|
48
|
-
"self.options() or self.filter_options(unfiltered) must be implemented by the transport class"
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.default_options
|
52
|
-
{}
|
53
|
-
end
|
54
|
-
|
55
|
-
def self.filter_options(unfiltered)
|
56
|
-
unfiltered.select { |k| options.include?(k) }
|
57
|
-
end
|
58
|
-
|
59
|
-
def self.validate(_options)
|
60
|
-
raise NotImplementedError, "self.validate() must be implemented by the transport class"
|
61
|
-
end
|
62
|
-
|
63
45
|
def initialize
|
64
46
|
@logger = Logging.logger[self]
|
65
47
|
end
|
@@ -7,36 +7,10 @@ require 'bolt/transport/base'
|
|
7
7
|
module Bolt
|
8
8
|
module Transport
|
9
9
|
class Docker < Base
|
10
|
-
OPTIONS = {
|
11
|
-
"host" => "Host name.",
|
12
|
-
"interpreters" => "A map of an extension name to the absolute path of an executable, "\
|
13
|
-
"enabling you to override the shebang defined in a task executable. The "\
|
14
|
-
"extension can optionally be specified with the `.` character (`.py` and "\
|
15
|
-
"`py` both map to a task executable `task.py`) and the extension is case "\
|
16
|
-
"sensitive. When a target's name is `localhost`, Ruby tasks run with the "\
|
17
|
-
"Bolt Ruby interpreter by default.",
|
18
|
-
"service-url" => "URL of the Docker host used for API requests.",
|
19
|
-
"shell-command" => "A shell command to wrap any Docker exec commands in, such as `bash -lc`.",
|
20
|
-
"tmpdir" => "The directory to upload and execute temporary files on the target.",
|
21
|
-
"tty" => "Whether to enable tty on exec commands."
|
22
|
-
}.freeze
|
23
|
-
|
24
|
-
def self.options
|
25
|
-
OPTIONS.keys
|
26
|
-
end
|
27
|
-
|
28
10
|
def provided_features
|
29
11
|
['shell']
|
30
12
|
end
|
31
13
|
|
32
|
-
def self.validate(options)
|
33
|
-
if (url = options['service-url'])
|
34
|
-
unless url.instance_of?(String)
|
35
|
-
raise Bolt::ValidationError, 'service-url must be a string'
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
14
|
def with_connection(target)
|
41
15
|
conn = Connection.new(target)
|
42
16
|
conn.connect
|
data/lib/bolt/transport/local.rb
CHANGED
@@ -3,40 +3,10 @@
|
|
3
3
|
module Bolt
|
4
4
|
module Transport
|
5
5
|
class Local < Sudoable
|
6
|
-
OPTIONS = {
|
7
|
-
"interpreters" => "A map of an extension name to the absolute path of an executable, "\
|
8
|
-
"enabling you to override the shebang defined in a task executable. The "\
|
9
|
-
"extension can optionally be specified with the `.` character (`.py` and "\
|
10
|
-
"`py` both map to a task executable `task.py`) and the extension is case "\
|
11
|
-
"sensitive. When a target's name is `localhost`, Ruby tasks run with the "\
|
12
|
-
"Bolt Ruby interpreter by default.",
|
13
|
-
"run-as" => "A different user to run commands as after login.",
|
14
|
-
"run-as-command" => "The command to elevate permissions. Bolt appends the user and command "\
|
15
|
-
"strings to the configured `run-as-command` before running it on the target. "\
|
16
|
-
"This command must not require an interactive password prompt, and the "\
|
17
|
-
"`sudo-password` option is ignored when `run-as-command` is specified. The "\
|
18
|
-
"`run-as-command` must be specified as an array.",
|
19
|
-
"sudo-executable" => "The executable to use when escalating to the configured `run-as` user. This "\
|
20
|
-
"is useful when you want to escalate using the configured `sudo-password`, since "\
|
21
|
-
"`run-as-command` does not use `sudo-password` or support prompting. The command "\
|
22
|
-
"executed on the target is `<sudo-executable> -S -u <user> -p custom_bolt_prompt "\
|
23
|
-
"<command>`. **This option is experimental.**",
|
24
|
-
"sudo-password" => "Password to use when changing users via `run-as`.",
|
25
|
-
"tmpdir" => "The directory to copy and execute temporary files."
|
26
|
-
}.freeze
|
27
|
-
|
28
|
-
def self.options
|
29
|
-
OPTIONS.keys
|
30
|
-
end
|
31
|
-
|
32
6
|
def provided_features
|
33
7
|
['shell']
|
34
8
|
end
|
35
9
|
|
36
|
-
def self.validate(options)
|
37
|
-
validate_sudo_options(options)
|
38
|
-
end
|
39
|
-
|
40
10
|
def with_connection(target, *_args)
|
41
11
|
conn = Shell.new(target)
|
42
12
|
yield conn
|
@@ -12,27 +12,6 @@ require 'bolt/util'
|
|
12
12
|
module Bolt
|
13
13
|
module Transport
|
14
14
|
class LocalWindows < Base
|
15
|
-
OPTIONS = {
|
16
|
-
"interpreters" => "A map of an extension name to the absolute path of an executable, "\
|
17
|
-
"enabling you to override the shebang defined in a task executable. The "\
|
18
|
-
"extension can optionally be specified with the `.` character (`.py` and "\
|
19
|
-
"`py` both map to a task executable `task.py`) and the extension is case "\
|
20
|
-
"sensitive. When a target's name is `localhost`, Ruby tasks run with the "\
|
21
|
-
"Bolt Ruby interpreter by default.",
|
22
|
-
"run-as" => "A different user to run commands as after login.",
|
23
|
-
"run-as-command" => "The command to elevate permissions. Bolt appends the user and command "\
|
24
|
-
"strings to the configured `run-as-command` before running it on the target. "\
|
25
|
-
"This command must not require an interactive password prompt, and the "\
|
26
|
-
"`sudo-password` option is ignored when `run-as-command` is specified. The "\
|
27
|
-
"`run-as-command` must be specified as an array.",
|
28
|
-
"sudo-password" => "Password to use when changing users via `run-as`.",
|
29
|
-
"tmpdir" => "The directory to copy and execute temporary files."
|
30
|
-
}.freeze
|
31
|
-
|
32
|
-
def self.options
|
33
|
-
OPTIONS.keys
|
34
|
-
end
|
35
|
-
|
36
15
|
def provided_features
|
37
16
|
['powershell']
|
38
17
|
end
|
@@ -42,13 +21,6 @@ module Bolt
|
|
42
21
|
input_method
|
43
22
|
end
|
44
23
|
|
45
|
-
def self.validate(options)
|
46
|
-
logger = Logging.logger[self]
|
47
|
-
if options['sudo-password'] || options['run-as'] || options['run-as-command'] || options[:run_as]
|
48
|
-
logger.warn("run-as is not supported for Windows hosts using the local transport")
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
24
|
def in_tmpdir(base)
|
53
25
|
args = base ? [nil, base] : []
|
54
26
|
dir = begin
|
@@ -98,14 +70,12 @@ module Bolt
|
|
98
70
|
result_output
|
99
71
|
end
|
100
72
|
|
101
|
-
def upload(target, source, destination,
|
102
|
-
self.class.validate(options)
|
73
|
+
def upload(target, source, destination, _options = {})
|
103
74
|
copy_file(source, destination)
|
104
75
|
Bolt::Result.for_upload(target, source, destination)
|
105
76
|
end
|
106
77
|
|
107
|
-
def run_command(target, command,
|
108
|
-
self.class.validate(options)
|
78
|
+
def run_command(target, command, _options = {})
|
109
79
|
in_tmpdir(target.options['tmpdir']) do |dir|
|
110
80
|
output = execute(command, dir: dir)
|
111
81
|
Bolt::Result.for_command(target,
|
@@ -116,8 +86,7 @@ module Bolt
|
|
116
86
|
end
|
117
87
|
end
|
118
88
|
|
119
|
-
def run_script(target, script, arguments,
|
120
|
-
self.class.validate(options)
|
89
|
+
def run_script(target, script, arguments, _options = {})
|
121
90
|
with_tmpscript(File.absolute_path(script), target.options['tmpdir']) do |file, dir|
|
122
91
|
logger.debug "Running '#{file}' with #{arguments.to_json}"
|
123
92
|
|
@@ -141,8 +110,7 @@ module Bolt
|
|
141
110
|
end
|
142
111
|
end
|
143
112
|
|
144
|
-
def run_task(target, task, arguments,
|
145
|
-
self.class.validate(options)
|
113
|
+
def run_task(target, task, arguments, _options = {})
|
146
114
|
implementation = select_implementation(target, task)
|
147
115
|
executable = implementation['path']
|
148
116
|
input_method = implementation['input_method']
|