bolt 2.28.0 → 2.33.1

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.

Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/Puppetfile +15 -14
  3. data/bolt-modules/boltlib/lib/puppet/functions/download_file.rb +1 -1
  4. data/bolt-modules/boltlib/lib/puppet/functions/facts.rb +6 -0
  5. data/bolt-modules/boltlib/lib/puppet/functions/puppetdb_query.rb +2 -2
  6. data/bolt-modules/boltlib/lib/puppet/functions/run_command.rb +1 -1
  7. data/bolt-modules/boltlib/lib/puppet/functions/run_script.rb +1 -1
  8. data/bolt-modules/boltlib/lib/puppet/functions/run_task.rb +1 -1
  9. data/bolt-modules/boltlib/lib/puppet/functions/run_task_with.rb +1 -1
  10. data/bolt-modules/boltlib/lib/puppet/functions/upload_file.rb +1 -1
  11. data/bolt-modules/boltlib/lib/puppet/functions/write_file.rb +2 -2
  12. data/bolt-modules/out/lib/puppet/functions/out/message.rb +44 -1
  13. data/bolt-modules/prompt/lib/puppet/functions/prompt.rb +3 -0
  14. data/guides/logging.txt +18 -0
  15. data/guides/module.txt +19 -0
  16. data/guides/modulepath.txt +25 -0
  17. data/lib/bolt/bolt_option_parser.rb +50 -28
  18. data/lib/bolt/catalog.rb +1 -1
  19. data/lib/bolt/cli.rb +159 -112
  20. data/lib/bolt/config.rb +13 -1
  21. data/lib/bolt/config/modulepath.rb +30 -0
  22. data/lib/bolt/config/options.rb +38 -9
  23. data/lib/bolt/config/transport/options.rb +2 -2
  24. data/lib/bolt/error.rb +4 -0
  25. data/lib/bolt/executor.rb +13 -13
  26. data/lib/bolt/inventory.rb +10 -9
  27. data/lib/bolt/logger.rb +26 -19
  28. data/lib/bolt/module_installer.rb +198 -0
  29. data/lib/bolt/{puppetfile → module_installer}/installer.rb +3 -2
  30. data/lib/bolt/module_installer/puppetfile.rb +117 -0
  31. data/lib/bolt/module_installer/puppetfile/forge_module.rb +54 -0
  32. data/lib/bolt/module_installer/puppetfile/git_module.rb +37 -0
  33. data/lib/bolt/module_installer/puppetfile/module.rb +26 -0
  34. data/lib/bolt/module_installer/resolver.rb +76 -0
  35. data/lib/bolt/module_installer/specs.rb +93 -0
  36. data/lib/bolt/module_installer/specs/forge_spec.rb +84 -0
  37. data/lib/bolt/module_installer/specs/git_spec.rb +178 -0
  38. data/lib/bolt/outputter.rb +2 -45
  39. data/lib/bolt/outputter/human.rb +78 -18
  40. data/lib/bolt/outputter/json.rb +22 -7
  41. data/lib/bolt/outputter/logger.rb +2 -2
  42. data/lib/bolt/pal.rb +55 -45
  43. data/lib/bolt/pal/yaml_plan.rb +4 -2
  44. data/lib/bolt/pal/yaml_plan/evaluator.rb +23 -1
  45. data/lib/bolt/pal/yaml_plan/loader.rb +14 -9
  46. data/lib/bolt/plugin.rb +1 -1
  47. data/lib/bolt/plugin/module.rb +1 -1
  48. data/lib/bolt/project.rb +32 -22
  49. data/lib/bolt/project_migrator.rb +80 -0
  50. data/lib/bolt/project_migrator/base.rb +39 -0
  51. data/lib/bolt/project_migrator/config.rb +67 -0
  52. data/lib/bolt/project_migrator/inventory.rb +67 -0
  53. data/lib/bolt/project_migrator/modules.rb +200 -0
  54. data/lib/bolt/result.rb +23 -11
  55. data/lib/bolt/shell/bash.rb +15 -9
  56. data/lib/bolt/shell/powershell.rb +11 -6
  57. data/lib/bolt/transport/base.rb +18 -18
  58. data/lib/bolt/transport/docker.rb +23 -6
  59. data/lib/bolt/transport/orch.rb +23 -14
  60. data/lib/bolt/transport/remote.rb +2 -2
  61. data/lib/bolt/transport/simple.rb +6 -6
  62. data/lib/bolt/transport/ssh/connection.rb +1 -1
  63. data/lib/bolt/util.rb +41 -0
  64. data/lib/bolt/version.rb +1 -1
  65. data/lib/bolt_server/acl.rb +2 -2
  66. data/lib/bolt_server/base_config.rb +3 -3
  67. data/lib/bolt_server/schemas/partials/task.json +17 -2
  68. data/lib/bolt_server/transport_app.rb +93 -13
  69. data/lib/bolt_spec/bolt_context.rb +4 -2
  70. data/lib/bolt_spec/plans.rb +1 -1
  71. data/lib/bolt_spec/plans/action_stubs/command_stub.rb +1 -1
  72. data/lib/bolt_spec/plans/action_stubs/script_stub.rb +1 -1
  73. data/lib/bolt_spec/plans/mock_executor.rb +6 -6
  74. data/lib/bolt_spec/run.rb +1 -1
  75. metadata +31 -12
  76. data/lib/bolt/project_migrate.rb +0 -138
  77. data/lib/bolt/puppetfile.rb +0 -160
  78. data/lib/bolt/puppetfile/module.rb +0 -66
  79. data/lib/bolt_server/pe/pal.rb +0 -67
  80. data/modules/secure_env_vars/plans/init.pp +0 -20
