bolt 2.37.0 → 2.44.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 +17 -17
- data/bolt-modules/boltlib/lib/puppet/functions/parallelize.rb +6 -8
- data/lib/bolt/analytics.rb +3 -2
- data/lib/bolt/applicator.rb +11 -1
- data/lib/bolt/bolt_option_parser.rb +20 -13
- data/lib/bolt/catalog.rb +10 -29
- data/lib/bolt/cli.rb +58 -40
- data/lib/bolt/config.rb +134 -119
- data/lib/bolt/config/options.rb +142 -77
- data/lib/bolt/config/transport/base.rb +2 -2
- data/lib/bolt/config/transport/local.rb +1 -0
- data/lib/bolt/config/transport/options.rb +18 -68
- data/lib/bolt/config/transport/orch.rb +1 -0
- data/lib/bolt/config/transport/ssh.rb +0 -5
- data/lib/bolt/executor.rb +15 -5
- data/lib/bolt/inventory.rb +26 -0
- data/lib/bolt/inventory/group.rb +35 -12
- data/lib/bolt/inventory/inventory.rb +1 -1
- data/lib/bolt/inventory/options.rb +130 -0
- data/lib/bolt/inventory/target.rb +10 -11
- data/lib/bolt/logger.rb +114 -10
- data/lib/bolt/module.rb +10 -2
- data/lib/bolt/module_installer.rb +25 -15
- data/lib/bolt/module_installer/resolver.rb +65 -12
- data/lib/bolt/module_installer/specs/forge_spec.rb +8 -2
- data/lib/bolt/module_installer/specs/git_spec.rb +17 -2
- data/lib/bolt/outputter.rb +19 -5
- data/lib/bolt/outputter/human.rb +24 -1
- data/lib/bolt/outputter/json.rb +1 -1
- data/lib/bolt/outputter/logger.rb +1 -1
- data/lib/bolt/outputter/rainbow.rb +12 -1
- data/lib/bolt/pal.rb +93 -14
- data/lib/bolt/pal/yaml_plan.rb +8 -2
- data/lib/bolt/pal/yaml_plan/evaluator.rb +2 -2
- data/lib/bolt/pal/yaml_plan/transpiler.rb +6 -1
- data/lib/bolt/plugin.rb +3 -3
- data/lib/bolt/plugin/cache.rb +8 -8
- data/lib/bolt/plugin/module.rb +1 -1
- data/lib/bolt/plugin/puppet_connect_data.rb +35 -0
- data/lib/bolt/plugin/puppetdb.rb +2 -2
- data/lib/bolt/project.rb +76 -50
- data/lib/bolt/project_manager.rb +2 -0
- data/lib/bolt/project_manager/config_migrator.rb +9 -1
- data/lib/bolt/project_manager/module_migrator.rb +2 -0
- data/lib/bolt/puppetdb/client.rb +8 -0
- data/lib/bolt/rerun.rb +1 -1
- data/lib/bolt/shell/bash.rb +1 -1
- data/lib/bolt/shell/bash/tmpdir.rb +4 -1
- data/lib/bolt/shell/powershell.rb +7 -5
- data/lib/bolt/target.rb +4 -0
- data/lib/bolt/task.rb +1 -1
- data/lib/bolt/transport/docker/connection.rb +2 -2
- data/lib/bolt/transport/local.rb +13 -0
- data/lib/bolt/transport/orch/connection.rb +1 -1
- data/lib/bolt/transport/ssh.rb +1 -2
- data/lib/bolt/transport/ssh/connection.rb +1 -1
- data/lib/bolt/validator.rb +227 -0
- data/lib/bolt/version.rb +1 -1
- data/lib/bolt_server/config.rb +1 -1
- data/lib/bolt_server/schemas/partials/task.json +1 -1
- data/lib/bolt_server/transport_app.rb +28 -27
- data/libexec/bolt_catalog +1 -1
- metadata +27 -11
- data/lib/bolt/config/validator.rb +0 -231
data/lib/bolt/config.rb
CHANGED
@@ -7,7 +7,7 @@ require 'bolt/project'
|
|
7
7
|
require 'bolt/logger'
|
8
8
|
require 'bolt/util'
|
9
9
|
require 'bolt/config/options'
|
10
|
-
require 'bolt/
|
10
|
+
require 'bolt/validator'
|
11
11
|
|
12
12
|
module Bolt
|
13
13
|
class UnknownTransportError < Bolt::Error
|
@@ -20,7 +20,7 @@ module Bolt
|
|
20
20
|
class Config
|
21
21
|
include Bolt::Config::Options
|
22
22
|
|
23
|
-
attr_reader :config_files, :
|
23
|
+
attr_reader :config_files, :data, :transports, :project, :modified_concurrency
|
24
24
|
|
25
25
|
BOLT_CONFIG_NAME = 'bolt.yaml'
|
26
26
|
BOLT_DEFAULTS_NAME = 'bolt-defaults.yaml'
|
@@ -33,9 +33,6 @@ module Bolt
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def self.from_project(project, overrides = {})
|
36
|
-
logs = []
|
37
|
-
deprecations = []
|
38
|
-
|
39
36
|
conf = if project.project_file == project.config_file
|
40
37
|
project.data
|
41
38
|
else
|
@@ -43,34 +40,28 @@ module Bolt
|
|
43
40
|
|
44
41
|
# Validate the config against the schema. This will raise a single error
|
45
42
|
# with all validation errors.
|
46
|
-
Validator.new.tap do |validator|
|
43
|
+
Bolt::Validator.new.tap do |validator|
|
47
44
|
validator.validate(c, bolt_schema, project.config_file.to_s)
|
48
|
-
|
49
|
-
validator.
|
50
|
-
|
51
|
-
validator.deprecations.each do |dep|
|
52
|
-
deprecations << { type: "#{BOLT_CONFIG_NAME} #{dep[:option]}", msg: dep[:message] }
|
53
|
-
end
|
45
|
+
validator.warnings.each { |warning| Bolt::Logger.warn(warning[:id], warning[:msg]) }
|
46
|
+
validator.deprecations.each { |dep| Bolt::Logger.deprecate(dep[:id], dep[:msg]) }
|
54
47
|
end
|
55
48
|
|
56
|
-
|
49
|
+
if File.exist?(project.config_file)
|
50
|
+
Bolt::Logger.debug("Loaded configuration from #{project.config_file}")
|
51
|
+
end
|
57
52
|
c
|
58
53
|
end
|
59
54
|
|
60
55
|
data = load_defaults(project).push(
|
61
|
-
filepath:
|
62
|
-
data:
|
63
|
-
logs: logs,
|
64
|
-
deprecations: deprecations
|
56
|
+
filepath: project.config_file,
|
57
|
+
data: conf
|
65
58
|
)
|
66
59
|
|
67
60
|
new(project, data, overrides)
|
68
61
|
end
|
69
62
|
|
70
63
|
def self.from_file(configfile, overrides = {})
|
71
|
-
project
|
72
|
-
logs = []
|
73
|
-
deprecations = []
|
64
|
+
project = Bolt::Project.create_project(Pathname.new(configfile).expand_path.dirname)
|
74
65
|
|
75
66
|
conf = if project.project_file == project.config_file
|
76
67
|
project.data
|
@@ -79,46 +70,55 @@ module Bolt
|
|
79
70
|
|
80
71
|
# Validate the config against the schema. This will raise a single error
|
81
72
|
# with all validation errors.
|
82
|
-
Validator.new.tap do |validator|
|
73
|
+
Bolt::Validator.new.tap do |validator|
|
83
74
|
validator.validate(c, bolt_schema, project.config_file.to_s)
|
84
|
-
|
85
|
-
validator.
|
86
|
-
|
87
|
-
validator.deprecations.each do |dep|
|
88
|
-
deprecations << { type: "#{BOLT_CONFIG_NAME} #{dep[:option]}", msg: dep[:message] }
|
89
|
-
end
|
75
|
+
validator.warnings.each { |warning| Bolt::Logger.warn(warning[:id], warning[:msg]) }
|
76
|
+
validator.deprecations.each { |dep| Bolt::Logger.deprecate(dep[:id], dep[:msg]) }
|
90
77
|
end
|
91
78
|
|
92
|
-
|
79
|
+
Bolt::Logger.debug("Loaded configuration from #{configfile}")
|
80
|
+
|
93
81
|
c
|
94
82
|
end
|
95
83
|
|
96
84
|
data = load_defaults(project).push(
|
97
|
-
filepath:
|
98
|
-
data:
|
99
|
-
logs: logs,
|
100
|
-
deprecations: deprecations
|
85
|
+
filepath: configfile,
|
86
|
+
data: conf
|
101
87
|
)
|
102
88
|
|
103
89
|
new(project, data, overrides)
|
104
90
|
end
|
105
91
|
|
106
|
-
|
107
|
-
|
108
|
-
|
92
|
+
# Builds a hash of definitions for transport configuration.
|
93
|
+
#
|
94
|
+
def self.transport_definitions
|
95
|
+
INVENTORY_OPTIONS.each_with_object({}) do |(option, definition), acc|
|
109
96
|
acc[option] = TRANSPORT_CONFIG.key?(option) ? definition.merge(TRANSPORT_CONFIG[option].schema) : definition
|
110
97
|
end
|
98
|
+
end
|
111
99
|
|
112
|
-
|
113
|
-
|
100
|
+
# Builds the schema for bolt-defaults.yaml used by the validator.
|
101
|
+
#
|
102
|
+
def self.defaults_schema
|
103
|
+
schema = {
|
104
|
+
type: Hash,
|
105
|
+
properties: BOLT_DEFAULTS_OPTIONS.map { |opt| [opt, _ref: opt] }.to_h,
|
106
|
+
definitions: OPTIONS.merge(transport_definitions)
|
107
|
+
}
|
108
|
+
|
109
|
+
schema[:definitions]['inventory-config'][:properties] = transport_definitions
|
110
|
+
|
111
|
+
schema
|
114
112
|
end
|
115
113
|
|
114
|
+
# Builds the schema for bolt.yaml used by the validator.
|
115
|
+
#
|
116
116
|
def self.bolt_schema
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
117
|
+
{
|
118
|
+
type: Hash,
|
119
|
+
properties: (BOLT_OPTIONS + INVENTORY_OPTIONS.keys).map { |opt| [opt, _ref: opt] }.to_h,
|
120
|
+
definitions: OPTIONS.merge(transport_definitions)
|
121
|
+
}
|
122
122
|
end
|
123
123
|
|
124
124
|
def self.system_path
|
@@ -141,27 +141,24 @@ module Bolt
|
|
141
141
|
def self.load_bolt_defaults_yaml(dir)
|
142
142
|
filepath = dir + BOLT_DEFAULTS_NAME
|
143
143
|
data = Bolt::Util.read_yaml_hash(filepath, 'config')
|
144
|
-
|
145
|
-
|
144
|
+
|
145
|
+
Bolt::Logger.debug("Loaded configuration from #{filepath}")
|
146
146
|
|
147
147
|
# Warn if 'bolt.yaml' detected in same directory.
|
148
148
|
if File.exist?(bolt_yaml = dir + BOLT_CONFIG_NAME)
|
149
|
-
|
150
|
-
|
149
|
+
Bolt::Logger.warn(
|
150
|
+
"multiple_config_files",
|
151
|
+
"Detected multiple configuration files: ['#{bolt_yaml}', '#{filepath}']. '#{bolt_yaml}' "\
|
151
152
|
"will be ignored."
|
152
153
|
)
|
153
154
|
end
|
154
155
|
|
155
156
|
# Validate the config against the schema. This will raise a single error
|
156
157
|
# with all validation errors.
|
157
|
-
Validator.new.tap do |validator|
|
158
|
+
Bolt::Validator.new.tap do |validator|
|
158
159
|
validator.validate(data, defaults_schema, filepath)
|
159
|
-
|
160
|
-
validator.
|
161
|
-
|
162
|
-
validator.deprecations.each do |dep|
|
163
|
-
deprecations << { type: "#{BOLT_DEFAULTS_NAME} #{dep[:option]}", msg: dep[:message] }
|
164
|
-
end
|
160
|
+
validator.warnings.each { |warning| Bolt::Logger.warn(warning[:id], warning[:msg]) }
|
161
|
+
validator.deprecations.each { |dep| Bolt::Logger.deprecate(dep[:id], dep[:msg]) }
|
165
162
|
end
|
166
163
|
|
167
164
|
# Remove project-specific config such as hiera-config, etc.
|
@@ -169,8 +166,10 @@ module Bolt
|
|
169
166
|
|
170
167
|
if project_config.any?
|
171
168
|
data.reject! { |key, _| project_config.include?(key) }
|
172
|
-
|
173
|
-
|
169
|
+
|
170
|
+
Bolt::Logger.warn(
|
171
|
+
"unsupported_project_config",
|
172
|
+
"Unsupported project configuration detected in '#{filepath}': #{project_config.keys}. "\
|
174
173
|
"Project configuration should be set in 'bolt-project.yaml'."
|
175
174
|
)
|
176
175
|
end
|
@@ -180,8 +179,10 @@ module Bolt
|
|
180
179
|
|
181
180
|
if transport_config.any?
|
182
181
|
data.reject! { |key, _| transport_config.include?(key) }
|
183
|
-
|
184
|
-
|
182
|
+
|
183
|
+
Bolt::Logger.warn(
|
184
|
+
"unsupported_inventory_config",
|
185
|
+
"Unsupported inventory configuration detected in '#{filepath}': #{transport_config.keys}. "\
|
185
186
|
"Transport configuration should be set under the 'inventory-config' option or "\
|
186
187
|
"in 'inventory.yaml'."
|
187
188
|
)
|
@@ -206,7 +207,7 @@ module Bolt
|
|
206
207
|
data = data.merge(data.delete('inventory-config'))
|
207
208
|
end
|
208
209
|
|
209
|
-
{ filepath: filepath, data: data
|
210
|
+
{ filepath: filepath, data: data }
|
210
211
|
end
|
211
212
|
|
212
213
|
# Loads a 'bolt.yaml' file, the legacy configuration file. There's no special munging needed
|
@@ -214,24 +215,24 @@ module Bolt
|
|
214
215
|
def self.load_bolt_yaml(dir)
|
215
216
|
filepath = dir + BOLT_CONFIG_NAME
|
216
217
|
data = Bolt::Util.read_yaml_hash(filepath, 'config')
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
218
|
+
|
219
|
+
Bolt::Logger.debug("Loaded configuration from #{filepath}")
|
220
|
+
|
221
|
+
Bolt::Logger.deprecate(
|
222
|
+
"bolt_yaml",
|
223
|
+
"Configuration file #{filepath} is deprecated and will be removed in Bolt 3.0. "\
|
224
|
+
"See https://pup.pt/update-bolt-config for how to update to the latest Bolt practices."
|
225
|
+
)
|
221
226
|
|
222
227
|
# Validate the config against the schema. This will raise a single error
|
223
228
|
# with all validation errors.
|
224
|
-
Validator.new.tap do |validator|
|
229
|
+
Bolt::Validator.new.tap do |validator|
|
225
230
|
validator.validate(data, bolt_schema, filepath)
|
226
|
-
|
227
|
-
validator.
|
228
|
-
|
229
|
-
validator.deprecations.each do |dep|
|
230
|
-
deprecations << { type: "#{BOLT_CONFIG_NAME} #{dep[:option]}", msg: dep[:message] }
|
231
|
-
end
|
231
|
+
validator.warnings.each { |warning| Bolt::Logger.warn(warning[:id], warning[:msg]) }
|
232
|
+
validator.deprecations.each { |dep| Bolt::Logger.deprecate(dep[:id], dep[:msg]) }
|
232
233
|
end
|
233
234
|
|
234
|
-
{ filepath: filepath, data: data
|
235
|
+
{ filepath: filepath, data: data }
|
235
236
|
end
|
236
237
|
|
237
238
|
def self.load_defaults(project)
|
@@ -262,16 +263,11 @@ module Bolt
|
|
262
263
|
|
263
264
|
def initialize(project, config_data, overrides = {})
|
264
265
|
unless config_data.is_a?(Array)
|
265
|
-
config_data = [{ filepath: project.config_file,
|
266
|
-
data: config_data,
|
267
|
-
logs: [],
|
268
|
-
deprecations: [] }]
|
266
|
+
config_data = [{ filepath: project.config_file, data: config_data }]
|
269
267
|
end
|
270
268
|
|
271
269
|
@logger = Bolt::Logger.logger(self)
|
272
270
|
@project = project
|
273
|
-
@logs = @project.logs.dup
|
274
|
-
@deprecations = @project.deprecations.dup
|
275
271
|
@transports = {}
|
276
272
|
@config_files = []
|
277
273
|
|
@@ -281,14 +277,17 @@ module Bolt
|
|
281
277
|
'color' => true,
|
282
278
|
'compile-concurrency' => Etc.nprocessors,
|
283
279
|
'concurrency' => default_concurrency,
|
280
|
+
'disable-warnings' => [],
|
284
281
|
'format' => 'human',
|
285
282
|
'log' => { 'console' => {} },
|
283
|
+
'module-install' => {},
|
286
284
|
'plugin-hooks' => {},
|
287
285
|
'plugin_hooks' => {},
|
288
286
|
'plugins' => {},
|
289
287
|
'puppetdb' => {},
|
290
288
|
'puppetfile' => {},
|
291
289
|
'save-rerun' => true,
|
290
|
+
'spinner' => true,
|
292
291
|
'transport' => 'ssh'
|
293
292
|
}
|
294
293
|
|
@@ -300,9 +299,6 @@ module Bolt
|
|
300
299
|
end
|
301
300
|
|
302
301
|
loaded_data = config_data.each_with_object([]) do |data, acc|
|
303
|
-
@logs.concat(data[:logs]) if data[:logs].any?
|
304
|
-
@deprecations.concat(data[:deprecations]) if data[:deprecations].any?
|
305
|
-
|
306
302
|
if data[:data].any?
|
307
303
|
@config_files.push(data[:filepath])
|
308
304
|
acc.push(data[:data])
|
@@ -353,7 +349,7 @@ module Bolt
|
|
353
349
|
overrides['trace'] = opts['trace'] if opts.key?('trace')
|
354
350
|
|
355
351
|
# Validate the overrides
|
356
|
-
Validator.new.validate(overrides,
|
352
|
+
Bolt::Validator.new.validate(overrides, self.class.bolt_schema, 'command line')
|
357
353
|
|
358
354
|
overrides
|
359
355
|
end
|
@@ -373,6 +369,9 @@ module Bolt
|
|
373
369
|
# Hash values are shallow merged
|
374
370
|
when 'puppetdb', 'plugin-hooks', 'plugin_hooks', 'apply-settings', 'apply_settings', 'log'
|
375
371
|
val1.merge(val2)
|
372
|
+
# Disabled warnings are concatenated
|
373
|
+
when 'disable-warnings'
|
374
|
+
val1.concat(val2)
|
376
375
|
# All other values are overwritten
|
377
376
|
else
|
378
377
|
val2
|
@@ -408,7 +407,7 @@ module Bolt
|
|
408
407
|
end
|
409
408
|
|
410
409
|
# Filter hashes to only include valid options
|
411
|
-
%w[apply-settings apply_settings puppetfile].each do |opt|
|
410
|
+
%w[apply-settings apply_settings module-install puppetfile].each do |opt|
|
412
411
|
@data[opt] = @data[opt].slice(*OPTIONS.dig(opt, :properties).keys)
|
413
412
|
end
|
414
413
|
end
|
@@ -433,46 +432,23 @@ module Bolt
|
|
433
432
|
next if val == 'disable'
|
434
433
|
|
435
434
|
name = normalize_log(key)
|
435
|
+
acc[name] = val.slice('append', 'level').transform_keys(&:to_sym)
|
436
436
|
|
437
|
-
|
438
|
-
unless val.is_a?(Hash)
|
439
|
-
raise Bolt::ValidationError,
|
440
|
-
"config of log #{name} must be a Hash, received #{val.class} #{val.inspect}"
|
441
|
-
end
|
442
|
-
|
443
|
-
acc[name] = val.slice('append', 'level')
|
444
|
-
.transform_keys(&:to_sym)
|
445
|
-
|
446
|
-
if (v = acc[name][:level])
|
447
|
-
unless v.is_a?(String) || v.is_a?(Symbol)
|
448
|
-
raise Bolt::ValidationError,
|
449
|
-
"level of log #{name} must be a String or Symbol, received #{v.class} #{v.inspect}"
|
450
|
-
end
|
451
|
-
|
452
|
-
unless Bolt::Logger.valid_level?(v)
|
453
|
-
raise Bolt::ValidationError,
|
454
|
-
"level of log #{name} must be one of #{Bolt::Logger.levels.join(', ')}; received #{v}"
|
455
|
-
end
|
437
|
+
next unless acc[name][:level] == 'notice'
|
456
438
|
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
}
|
462
|
-
end
|
463
|
-
end
|
464
|
-
|
465
|
-
if (v = acc[name][:append]) && v != true && v != false
|
466
|
-
raise Bolt::ValidationError,
|
467
|
-
"append flag of log #{name} must be a Boolean, received #{v.class} #{v.inspect}"
|
468
|
-
end
|
439
|
+
Bolt::Logger.deprecate(
|
440
|
+
"notice_log_level",
|
441
|
+
"Log level 'notice' is deprecated and will be removed in Bolt 3.0. Use 'info' instead."
|
442
|
+
)
|
469
443
|
end
|
470
444
|
end
|
471
445
|
|
472
446
|
def validate
|
473
447
|
if @data['future']
|
474
|
-
|
475
|
-
|
448
|
+
Bolt::Logger.warn(
|
449
|
+
"future_option",
|
450
|
+
"Configuration option 'future' no longer exposes future behavior."
|
451
|
+
)
|
476
452
|
end
|
477
453
|
|
478
454
|
if @project.modules && @data['modulepath']&.include?(@project.managed_moduledir.to_s)
|
@@ -494,8 +470,35 @@ module Bolt
|
|
494
470
|
Bolt::Util.validate_file('inventory file', default_inventoryfile)
|
495
471
|
end
|
496
472
|
|
497
|
-
|
498
|
-
|
473
|
+
# Warn the user how they should be using the 'puppetfile' or
|
474
|
+
# 'module-install' config options. We don't error here since these
|
475
|
+
# settings can be set at the user or system level.
|
476
|
+
if @project.modules && puppetfile_config.any? && module_install.empty?
|
477
|
+
command = Bolt::Util.powershell? ? 'Update-BoltProject' : 'bolt project migrate'
|
478
|
+
Bolt::Logger.warn(
|
479
|
+
"module_install_config",
|
480
|
+
"Detected configuration for 'puppetfile'. This setting is not "\
|
481
|
+
"used when 'modules' is configured. Use 'module-install' instead. "\
|
482
|
+
"To automatically update your project configuration, run '#{command}'."
|
483
|
+
)
|
484
|
+
elsif @project.modules.nil? && puppetfile_config.empty? && module_install.any?
|
485
|
+
Bolt::Logger.warn(
|
486
|
+
"module_install_config",
|
487
|
+
"Detected configuration for 'module-install'. This setting is not "\
|
488
|
+
"used when 'modules' is not configured. Use 'puppetfile' instead."
|
489
|
+
)
|
490
|
+
elsif @project.modules && puppetfile_config.any? && module_install.any?
|
491
|
+
Bolt::Logger.warn(
|
492
|
+
"module_install_config",
|
493
|
+
"Detected configuration for 'puppetfile' and 'module-install'. Using "\
|
494
|
+
"configuration for 'module-install' because 'modules' is also configured."
|
495
|
+
)
|
496
|
+
elsif @project.modules.nil? && puppetfile_config.any? && module_install.any?
|
497
|
+
Bolt::Logger.warn(
|
498
|
+
"module_install_config",
|
499
|
+
"Detected configuration for 'puppetfile' and 'module-install'. Using "\
|
500
|
+
"configuration for 'puppetfile' because 'modules' is not configured."
|
501
|
+
)
|
499
502
|
end
|
500
503
|
end
|
501
504
|
|
@@ -565,6 +568,10 @@ module Bolt
|
|
565
568
|
@data['save-rerun']
|
566
569
|
end
|
567
570
|
|
571
|
+
def spinner
|
572
|
+
@data['spinner']
|
573
|
+
end
|
574
|
+
|
568
575
|
def inventoryfile
|
569
576
|
@data['inventoryfile']
|
570
577
|
end
|
@@ -584,7 +591,7 @@ module Bolt
|
|
584
591
|
def plugin_hooks
|
585
592
|
if @data['plugin-hooks'].any? && @data['plugin_hooks'].any?
|
586
593
|
Bolt::Logger.warn_once(
|
587
|
-
"
|
594
|
+
"plugin_hooks_conflict",
|
588
595
|
"Detected configuration for 'plugin-hooks' and 'plugin_hooks'. Bolt will ignore 'plugin_hooks'."
|
589
596
|
)
|
590
597
|
|
@@ -603,7 +610,7 @@ module Bolt
|
|
603
610
|
def apply_settings
|
604
611
|
if @data['apply-settings'].any? && @data['apply_settings'].any?
|
605
612
|
Bolt::Logger.warn_once(
|
606
|
-
"
|
613
|
+
"apply_settings_conflict",
|
607
614
|
"Detected configuration for 'apply-settings' and 'apply_settings'. Bolt will ignore 'apply_settings'."
|
608
615
|
)
|
609
616
|
|
@@ -619,6 +626,14 @@ module Bolt
|
|
619
626
|
@data['transport']
|
620
627
|
end
|
621
628
|
|
629
|
+
def module_install
|
630
|
+
@project.module_install || @data['module-install']
|
631
|
+
end
|
632
|
+
|
633
|
+
def disable_warnings
|
634
|
+
Set.new(@project.disable_warnings + @data['disable-warnings'])
|
635
|
+
end
|
636
|
+
|
622
637
|
# Check if there is a case-insensitive match to the path
|
623
638
|
def check_path_case(type, paths)
|
624
639
|
return if paths.nil?
|
@@ -627,7 +642,7 @@ module Bolt
|
|
627
642
|
if matches.any?
|
628
643
|
msg = "WARNING: Bolt is case sensitive when specifying a #{type}. Did you mean:\n"
|
629
644
|
matches.each { |path| msg += " #{path}\n" }
|
630
|
-
|
645
|
+
Bolt::Logger.warn("path_case", msg)
|
631
646
|
end
|
632
647
|
end
|
633
648
|
|