@@ -30,7 +30,7 @@ module Bolt
30
30
  @transport_logger = transport_logger
31
31
  @logger.trace("Initializing ssh connection to #{@target.safe_name}")
32
32
 
33
- if target.options['private-key']&.instance_of?(String)
33
+ if target.options['private-key'].instance_of?(String)
34
34
  begin
35
35
  Bolt::Util.validate_file('ssh key', target.options['private-key'])
36
36
  rescue Bolt::FileError => e
@@ -3,6 +3,25 @@
3
3
  module Bolt
4
4
  module Util
5
5
  class << self
6
+ # Gets input for an argument.
7
+ def get_arg_input(value)
8
+ if value.start_with?('@')
9
+ file = value.sub(/^@/, '')
10
+ read_arg_file(file)
11
+ elsif value == '-'
12
+ $stdin.read
13
+ else
14
+ value
15
+ end
16
+ end
17
+
18
+ # Reads a file passed as an argument to a command.
19
+ def read_arg_file(file)
20
+ File.read(File.expand_path(file))
21
+ rescue StandardError => e
22
+ raise Bolt::FileError.new("Error attempting to read #{file}: #{e}", file)
23
+ end
24
+
6
25
  def read_yaml_hash(path, file_name)
7
26
  require 'yaml'
8
27
 
@@ -280,6 +299,28 @@ module Bolt
280
299
  raise Bolt::ValidationError, "path must be a String, received #{path.class} #{path}" unless path.is_a?(String)
281
300
  path.split(%r{[/\\]}).last
282
301
  end
302
+
303
+ # Prompts yes or no, returning true for yes and false for no.
304
+ #
305
+ def prompt_yes_no(prompt, outputter)
306
+ choices = {
307
+ 'y' => true,
308
+ 'yes' => true,
309
+ 'n' => false,
310
+ 'no' => false
311
+ }
312
+
313
+ loop do
314
+ outputter.print_prompt("#{prompt} ([y]es/[n]o) ")
315
+ response = $stdin.gets.to_s.downcase.chomp
316
+
317
+ if choices.key?(response)
318
+ return choices[response]
319
+ else
320
+ outputter.print_prompt_error("Invalid response, must pick [y]es or [n]o")
321
+ end
322
+ end
323
+ end
283
324
  end
284
325
  end
285
326
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bolt
4
- VERSION = '2.28.0'
4
+ VERSION = '2.33.1'
5
5
  end
@@ -16,9 +16,9 @@ module BoltServer
16
16
  end
17
17
  end
18
18
 
19
- def initialize(app, whitelist)
19
+ def initialize(app, allowlist)
20
20
  acls = []
21
- whitelist.each do |entry|
21
+ allowlist.each do |entry|
22
22
  acls << {
23
23
  'resources' => [
24
24
  {
@@ -7,7 +7,7 @@ module BoltServer
7
7
  class BaseConfig
8
8
  def config_keys
9
9
  %w[host port ssl-cert ssl-key ssl-ca-cert
10
- ssl-cipher-suites loglevel logfile whitelist projects-dir]
10
+ ssl-cipher-suites loglevel logfile allowlist projects-dir]
11
11
  end
12
12
 
13
13
  def env_keys
@@ -98,8 +98,8 @@ module BoltServer
98
98
  raise Bolt::ValidationError, "Configured 'ssl-cipher-suites' must be an array of cipher suite names"
99
99
  end
100
100
 
101
- unless @data['whitelist'].nil? || @data['whitelist'].is_a?(Array)
102
- raise Bolt::ValidationError, "Configured 'whitelist' must be an array of names"
101
+ unless @data['allowlist'].nil? || @data['allowlist'].is_a?(Array)
102
+ raise Bolt::ValidationError, "Configured 'allowlist' must be an array of names"
103
103
  end
104
104
  end
105
105
 
@@ -63,9 +63,24 @@
63
63
  "environment": {
64
64
  "description": "Environment the task is in",
65
65
  "type": "string"
66
+ },
67
+ "project": {
68
+ "description": "Project the task is in",
69
+ "type": "string"
66
70
  }
67
71
  },
68
- "required": ["environment"],
72
+ "oneOf": [
73
+ {
74
+ "required": [
75
+ "environment"
76
+ ]
77
+ },
78
+ {
79
+ "required": [
80
+ "project"
81
+ ]
82
+ }
83
+ ],
69
84
  "additionalProperties": true
70
85
  }
71
86
  },
@@ -90,5 +105,5 @@
90
105
  }
91
106
  },
92
107
  "required": ["name", "files"],
93
- "additionalProperties": false
108
+ "additionalProperties": true
94
109
  }
@@ -14,7 +14,9 @@ require 'json-schema'
14
14
 
15
15
  # These are only needed for the `/plans` endpoint.
16
16
  require 'puppet'
17
- require 'bolt_server/pe/pal'
17
+
18
+ # Needed by the `/project_file_metadatas` endpoint
19
+ require 'puppet/file_serving/fileset'
18
20
 
19
21
  module BoltServer
20
22
  class TransportApp < Sinatra::Base
@@ -35,6 +37,17 @@ module BoltServer
35
37
  transport-winrm
36
38
  ].freeze
37
39
 
40
+ # PE_BOLTLIB_PATH is intended to function exactly like the BOLTLIB_PATH used
41
+ # in Bolt::PAL. Paths and variable names are similar to what exists in
42
+ # Bolt::PAL, but with a 'PE' prefix.
43
+ PE_BOLTLIB_PATH = '/opt/puppetlabs/server/apps/bolt-server/pe-bolt-modules'
44
+
45
+ # For now at least, we maintain an entirely separate codedir from
46
+ # puppetserver by default, so that filesync can work properly. If filesync
47
+ # is not used, this can instead match the usual puppetserver codedir.
48
+ # See the `orchestrator.bolt.codedir` tk config setting.
49
+ DEFAULT_BOLT_CODEDIR = '/opt/puppetlabs/server/data/orchestration-services/code'
50
+
38
51
  def initialize(config)
39
52
  @config = config
40
53
  @schemas = Hash[REQUEST_SCHEMAS.map do |basename|
@@ -191,10 +204,52 @@ module BoltServer
191
204
  [@executor.run_script(target, file_location, body['arguments'])]
192
205
  end
193
206
 
207
+ # This function is nearly identical to Bolt::Pal's `with_puppet_settings` with the
208
+ # one difference that we set the codedir to point to actual code, rather than the
209
+ # tmpdir. We only use this funtion inside the Modulepath initializer so that Puppet
210
+ # is correctly configured to pull environment configuration correctly. If we don't
211
+ # set codedir in this way: when we try to load and interpolate the modulepath it
212
+ # won't correctly load.
213
+ #
214
+ # WARNING: THIS FUNCTION SHOULD ONLY BE CALLED INSIDE A SYNCHRONIZED PAL MUTEX
215
+ def with_pe_pal_init_settings(codedir, environmentpath, basemodulepath)
216
+ Dir.mktmpdir('pe-bolt') do |dir|
217
+ cli = []
218
+ Puppet::Settings::REQUIRED_APP_SETTINGS.each do |setting|
219
+ dir = setting == :codedir ? codedir : dir
220
+ cli << "--#{setting}" << dir
221
+ end
222
+ cli << "--environmentpath" << environmentpath
223
+ cli << "--basemodulepath" << basemodulepath
224
+ Puppet.settings.send(:clear_everything_for_tests)
225
+ Puppet.initialize_settings(cli)
226
+ yield
227
+ end
228
+ end
229
+
230
+ # Use puppet to identify the modulepath from an environment.
231
+ #
232
+ # WARNING: THIS FUNCTION SHOULD ONLY BE CALLED INSIDE A SYNCHRONIZED PAL MUTEX
233
+ def modulepath_from_environment(environment_name)
234
+ codedir = DEFAULT_BOLT_CODEDIR
235
+ environmentpath = "#{codedir}/environments"
236
+ basemodulepath = "#{codedir}/modules:/opt/puppetlabs/puppet/modules"
237
+ modulepath_dirs = nil
238
+ with_pe_pal_init_settings(codedir, environmentpath, basemodulepath) do
239
+ environment = Puppet.lookup(:environments).get!(environment_name)
240
+ modulepath_dirs = environment.modulepath
241
+ end
242
+ modulepath_dirs
243
+ end
244
+
194
245
  def in_pe_pal_env(environment)
195
246
  return [400, '`environment` is a required argument'] if environment.nil?
196
247
  @pal_mutex.synchronize do
197
- pal = BoltServer::PE::PAL.new({}, environment)
248
+ modulepath_obj = Bolt::Config::Modulepath.new(
249
+ modulepath_from_environment(environment),
250
+ boltlib_path: [PE_BOLTLIB_PATH, Bolt::Config::Modulepath::BOLTLIB_PATH]
251
+ )
252
+ pal = Bolt::PAL.new(modulepath_obj, nil, nil)
198
253
  yield pal
199
254
  rescue Puppet::Environments::EnvironmentNotFound
200
255
  [400, {
@@ -212,17 +267,12 @@ module BoltServer
212
267
  return [400, "`project_ref`: #{project_dir} does not exist"] unless Dir.exist?(project_dir)
213
268
  @pal_mutex.synchronize do
214
269
  project = Bolt::Project.create_project(project_dir)
215
- bolt_config = Bolt::Config.from_project(project, {})
216
- pal = Bolt::PAL.new(bolt_config.modulepath, nil, nil, nil, nil, nil, bolt_config.project)
217
- module_path = [
218
- BoltServer::PE::PAL::PE_BOLTLIB_PATH,
219
- Bolt::PAL::BOLTLIB_PATH,
220
- *bolt_config.modulepath,
221
- Bolt::PAL::MODULES_PATH
222
- ]
223
- # CODEREVIEW: I *think* this is the only thing we need to make different between bolt's PAL. Is it acceptable
224
- # to hack this? Modulepath is currently a readable attribute, could we make it writeable?
225
- pal.instance_variable_set(:@modulepath, module_path)
270
+ bolt_config = Bolt::Config.from_project(project, { log: { 'bolt-debug.log' => 'disable' } })
271
+ modulepath_object = Bolt::Config::Modulepath.new(
272
+ bolt_config.modulepath,
273
+ boltlib_path: [PE_BOLTLIB_PATH, Bolt::Config::Modulepath::BOLTLIB_PATH]
274
+ )
275
+ pal = Bolt::PAL.new(modulepath_object, nil, nil, nil, nil, nil, bolt_config.project)
226
276
  context = {
227
277
  pal: pal,
228
278
  config: bolt_config
@@ -307,6 +357,23 @@ module BoltServer
307
357
  plans.map { |plan_name| { 'name' => plan_name } }
308
358
  end
309
359
 
360
+ def file_metadatas(pal, module_name, file)
361
+ pal.in_bolt_compiler do
362
+ mod = Puppet.lookup(:current_environment).module(module_name)
363
+ raise ArgumentError, "`module_name`: #{module_name} does not exist" unless mod
364
+ abs_file_path = mod.file(file)
365
+ raise ArgumentError, "`file`: #{file} does not exist inside the module's 'files' directory" unless abs_file_path
366
+ fileset = Puppet::FileServing::Fileset.new(abs_file_path, 'recurse' => 'yes')
367
+ Puppet::FileServing::Fileset.merge(fileset).collect do |relative_file_path, base_path|
368
+ metadata = Puppet::FileServing::Metadata.new(base_path, relative_path: relative_file_path)
369
+ metadata.checksum_type = 'sha256'
370
+ metadata.links = 'follow'
371
+ metadata.collect
372
+ metadata.to_data_hash
373
+ end
374
+ end
375
+ end
376
+
310
377
  get '/' do
311
378
  200
312
379
  end
@@ -550,6 +617,19 @@ module BoltServer
550
617
  end
551
618
  end
552
619
 
620
+ # Implements puppetserver's file_metadatas endpoint for projects.
621
+ #
622
+ # @param project_ref [String] the project_ref to fetch the file metadatas from
623
+ get '/project_file_metadatas/:module_name/*' do
624
+ in_bolt_project(params['project_ref']) do |context|
625
+ file = params[:splat].first
626
+ metadatas = file_metadatas(context[:pal], params[:module_name], file)
627
+ [200, metadatas.to_json]
628
+ end
629
+ rescue ArgumentError => e
630
+ [400, e.message]
631
+ end
632
+
553
633
  error 404 do
554
634
  err = Bolt::Error.new("Could not find route #{request.path}",
555
635
  'boltserver/not-found')
@@ -105,7 +105,7 @@ module BoltSpec
105
105
 
106
106
  # Set the things
107
107
  Puppet[:tasks] = true
108
- RSpec.configuration.module_path = [modulepath, Bolt::PAL::BOLTLIB_PATH].join(File::PATH_SEPARATOR)
108
+ RSpec.configuration.module_path = [modulepath, Bolt::Config::Modulepath::BOLTLIB_PATH].join(File::PATH_SEPARATOR)
109
109
  opts = {
110
110
  bolt_executor: executor,
111
111
  bolt_inventory: inventory,
@@ -153,7 +153,9 @@ module BoltSpec
153
153
  end
154
154
 
155
155
  def pal
156
- @pal ||= Bolt::PAL.new(config.modulepath, config.hiera_config, config.project.resource_types)
156
+ @pal ||= Bolt::PAL.new(Bolt::Config::Modulepath.new(config.modulepath),
157
+ config.hiera_config,
158
+ config.project.resource_types)
157
159
  end
158
160
 
159
161
  BoltSpec::Plans::MOCKED_ACTIONS.each do |action|
@@ -224,7 +224,7 @@ module BoltSpec
224
224
 
225
225
  def run_plan(name, params)
226
226
  pal = Bolt::PAL.new(
227
- config.modulepath,
227
+ Bolt::Config::Modulepath.new(config.modulepath),
228
228
  config.hiera_config,
229
229
  config.project.resource_types,
230
230
  config.compile_concurrency,
@@ -29,7 +29,7 @@ module BoltSpec
29
29
  end
30
30
 
31
31
  def result_for(target, stdout: '', stderr: '')
32
- Bolt::Result.for_command(target, stdout, stderr, 0, 'command', '')
32
+ Bolt::Result.for_command(target, stdout, stderr, 0, 'command', '', [])
33
33
  end
34
34
 
35
35
  # Public methods
@@ -35,7 +35,7 @@ module BoltSpec
35
35
  end
36
36
 
37
37
  def result_for(target, stdout: '', stderr: '')
38
- Bolt::Result.for_command(target, stdout, stderr, 0, 'script', '')
38
+ Bolt::Result.for_command(target, stdout, stderr, 0, 'script', '', [])
39
39
  end
40
40
 
41
41
  # Public methods
@@ -40,7 +40,7 @@ module BoltSpec
40
40
 
41
41
  def module_file_id(file)
42
42
  modpath = @modulepath.select { |path| file =~ /^#{path}/ }
43
- raise "Could not identify module path containing #{file}: #{modpath}" unless modpath.size == 1
43
+ raise "Could not identify modulepath containing #{file}: #{modpath}" unless modpath.size == 1
44
44
 
45
45
  path = Pathname.new(file)
46
46
  relative = path.relative_path_from(Pathname.new(modpath.first))
@@ -48,7 +48,7 @@ module BoltSpec
48
48
  ([segments[0]] + segments[2..-1]).join('/')
49
49
  end
50
50
 
51
- def run_command(targets, command, options = {})
51
+ def run_command(targets, command, options = {}, _position = [])
52
52
  result = nil
53
53
  if (doub = @command_doubles[command] || @command_doubles[:default])
54
54
  result = doub.process(targets, command, options)
@@ -61,7 +61,7 @@ module BoltSpec
61
61
  result
62
62
  end
63
63
 
64
- def run_script(targets, script_path, arguments, options = {})
64
+ def run_script(targets, script_path, arguments, options = {}, _position = [])
65
65
  script = module_file_id(script_path)
66
66
  result = nil
67
67
  if (doub = @script_doubles[script] || @script_doubles[:default])
@@ -76,7 +76,7 @@ module BoltSpec
76
76
  result
77
77
  end
78
78
 
79
- def run_task(targets, task, arguments, options = {})
79
+ def run_task(targets, task, arguments, options = {}, _position = [])
80
80
  result = nil
81
81
  if (doub = @task_doubles[task.name] || @task_doubles[:default])
82
82
  result = doub.process(targets, task.name, arguments, options)
@@ -90,7 +90,7 @@ module BoltSpec
90
90
  result
91
91
  end
92
92
 
93
- def download_file(targets, source, destination, options = {})
93
+ def download_file(targets, source, destination, options = {}, _position = [])
94
94
  result = nil
95
95
  if (doub = @download_doubles[source] || @download_doubles[:default])
96
96
  result = doub.process(targets, source, destination, options)
@@ -103,7 +103,7 @@ module BoltSpec
103
103
  result
104
104
  end
105
105
 
106
- def upload_file(targets, source_path, destination, options = {})
106
+ def upload_file(targets, source_path, destination, options = {}, _position = [])
107
107
  source = module_file_id(source_path)
108
108
  result = nil
109
109
  if (doub = @upload_doubles[source] || @upload_doubles[:default])
@@ -179,7 +179,7 @@ module BoltSpec
179
179
  end
180
180
 
181
181
  def pal
182
- @pal ||= Bolt::PAL.new(config.modulepath,
182
+ @pal ||= Bolt::PAL.new(Bolt::Config::Modulepath.new(config.modulepath),
183
183
  config.hiera_config,
184
184
  config.project.resource_types,
185
185
  config.compile_concurrency)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bolt
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.28.0
4
+ version: 2.33.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-16 00:00:00.000000000 Z
11
+ date: 2020-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -182,30 +182,36 @@ dependencies:
182
182
  name: puppet
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
- - - '='
185
+ - - ">="
186
186
  - !ruby/object:Gem::Version
187
187
  version: 6.18.0
188
+ - - "<="
189
+ - !ruby/object:Gem::Version
190
+ version: '6.19'
188
191
  type: :runtime
189
192
  prerelease: false
190
193
  version_requirements: !ruby/object:Gem::Requirement
191
194
  requirements:
192
- - - '='
195
+ - - ">="
193
196
  - !ruby/object:Gem::Version
194
197
  version: 6.18.0
198
+ - - "<="
199
+ - !ruby/object:Gem::Version
200
+ version: '6.19'
195
201
  - !ruby/object:Gem::Dependency
196
202
  name: puppetfile-resolver
197
203
  requirement: !ruby/object:Gem::Requirement
198
204
  requirements:
199
205
  - - "~>"
200
206
  - !ruby/object:Gem::Version
201
- version: 0.1.0
207
+ version: '0.4'
202
208
  type: :runtime
203
209
  prerelease: false
204
210
  version_requirements: !ruby/object:Gem::Requirement
205
211
  requirements:
206
212
  - - "~>"
207
213
  - !ruby/object:Gem::Version
208
- version: 0.1.0
214
+ version: '0.4'
209
215
  - !ruby/object:Gem::Dependency
210
216
  name: puppet-resource_api
211
217
  requirement: !ruby/object:Gem::Requirement
@@ -432,6 +438,9 @@ files:
432
438
  - bolt-modules/system/lib/puppet/functions/system/env.rb
433
439
  - exe/bolt
434
440
  - guides/inventory.txt
441
+ - guides/logging.txt
442
+ - guides/module.txt
443
+ - guides/modulepath.txt
435
444
  - guides/project.txt
436
445
  - lib/bolt.rb
437
446
  - lib/bolt/analytics.rb
@@ -444,6 +453,7 @@ files:
444
453
  - lib/bolt/catalog/logging.rb
445
454
  - lib/bolt/cli.rb
446
455
  - lib/bolt/config.rb
456
+ - lib/bolt/config/modulepath.rb
447
457
  - lib/bolt/config/options.rb
448
458
  - lib/bolt/config/transport/base.rb
449
459
  - lib/bolt/config/transport/docker.rb
@@ -461,6 +471,16 @@ files:
461
471
  - lib/bolt/inventory/target.rb
462
472
  - lib/bolt/logger.rb
463
473
  - lib/bolt/module.rb
474
+ - lib/bolt/module_installer.rb
475
+ - lib/bolt/module_installer/installer.rb
476
+ - lib/bolt/module_installer/puppetfile.rb
477
+ - lib/bolt/module_installer/puppetfile/forge_module.rb
478
+ - lib/bolt/module_installer/puppetfile/git_module.rb
479
+ - lib/bolt/module_installer/puppetfile/module.rb
480
+ - lib/bolt/module_installer/resolver.rb
481
+ - lib/bolt/module_installer/specs.rb
482
+ - lib/bolt/module_installer/specs/forge_spec.rb
483
+ - lib/bolt/module_installer/specs/git_spec.rb
464
484
  - lib/bolt/node/errors.rb
465
485
  - lib/bolt/node/output.rb
466
486
  - lib/bolt/outputter.rb
@@ -494,13 +514,14 @@ files:
494
514
  - lib/bolt/plugin/puppetdb.rb
495
515
  - lib/bolt/plugin/task.rb
496
516
  - lib/bolt/project.rb
497
- - lib/bolt/project_migrate.rb
517
+ - lib/bolt/project_migrator.rb
518
+ - lib/bolt/project_migrator/base.rb
519
+ - lib/bolt/project_migrator/config.rb
520
+ - lib/bolt/project_migrator/inventory.rb
521
+ - lib/bolt/project_migrator/modules.rb
498
522
  - lib/bolt/puppetdb.rb
499
523
  - lib/bolt/puppetdb/client.rb
500
524
  - lib/bolt/puppetdb/config.rb
501
- - lib/bolt/puppetfile.rb
502
- - lib/bolt/puppetfile/installer.rb
503
- - lib/bolt/puppetfile/module.rb
504
525
  - lib/bolt/r10k_log_proxy.rb
505
526
  - lib/bolt/rerun.rb
506
527
  - lib/bolt/resource_instance.rb
@@ -537,7 +558,6 @@ files:
537
558
  - lib/bolt_server/base_config.rb
538
559
  - lib/bolt_server/config.rb
539
560
  - lib/bolt_server/file_cache.rb
540
- - lib/bolt_server/pe/pal.rb
541
561
  - lib/bolt_server/schemas/action-check_node_connections.json
542
562
  - lib/bolt_server/schemas/action-run_command.json
543
563
  - lib/bolt_server/schemas/action-run_script.json
@@ -578,7 +598,6 @@ files:
578
598
  - modules/canary/lib/puppet/functions/canary/skip.rb
579
599
  - modules/canary/plans/init.pp
580
600
  - modules/puppetdb_fact/plans/init.pp
581
- - modules/secure_env_vars/plans/init.pp
582
601
  homepage: https://github.com/puppetlabs/bolt
583
602
  licenses:
584
603
  - Apache-2.0