bolt 0.23.0 → 0.24.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.

Files changed (192) hide show
  1. checksums.yaml +4 -4
  2. data/bolt-modules/boltlib/lib/puppet/functions/apply_prep.rb +5 -2
  3. data/bolt-modules/boltlib/lib/puppet/functions/puppetdb_query.rb +5 -1
  4. data/bolt-modules/boltlib/lib/puppet/functions/run_task.rb +5 -8
  5. data/lib/bolt/applicator.rb +11 -8
  6. data/lib/bolt/boltdir.rb +13 -5
  7. data/lib/bolt/catalog.rb +22 -47
  8. data/lib/bolt/config.rb +1 -26
  9. data/lib/bolt/executor.rb +1 -1
  10. data/lib/bolt/outputter.rb +0 -9
  11. data/lib/bolt/outputter/human.rb +29 -14
  12. data/lib/bolt/outputter/json.rb +12 -1
  13. data/lib/bolt/pal.rb +12 -10
  14. data/lib/bolt/target.rb +0 -6
  15. data/lib/bolt/task.rb +53 -10
  16. data/lib/bolt/transport/base.rb +1 -6
  17. data/lib/bolt/transport/local.rb +11 -13
  18. data/lib/bolt/transport/local/shell.rb +2 -2
  19. data/lib/bolt/transport/ssh.rb +16 -11
  20. data/lib/bolt/transport/winrm.rb +8 -11
  21. data/lib/bolt/version.rb +1 -1
  22. data/lib/bolt_ext/schemas/task.json +12 -5
  23. data/libexec/apply_catalog.rb +3 -1
  24. data/libexec/bolt_catalog +4 -0
  25. data/vendored/puppet/lib/puppet.rb +2 -1
  26. data/vendored/puppet/lib/puppet/application/agent.rb +2 -6
  27. data/vendored/puppet/lib/puppet/application/apply.rb +100 -60
  28. data/vendored/puppet/lib/puppet/application/cert.rb +26 -291
  29. data/vendored/puppet/lib/puppet/application/device.rb +0 -5
  30. data/vendored/puppet/lib/puppet/application/lookup.rb +1 -1
  31. data/vendored/puppet/lib/puppet/application/ssl.rb +133 -0
  32. data/vendored/puppet/lib/puppet/application_support.rb +1 -2
  33. data/vendored/puppet/lib/puppet/configurer.rb +34 -50
  34. data/vendored/puppet/lib/puppet/configurer/downloader.rb +1 -1
  35. data/vendored/puppet/lib/puppet/configurer/plugin_handler.rb +1 -1
  36. data/vendored/puppet/lib/puppet/daemon.rb +1 -1
  37. data/vendored/puppet/lib/puppet/defaults.rb +40 -117
  38. data/vendored/puppet/lib/puppet/face/epp.rb +2 -2
  39. data/vendored/puppet/lib/puppet/face/help.rb +21 -7
  40. data/vendored/puppet/lib/puppet/face/node/clean.rb +14 -10
  41. data/vendored/puppet/lib/puppet/feature/base.rb +7 -23
  42. data/vendored/puppet/lib/puppet/feature/eventlog.rb +1 -1
  43. data/vendored/puppet/lib/puppet/file_serving/base.rb +2 -2
  44. data/vendored/puppet/lib/puppet/file_serving/fileset.rb +1 -1
  45. data/vendored/puppet/lib/puppet/file_serving/metadata.rb +2 -2
  46. data/vendored/puppet/lib/puppet/functions.rb +133 -0
  47. data/vendored/puppet/lib/puppet/functions/eyaml_lookup_key.rb +4 -5
  48. data/vendored/puppet/lib/puppet/functions/filter.rb +7 -6
  49. data/vendored/puppet/lib/puppet/functions/new.rb +37 -53
  50. data/vendored/puppet/lib/puppet/functions/warning.rb +1 -1
  51. data/vendored/puppet/lib/puppet/functions/yaml_data.rb +4 -5
  52. data/vendored/puppet/lib/puppet/gettext/config.rb +1 -1
  53. data/vendored/puppet/lib/puppet/graph.rb +0 -2
  54. data/vendored/puppet/lib/puppet/indirector/catalog/json.rb +14 -3
  55. data/vendored/puppet/lib/puppet/indirector/catalog/yaml.rb +0 -16
  56. data/vendored/puppet/lib/puppet/indirector/certificate/file.rb +0 -1
  57. data/vendored/puppet/lib/puppet/indirector/facts/yaml.rb +4 -2
  58. data/vendored/puppet/lib/puppet/indirector/key/file.rb +1 -6
  59. data/vendored/puppet/lib/puppet/indirector/node/exec.rb +1 -3
  60. data/vendored/puppet/lib/puppet/indirector/node/yaml.rb +0 -6
  61. data/vendored/puppet/lib/puppet/indirector/request.rb +1 -1
  62. data/vendored/puppet/lib/puppet/indirector/ssl_file.rb +3 -44
  63. data/vendored/puppet/lib/puppet/indirector/yaml.rb +4 -4
  64. data/vendored/puppet/lib/puppet/info_service/task_information_service.rb +7 -3
  65. data/vendored/puppet/lib/puppet/loaders.rb +1 -0
  66. data/vendored/puppet/lib/puppet/module/task.rb +198 -29
  67. data/vendored/puppet/lib/puppet/module_tool/applications/unpacker.rb +1 -1
  68. data/vendored/puppet/lib/puppet/network/format_support.rb +13 -8
  69. data/vendored/puppet/lib/puppet/network/formats.rb +93 -2
  70. data/vendored/puppet/lib/puppet/network/http/api/indirected_routes.rb +10 -3
  71. data/vendored/puppet/lib/puppet/node/facts.rb +11 -1
  72. data/vendored/puppet/lib/puppet/parser/catalog_compiler.rb +56 -0
  73. data/vendored/puppet/lib/puppet/parser/compiler.rb +3 -1
  74. data/vendored/puppet/lib/puppet/parser/functions.rb +3 -1
  75. data/vendored/puppet/lib/puppet/parser/functions/filter.rb +1 -1
  76. data/vendored/puppet/lib/puppet/parser/functions/generate.rb +1 -1
  77. data/vendored/puppet/lib/puppet/parser/functions/sprintf.rb +12 -1
  78. data/vendored/puppet/lib/puppet/parser/functions/tagged.rb +1 -4
  79. data/vendored/puppet/lib/puppet/parser/scope.rb +1 -1
  80. data/vendored/puppet/lib/puppet/parser/script_compiler.rb +7 -2
  81. data/vendored/puppet/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
  82. data/vendored/puppet/lib/puppet/pops/evaluator/runtime3_converter.rb +23 -4
  83. data/vendored/puppet/lib/puppet/pops/evaluator/runtime3_support.rb +3 -4
  84. data/vendored/puppet/lib/puppet/pops/functions/dispatch.rb +4 -0
  85. data/vendored/puppet/lib/puppet/pops/issues.rb +8 -0
  86. data/vendored/puppet/lib/puppet/pops/loader/loader.rb +2 -2
  87. data/vendored/puppet/lib/puppet/pops/loader/loader_paths.rb +3 -1
  88. data/vendored/puppet/lib/puppet/pops/loader/module_loaders.rb +30 -9
  89. data/vendored/puppet/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +62 -0
  90. data/vendored/puppet/lib/puppet/pops/loader/static_loader.rb +0 -1
  91. data/vendored/puppet/lib/puppet/pops/loader/task_instantiator.rb +13 -70
  92. data/vendored/puppet/lib/puppet/pops/loaders.rb +19 -29
  93. data/vendored/puppet/lib/puppet/pops/lookup/hiera_config.rb +1 -1
  94. data/vendored/puppet/lib/puppet/pops/model/model_label_provider.rb +4 -1
  95. data/vendored/puppet/lib/puppet/pops/pcore.rb +10 -33
  96. data/vendored/puppet/lib/puppet/pops/serialization.rb +2 -0
  97. data/vendored/puppet/lib/puppet/pops/serialization/from_data_converter.rb +2 -1
  98. data/vendored/puppet/lib/puppet/pops/serialization/to_data_converter.rb +11 -3
  99. data/vendored/puppet/lib/puppet/pops/serialization/to_stringified_converter.rb +226 -0
  100. data/vendored/puppet/lib/puppet/pops/types/p_object_type.rb +3 -0
  101. data/vendored/puppet/lib/puppet/pops/validation/checker4_0.rb +97 -47
  102. data/vendored/puppet/lib/puppet/pops/validation/validator_factory_4_0.rb +7 -8
  103. data/vendored/puppet/lib/puppet/property/keyvalue.rb +70 -8
  104. data/vendored/puppet/lib/puppet/provider/aix_object.rb +483 -0
  105. data/vendored/puppet/lib/puppet/provider/file/windows.rb +1 -1
  106. data/vendored/puppet/lib/puppet/provider/group/aix.rb +51 -112
  107. data/vendored/puppet/lib/puppet/provider/package/gem.rb +1 -1
  108. data/vendored/puppet/lib/puppet/provider/package/pip.rb +1 -1
  109. data/vendored/puppet/lib/puppet/provider/package/puppet_gem.rb +1 -1
  110. data/vendored/puppet/lib/puppet/provider/package/rpm.rb +1 -1
  111. data/vendored/puppet/lib/puppet/provider/package/windows/package.rb +1 -1
  112. data/vendored/puppet/lib/puppet/provider/package/zypper.rb +1 -1
  113. data/vendored/puppet/lib/puppet/provider/service/systemd.rb +1 -1
  114. data/vendored/puppet/lib/puppet/provider/service/windows.rb +37 -40
  115. data/vendored/puppet/lib/puppet/provider/user/aix.rb +142 -254
  116. data/vendored/puppet/lib/puppet/resource.rb +20 -3
  117. data/vendored/puppet/lib/puppet/resource/catalog.rb +2 -12
  118. data/vendored/puppet/lib/puppet/rest/routes.rb +97 -34
  119. data/vendored/puppet/lib/puppet/settings.rb +1 -1
  120. data/vendored/puppet/lib/puppet/settings/file_setting.rb +1 -1
  121. data/vendored/puppet/lib/puppet/ssl/base.rb +1 -9
  122. data/vendored/puppet/lib/puppet/ssl/certificate_request.rb +1 -13
  123. data/vendored/puppet/lib/puppet/ssl/certificate_request_attributes.rb +1 -1
  124. data/vendored/puppet/lib/puppet/ssl/host.rb +114 -232
  125. data/vendored/puppet/lib/puppet/ssl/key.rb +1 -5
  126. data/vendored/puppet/lib/puppet/ssl/oids.rb +1 -1
  127. data/vendored/puppet/lib/puppet/test/test_helper.rb +0 -4
  128. data/vendored/puppet/lib/puppet/transaction/event.rb +3 -7
  129. data/vendored/puppet/lib/puppet/transaction/persistence.rb +1 -1
  130. data/vendored/puppet/lib/puppet/type/exec.rb +18 -16
  131. data/vendored/puppet/lib/puppet/type/file.rb +3 -3
  132. data/vendored/puppet/lib/puppet/type/file/source.rb +20 -7
  133. data/vendored/puppet/lib/puppet/type/group.rb +3 -5
  134. data/vendored/puppet/lib/puppet/type/notify.rb +1 -1
  135. data/vendored/puppet/lib/puppet/type/package.rb +2 -5
  136. data/vendored/puppet/lib/puppet/type/schedule.rb +1 -1
  137. data/vendored/puppet/lib/puppet/type/service.rb +3 -6
  138. data/vendored/puppet/lib/puppet/type/tidy.rb +1 -1
  139. data/vendored/puppet/lib/puppet/type/user.rb +13 -20
  140. data/vendored/puppet/lib/puppet/util.rb +8 -9
  141. data/vendored/puppet/lib/puppet/util/execution.rb +3 -3
  142. data/vendored/puppet/lib/puppet/util/feature.rb +61 -39
  143. data/vendored/puppet/lib/puppet/util/log/destinations.rb +1 -1
  144. data/vendored/puppet/lib/puppet/util/rdoc.rb +1 -1
  145. data/vendored/puppet/lib/puppet/util/run_mode.rb +1 -1
  146. data/vendored/puppet/lib/puppet/util/storage.rb +1 -1
  147. data/vendored/puppet/lib/puppet/util/suidmanager.rb +7 -5
  148. data/vendored/puppet/lib/puppet/util/tag_set.rb +1 -1
  149. data/vendored/puppet/lib/puppet/util/tagging.rb +1 -1
  150. data/vendored/puppet/lib/puppet/util/windows.rb +18 -2
  151. data/vendored/puppet/lib/puppet/util/windows/adsi.rb +154 -205
  152. data/vendored/puppet/lib/puppet/util/windows/service.rb +770 -0
  153. data/vendored/puppet/lib/puppet/util/yaml.rb +41 -5
  154. data/vendored/puppet/lib/puppet/version.rb +1 -1
  155. data/vendored/puppet/lib/puppet_pal.rb +280 -24
  156. metadata +8 -38
  157. data/lib/bolt/catalog/compiler.rb +0 -48
  158. data/lib/bolt/catalog/loaders.rb +0 -19
  159. data/vendored/puppet/lib/puppet/application/ca.rb +0 -11
  160. data/vendored/puppet/lib/puppet/application/certificate.rb +0 -17
  161. data/vendored/puppet/lib/puppet/application/certificate_request.rb +0 -7
  162. data/vendored/puppet/lib/puppet/application/certificate_revocation_list.rb +0 -7
  163. data/vendored/puppet/lib/puppet/face/ca.rb +0 -266
  164. data/vendored/puppet/lib/puppet/face/certificate.rb +0 -167
  165. data/vendored/puppet/lib/puppet/face/certificate_request.rb +0 -56
  166. data/vendored/puppet/lib/puppet/face/certificate_revocation_list.rb +0 -56
  167. data/vendored/puppet/lib/puppet/graph/random_prioritizer.rb +0 -16
  168. data/vendored/puppet/lib/puppet/graph/title_hash_prioritizer.rb +0 -16
  169. data/vendored/puppet/lib/puppet/indirector/certificate/ca.rb +0 -9
  170. data/vendored/puppet/lib/puppet/indirector/certificate/disabled_ca.rb +0 -22
  171. data/vendored/puppet/lib/puppet/indirector/certificate_request/ca.rb +0 -22
  172. data/vendored/puppet/lib/puppet/indirector/certificate_request/disabled_ca.rb +0 -22
  173. data/vendored/puppet/lib/puppet/indirector/certificate_revocation_list/ca.rb +0 -8
  174. data/vendored/puppet/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +0 -22
  175. data/vendored/puppet/lib/puppet/indirector/certificate_revocation_list/file.rb +0 -8
  176. data/vendored/puppet/lib/puppet/indirector/certificate_revocation_list/rest.rb +0 -11
  177. data/vendored/puppet/lib/puppet/indirector/certificate_status.rb +0 -4
  178. data/vendored/puppet/lib/puppet/indirector/certificate_status/file.rb +0 -91
  179. data/vendored/puppet/lib/puppet/indirector/certificate_status/rest.rb +0 -11
  180. data/vendored/puppet/lib/puppet/indirector/key/ca.rb +0 -16
  181. data/vendored/puppet/lib/puppet/indirector/key/disabled_ca.rb +0 -22
  182. data/vendored/puppet/lib/puppet/indirector/ldap.rb +0 -86
  183. data/vendored/puppet/lib/puppet/indirector/node/ldap.rb +0 -275
  184. data/vendored/puppet/lib/puppet/provider/aixobject.rb +0 -392
  185. data/vendored/puppet/lib/puppet/provider/cron/crontab.rb +0 -297
  186. data/vendored/puppet/lib/puppet/ssl/certificate_authority.rb +0 -475
  187. data/vendored/puppet/lib/puppet/ssl/certificate_authority/autosign_command.rb +0 -45
  188. data/vendored/puppet/lib/puppet/ssl/certificate_authority/interface.rb +0 -324
  189. data/vendored/puppet/lib/puppet/ssl/certificate_factory.rb +0 -219
  190. data/vendored/puppet/lib/puppet/ssl/certificate_revocation_list.rb +0 -111
  191. data/vendored/puppet/lib/puppet/ssl/inventory.rb +0 -55
  192. data/vendored/puppet/lib/puppet/type/cron.rb +0 -480
@@ -1,15 +1,51 @@
1
1
  require 'yaml'
2
2
 
3
3
  module Puppet::Util::Yaml
4
- if defined?(::Psych::SyntaxError)
5
- YamlLoadExceptions = [::StandardError, ::Psych::SyntaxError]
6
- else
7
- YamlLoadExceptions = [::StandardError]
8
- end
4
+ YamlLoadExceptions = [::StandardError, ::Psych::Exception]
9
5
 
10
6
  class YamlLoadError < Puppet::Error; end
11
7
 
8
+ # Safely load the content as YAML. By default only the following
9
+ # classes can be deserialized:
10
+ #
11
+ # * TrueClass
12
+ # * FalseClass
13
+ # * NilClass
14
+ # * Numeric
15
+ # * String
16
+ # * Array
17
+ # * Hash
18
+ #
19
+ # Attempting to deserialize other classes will raise an YamlLoadError
20
+ # exception unless they are specified in the array of *allowed_classes*.
21
+ # @param [String] yaml The yaml content to parse.
22
+ # @param [Array] allowed_classes Additional list of classes that can be deserialized.
23
+ # @param [String] filename The filename to load from, used if an exception is raised.
24
+ # @raise [YamlLoadException] If deserialization fails.
25
+ # @return The parsed YAML, which can be Hash, Array or scalar types.
26
+ def self.safe_load(yaml, allowed_classes = [], filename = nil)
27
+ data = YAML.safe_load(yaml, allowed_classes, [], true, filename)
28
+ data = false if data.nil?
29
+ data
30
+ rescue ::Psych::DisallowedClass => detail
31
+ path = filename ? "(#{filename})" : "(<unknown>)"
32
+ raise YamlLoadError.new("#{path}: #{detail.message}", detail)
33
+ rescue *YamlLoadExceptions => detail
34
+ raise YamlLoadError.new(detail.message, detail)
35
+ end
36
+
37
+ # Safely load the content from a file as YAML.
38
+ #
39
+ # @see Puppet::Util::Yaml.safe_load
40
+ def self.safe_load_file(filename, allowed_classes = [])
41
+ yaml = Puppet::FileSystem.read(filename, :encoding => 'bom|utf-8')
42
+ safe_load(yaml, allowed_classes, filename)
43
+ end
44
+
45
+ # @deprecated Use {#safe_load_file} instead.
12
46
  def self.load_file(filename, default_value = false, strip_classes = false)
47
+ Puppet.deprecation_warning(_("Puppet::Util::Yaml.load_file is deprecated. Use safe_load_file instead."))
48
+
13
49
  if(strip_classes) then
14
50
  data = YAML::parse_file(filename)
15
51
  data.root.each do |o|
@@ -6,7 +6,7 @@
6
6
  # Raketasks and such to set the version based on the output of `git describe`
7
7
 
8
8
  module Puppet
9
- PUPPETVERSION = '6.0.0'
9
+ PUPPETVERSION = '6.0.1'
10
10
 
11
11
  ##
12
12
  # version is a public API method intended to always provide a fast and
@@ -3,6 +3,7 @@
3
3
  # Yes, this requires all of puppet for now because 'settings' and many other things...
4
4
  require 'puppet'
5
5
  require 'puppet/parser/script_compiler'
6
+ require 'puppet/parser/catalog_compiler'
6
7
 
7
8
  # This is the main entry point for "Puppet As a Library" PAL.
8
9
  # This file should be required instead of "puppet"
@@ -175,7 +176,7 @@ module Pal
175
176
  #
176
177
  def parse_file(file)
177
178
  unless file.is_a?(String)
178
- raise ArgumentError, _("The argument 'file' must be a String, got %{type}") % { type: puppet_code.class }
179
+ raise ArgumentError, _("The argument 'file' must be a String, got %{type}") % { type: file.class }
179
180
  end
180
181
  internal_evaluator.parse_file(file)
181
182
  end
@@ -217,6 +218,13 @@ module Pal
217
218
  call_function('new', t, *arguments)
218
219
  end
219
220
 
221
+ # Returns true if this is a compiler that compiles a catalog.
222
+ # This implementation returns `false`
223
+ # @return Boolan false
224
+ def has_catalog?
225
+ false
226
+ end
227
+
220
228
  protected
221
229
 
222
230
  def list_loadable_kind(kind, filter_regex = nil, error_collector = nil)
@@ -301,6 +309,166 @@ module Pal
301
309
  end
302
310
  end
303
311
 
312
+ # A CatalogCompiler is a compiler that builds a catalog of resources and dependencies as a side effect of
313
+ # evaluating puppet language code.
314
+ # When the compilation of the given input manifest(s)/code string/file is finished the catalog is complete
315
+ # for encoding and use. It is also possible to evaluate more strings within the same compilation context to
316
+ # add or remove things from the catalog.
317
+ #
318
+ # @api public
319
+ class CatalogCompiler < Compiler
320
+
321
+ # @api private
322
+ def catalog
323
+ internal_compiler.catalog
324
+ end
325
+ private :catalog
326
+
327
+ # Returns true if this is a compiler that compiles a catalog.
328
+ # This implementation returns `true`
329
+ # @return [Boolean] true
330
+ # @api public
331
+ def has_catalog?
332
+ true
333
+ end
334
+
335
+ # Calls a block of code and yields a configured `JsonCatalogEncoder` to the block.
336
+ # @example Get resulting catalog as pretty printed Json
337
+ # Puppet::Pal.in_environment(...) do |pal|
338
+ # pal.with_catalog_compiler(...) do |compiler|
339
+ # compiler.with_json_encoding {| encoder | encoder.encode
340
+ # end
341
+ # end
342
+ #
343
+ # @api public
344
+ #
345
+ def with_json_encoding(pretty: true, exclude_virtual: true)
346
+ yield JsonCatalogEncoder.new(catalog, pretty: pretty, exclude_virtual: exclude_virtual)
347
+ end
348
+
349
+ # Evaluates an AST obtained from `parse_string` or `parse_file` in topscope.
350
+ # If the ast is a `Puppet::Pops::Model::Program` (what is returned from the `parse` methods, any definitions
351
+ # in the program (that is, any function, plan, etc. that is defined will be made available for use).
352
+ #
353
+ # @param ast [Puppet::Pops::Model::PopsObject] typically the returned `Program` from the parse methods, but can be any `Expression`
354
+ # @returns [Object] whatever the ast evaluates to
355
+ #
356
+ def evaluate(ast)
357
+ if ast.is_a?(Puppet::Pops::Model::Program)
358
+ bridged = Puppet::Parser::AST::PopsBridge::Program.new(ast)
359
+ # define all catalog types
360
+ internal_compiler.environment.known_resource_types.import_ast(bridged, "")
361
+ bridged.evaluate(internal_compiler.topscope)
362
+ else
363
+ internal_evaluator.evaluate(topscope, ast)
364
+ end
365
+ end
366
+
367
+
368
+ # Compiles the result of additional evaluation taking place in a PAL catalog compilation.
369
+ # This will evaluate all lazy constructs until all have been evaluated, and will the validate
370
+ # the result.
371
+ #
372
+ # This should be called if evaluating string or files of puppet logic after the initial
373
+ # compilation taking place by giving PAL a manifest or code-string.
374
+ # This method should be called when a series of evaluation should have reached a
375
+ # valid state (there should be no dangling relationships (to resources that does not
376
+ # exist).
377
+ #
378
+ # As an alternative the methods `evaluate_additions` can be called without any
379
+ # requirements on consistency and then calling `validate` at the end.
380
+ #
381
+ # Can be called multiple times.
382
+ #
383
+ # @return [Void]
384
+ def compile_additions
385
+ internal_compiler.compile_additions
386
+ end
387
+
388
+ # Validates the state of the catalog (without performing evaluation of any elements
389
+ # requiring lazy evaluation. Can be called multiple times.
390
+ #
391
+ def validate
392
+ internal_compiler.validate
393
+ end
394
+
395
+ # Evaluates all lazy constructs that were produced as a side effect of evaluating puppet logic.
396
+ # Can be called multiple times.
397
+ #
398
+ def evaluate_additions
399
+ internal_compiler.evaluate_additions
400
+ end
401
+
402
+ end
403
+
404
+ # The JsonCatalogEncoder is a wrapper around a catalog produced by the Pal::CatalogCompiler.with_json_encoding
405
+ # method.
406
+ # It allows encoding the entire catalog or an individual resource as Rich Data Json.
407
+ #
408
+ # @api public
409
+ #
410
+ class JsonCatalogEncoder
411
+ # Is the resulting Json pretty printed or not.
412
+ attr_reader :pretty
413
+
414
+ # Should unrealized virtual resources be included in the result or not.
415
+ attr_reader :exclude_virtual
416
+
417
+ # The internal catalog being build - what this class wraps with a public API.
418
+ attr_reader :catalog
419
+ private :catalog
420
+
421
+ # Do not instantiate this class directly! Use the `Pal::CatalogCompiler#with_json_encoding` method
422
+ # instead.
423
+ #
424
+ # @param catalog [Puppet::Resource::Catalog] the internal catalog that this class wraps
425
+ # @param pretty [Boolean] (true), if the resulting JSON should be pretty printed or not
426
+ # @param exclude_virtual [Boolean] (true), if the resulting catalog should contain unrealzed virtual resources or not
427
+ #
428
+ # @api private
429
+ #
430
+ def initialize(catalog, pretty: true, exclude_virtual: true)
431
+ @catalog = catalog
432
+ @pretty = pretty
433
+ @exclude_virtual = exclude_virtual
434
+ end
435
+
436
+ # Encodes the entire catalog as a rich-data Json catalog.
437
+ # @return String The catalog in Json format using rich data format
438
+ # @api public
439
+ #
440
+ def encode
441
+ possibly_filtered_catalog.to_json(:pretty => pretty)
442
+ end
443
+
444
+ # Returns one particular resource as a Json string, or returns nil if resource was not found.
445
+ # @param type [String] the name of the puppet type (case independent)
446
+ # @param title [String] the title of the wanted resource
447
+ # @return [String] the resulting Json text
448
+ # @api public
449
+ #
450
+ def encode_resource(type, title)
451
+ # Ensure that both type and title are given since the underlying API will do mysterious things
452
+ # if 'title' is nil. (Other assertions are made by the catalog when looking up the resource).
453
+ #
454
+ # TRANSLATORS 'type' and 'title' are internal parameter names - do not translate
455
+ raise ArgumentError, _("Both type and title must be given") if type.nil? or title.nil?
456
+ r = possibly_filtered_catalog.resource(type, title)
457
+ return nil if r.nil?
458
+ r.to_data_hash.to_json(:pretty => pretty)
459
+ end
460
+
461
+ # Applies a filter for virtual resources and returns filtered catalog
462
+ # or the catalog itself if filtering was not needed.
463
+ # The result is cached.
464
+ # @api private
465
+ #
466
+ def possibly_filtered_catalog
467
+ @filtered ||= (exclude_virtual ? catalog.filter { |r| r.virtual? } : catalog)
468
+ end
469
+ private :possibly_filtered_catalog
470
+ end
471
+
304
472
  # A FunctionSignature is returned from `function_signature`. Its purpose is to answer questions about the function's parameters
305
473
  # and if it can be called with a set of parameters.
306
474
  #
@@ -371,9 +539,7 @@ module Pal
371
539
  params_type = if params.nil?
372
540
  T_GENERIC_TASK_HASH
373
541
  else
374
- key_to_type = {}
375
- @task.parameters.each_pair { |k, v| key_to_type[k] = v['type'] }
376
- Puppet::Pops::Types::TypeFactory.struct(key_to_type)
542
+ Puppet::Pops::Types::TypeFactory.struct(params)
377
543
  end
378
544
  return true if params_type.instance?(args_hash)
379
545
 
@@ -534,7 +700,7 @@ module Pal
534
700
 
535
701
  # If manifest_file is nil, the #main method will use the env configured manifest
536
702
  # to do things in the block while a Script Compiler is in effect
537
- main(manifest_file, facts, variables, &block)
703
+ main(manifest_file, facts, variables, :script, &block)
538
704
  end
539
705
 
540
706
  # Evaluates a Puppet Language script string.
@@ -561,6 +727,74 @@ module Pal
561
727
  end
562
728
  end
563
729
 
730
+ # Defines a context in which multiple operations in an env with a catalog producing compiler can be performed
731
+ # in a given block.
732
+ # The calls that takes place to PAL inside of the given block are all with the same instance of the compiler.
733
+ # The parameter `configured_by_env` makes it possible to either use the configuration in the environment, or specify
734
+ # `manifest_file` or `code_string` manually. If neither is given, an empty `code_string` is used.
735
+ #
736
+ # @example define a catalog compiler without any initial logic
737
+ # pal.with_catalog_compiler do | compiler |
738
+ # # do things with compiler
739
+ # end
740
+ #
741
+ # @example define a catalog compiler with a code_string containing initial logic
742
+ # pal.with_catalog_compiler(code_string: '$myglobal_var = 42') do | compiler |
743
+ # # do things with compiler
744
+ # end
745
+ #
746
+ # @param configured_by_env [Boolean] when true the environment's settings are used, otherwise the
747
+ # given `manifest_file` or `code_string`
748
+ # @param manifest_file [String] a Puppet Language file to load and evaluate before calling the given block, mutually exclusive
749
+ # with `code_string`
750
+ # @param code_string [String] a Puppet Language source string to load and evaluate before calling the given block, mutually
751
+ # exclusive with `manifest_file`
752
+ # @param facts [Hash] optional map of fact name to fact value - if not given will initialize the facts (which is a slow operation)
753
+ # If given at the environment level, the facts given here are merged with higher priority.
754
+ # @param variables [Hash] optional map of fully qualified variable name to value. If given at the environment level, the variables
755
+ # given here are merged with higher priority.
756
+ # @param block [Proc] the block performing operations on compiler
757
+ # @return [Object] what the block returns
758
+ # @yieldparam [Puppet::Pal::CatalogCompiler] compiler, a CatalogCompiler to perform operations on.
759
+ #
760
+ def self.with_catalog_compiler(
761
+ configured_by_env: false,
762
+ manifest_file: nil,
763
+ code_string: nil,
764
+ facts: nil,
765
+ variables: nil,
766
+ &block
767
+ )
768
+ # TRANSLATORS: do not translate variable name strings in these assertions
769
+ assert_mutually_exclusive(manifest_file, code_string, 'manifest_file', 'code_string')
770
+ assert_non_empty_string(manifest_file, 'manifest_file', true)
771
+ assert_non_empty_string(code_string, 'code_string', true)
772
+ assert_type(T_BOOLEAN, configured_by_env, "configured_by_env", false)
773
+
774
+ if configured_by_env
775
+ unless manifest_file.nil? && code_string.nil?
776
+ # TRANSLATORS: do not translate the variable names in this error message
777
+ raise ArgumentError, _("manifest_file or code_string cannot be given when configured_by_env is true")
778
+ end
779
+ # Use the manifest setting
780
+ manifest_file = Puppet[:manifest]
781
+ else
782
+ # An "undef" code_string is the only way to override Puppet[:manifest] & Puppet[:code] settings since an
783
+ # empty string is taken as Puppet[:code] not being set.
784
+ #
785
+ if manifest_file.nil? && code_string.nil?
786
+ code_string = 'undef'
787
+ end
788
+ end
789
+
790
+ Puppet[:tasks] = false
791
+ # After the assertions, if code_string is non nil - it has the highest precedence
792
+ Puppet[:code] = code_string unless code_string.nil?
793
+
794
+ # If manifest_file is nil, the #main method will use the env configured manifest
795
+ # to do things in the block while a Script Compiler is in effect
796
+ main(manifest_file, facts, variables, :catalog, &block)
797
+ end
564
798
 
565
799
  # Defines the context in which to perform puppet operations (evaluation, etc)
566
800
  # The code to evaluate in this context is given in a block.
@@ -743,7 +977,7 @@ module Pal
743
977
  # Picks up information from the puppet context and configures a script compiler which is given to
744
978
  # the provided block
745
979
  #
746
- def self.main(manifest, facts, variables)
980
+ def self.main(manifest, facts, variables, internal_compiler_class)
747
981
  # Configure the load path
748
982
  env = Puppet.lookup(:pal_env)
749
983
  env.each_plugin_directory do |dir|
@@ -796,34 +1030,45 @@ module Pal
796
1030
  # fixup trusted information
797
1031
  node.sanitize()
798
1032
 
799
- compiler = Puppet::Parser::ScriptCompiler.new(node.environment, node.name)
1033
+ compiler = create_internal_compiler(internal_compiler_class, node)
1034
+ # compiler = Puppet::Parser::ScriptCompiler.new(node.environment, node.name)
800
1035
  topscope = compiler.topscope
801
1036
 
802
1037
  # When scripting the trusted data are always local, but set them anyway
803
- topscope.set_trusted(node.trusted_data)
1038
+ # When compiling for a catalog, the catalog compiler does this
1039
+ unless internal_compiler_class == :catalog
1040
+ topscope.set_trusted(node.trusted_data)
804
1041
 
805
- # Server facts are always about the local node's version etc.
806
- topscope.set_server_facts(node.server_facts)
1042
+ # Server facts are always about the local node's version etc.
1043
+ topscope.set_server_facts(node.server_facts)
807
1044
 
808
- # Set $facts for the node running the script
809
- facts_hash = node.facts.nil? ? {} : node.facts.values
810
- topscope.set_facts(facts_hash)
1045
+ # Set $facts for the node running the script
1046
+ facts_hash = node.facts.nil? ? {} : node.facts.values
1047
+ topscope.set_facts(facts_hash)
811
1048
 
812
- # create the $settings:: variables
813
- topscope.merge_settings(node.environment.name, false)
1049
+ # create the $settings:: variables
1050
+ topscope.merge_settings(node.environment.name, false)
1051
+ end
814
1052
 
815
1053
  add_variables(topscope, pal_variables)
816
1054
 
817
- # compiler.compile(&block)
818
- compiler.compile do | internal_compiler |
819
- # wrap the internal compiler to prevent it from leaking in the PAL API
820
- if block_given?
821
- script_compiler = ScriptCompiler.new(internal_compiler)
1055
+ case internal_compiler_class
1056
+ when :script
1057
+ pal_compiler = ScriptCompiler.new(compiler)
1058
+ overrides[:pal_script_compiler] = overrides[:pal_compiler] = pal_compiler
1059
+ when :catalog
1060
+ pal_compiler = CatalogCompiler.new(compiler)
1061
+ overrides[:pal_catalog_compiler] = overrides[:pal_compiler] = pal_compiler
1062
+ end
822
1063
 
823
- # Make compiler available to Puppet#lookup
824
- overrides[:pal_script_compiler] = script_compiler
825
- Puppet.override(overrides, "PAL::with_script_compiler") do # TRANSLATORS: Do not translate, symbolic name
826
- yield(script_compiler)
1064
+ # Make compiler available to Puppet#lookup and injection in functions
1065
+ # TODO: The compiler instances should be available under non PAL use as well!
1066
+ # TRANSLATORS: Do not translate, symbolic name
1067
+ Puppet.override(overrides, "PAL::with_#{internal_compiler_class}_compiler") do
1068
+ compiler.compile do | compiler_yield |
1069
+ # wrap the internal compiler to prevent it from leaking in the PAL API
1070
+ if block_given?
1071
+ yield(pal_compiler)
827
1072
  end
828
1073
  end
829
1074
  end
@@ -840,6 +1085,17 @@ module Pal
840
1085
  end
841
1086
  private_class_method :main
842
1087
 
1088
+ def self.create_internal_compiler(compiler_class_reference, node)
1089
+ case compiler_class_reference
1090
+ when :script
1091
+ Puppet::Parser::ScriptCompiler.new(node.environment, node.name)
1092
+ when :catalog
1093
+ Puppet::Parser::CatalogCompiler.new(node)
1094
+ else
1095
+ raise ArgumentError, "Internal Error: Invalid compiler type requested."
1096
+ end
1097
+ end
1098
+
843
1099
  T_STRING = Puppet::Pops::Types::PStringType::NON_EMPTY
844
1100
  T_STRING_ARRAY = Puppet::Pops::Types::TypeFactory.array_of(T_STRING)
845
1101
  T_ANY_ARRAY = Puppet::Pops::Types::TypeFactory.array_of_any
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: 0.23.0
4
+ version: 0.24.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-19 00:00:00.000000000 Z
11
+ date: 2018-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -317,8 +317,6 @@ files:
317
317
  - lib/bolt/bolt_option_parser.rb
318
318
  - lib/bolt/boltdir.rb
319
319
  - lib/bolt/catalog.rb
320
- - lib/bolt/catalog/compiler.rb
321
- - lib/bolt/catalog/loaders.rb
322
320
  - lib/bolt/catalog/logging.rb
323
321
  - lib/bolt/cli.rb
324
322
  - lib/bolt/config.rb
@@ -546,12 +544,8 @@ files:
546
544
  - vendored/puppet/lib/puppet/application.rb
547
545
  - vendored/puppet/lib/puppet/application/agent.rb
548
546
  - vendored/puppet/lib/puppet/application/apply.rb
549
- - vendored/puppet/lib/puppet/application/ca.rb
550
547
  - vendored/puppet/lib/puppet/application/catalog.rb
551
548
  - vendored/puppet/lib/puppet/application/cert.rb
552
- - vendored/puppet/lib/puppet/application/certificate.rb
553
- - vendored/puppet/lib/puppet/application/certificate_request.rb
554
- - vendored/puppet/lib/puppet/application/certificate_revocation_list.rb
555
549
  - vendored/puppet/lib/puppet/application/config.rb
556
550
  - vendored/puppet/lib/puppet/application/describe.rb
557
551
  - vendored/puppet/lib/puppet/application/device.rb
@@ -573,6 +567,7 @@ files:
573
567
  - vendored/puppet/lib/puppet/application/report.rb
574
568
  - vendored/puppet/lib/puppet/application/resource.rb
575
569
  - vendored/puppet/lib/puppet/application/script.rb
570
+ - vendored/puppet/lib/puppet/application/ssl.rb
576
571
  - vendored/puppet/lib/puppet/application/status.rb
577
572
  - vendored/puppet/lib/puppet/application_support.rb
578
573
  - vendored/puppet/lib/puppet/coercion.rb
@@ -608,12 +603,8 @@ files:
608
603
  - vendored/puppet/lib/puppet/external/pson/pure/parser.rb
609
604
  - vendored/puppet/lib/puppet/external/pson/version.rb
610
605
  - vendored/puppet/lib/puppet/face.rb
611
- - vendored/puppet/lib/puppet/face/ca.rb
612
606
  - vendored/puppet/lib/puppet/face/catalog.rb
613
607
  - vendored/puppet/lib/puppet/face/catalog/select.rb
614
- - vendored/puppet/lib/puppet/face/certificate.rb
615
- - vendored/puppet/lib/puppet/face/certificate_request.rb
616
- - vendored/puppet/lib/puppet/face/certificate_revocation_list.rb
617
608
  - vendored/puppet/lib/puppet/face/config.rb
618
609
  - vendored/puppet/lib/puppet/face/epp.rb
619
610
  - vendored/puppet/lib/puppet/face/facts.rb
@@ -776,12 +767,10 @@ files:
776
767
  - vendored/puppet/lib/puppet/graph.rb
777
768
  - vendored/puppet/lib/puppet/graph/key.rb
778
769
  - vendored/puppet/lib/puppet/graph/prioritizer.rb
779
- - vendored/puppet/lib/puppet/graph/random_prioritizer.rb
780
770
  - vendored/puppet/lib/puppet/graph/rb_tree_map.rb
781
771
  - vendored/puppet/lib/puppet/graph/relationship_graph.rb
782
772
  - vendored/puppet/lib/puppet/graph/sequential_prioritizer.rb
783
773
  - vendored/puppet/lib/puppet/graph/simple_graph.rb
784
- - vendored/puppet/lib/puppet/graph/title_hash_prioritizer.rb
785
774
  - vendored/puppet/lib/puppet/indirector.rb
786
775
  - vendored/puppet/lib/puppet/indirector/catalog/compiler.rb
787
776
  - vendored/puppet/lib/puppet/indirector/catalog/json.rb
@@ -789,22 +778,11 @@ files:
789
778
  - vendored/puppet/lib/puppet/indirector/catalog/rest.rb
790
779
  - vendored/puppet/lib/puppet/indirector/catalog/store_configs.rb
791
780
  - vendored/puppet/lib/puppet/indirector/catalog/yaml.rb
792
- - vendored/puppet/lib/puppet/indirector/certificate/ca.rb
793
- - vendored/puppet/lib/puppet/indirector/certificate/disabled_ca.rb
794
781
  - vendored/puppet/lib/puppet/indirector/certificate/file.rb
795
782
  - vendored/puppet/lib/puppet/indirector/certificate/rest.rb
796
- - vendored/puppet/lib/puppet/indirector/certificate_request/ca.rb
797
- - vendored/puppet/lib/puppet/indirector/certificate_request/disabled_ca.rb
798
783
  - vendored/puppet/lib/puppet/indirector/certificate_request/file.rb
799
784
  - vendored/puppet/lib/puppet/indirector/certificate_request/memory.rb
800
785
  - vendored/puppet/lib/puppet/indirector/certificate_request/rest.rb
801
- - vendored/puppet/lib/puppet/indirector/certificate_revocation_list/ca.rb
802
- - vendored/puppet/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb
803
- - vendored/puppet/lib/puppet/indirector/certificate_revocation_list/file.rb
804
- - vendored/puppet/lib/puppet/indirector/certificate_revocation_list/rest.rb
805
- - vendored/puppet/lib/puppet/indirector/certificate_status.rb
806
- - vendored/puppet/lib/puppet/indirector/certificate_status/file.rb
807
- - vendored/puppet/lib/puppet/indirector/certificate_status/rest.rb
808
786
  - vendored/puppet/lib/puppet/indirector/code.rb
809
787
  - vendored/puppet/lib/puppet/indirector/data_binding/hiera.rb
810
788
  - vendored/puppet/lib/puppet/indirector/data_binding/none.rb
@@ -839,15 +817,11 @@ files:
839
817
  - vendored/puppet/lib/puppet/indirector/hiera.rb
840
818
  - vendored/puppet/lib/puppet/indirector/indirection.rb
841
819
  - vendored/puppet/lib/puppet/indirector/json.rb
842
- - vendored/puppet/lib/puppet/indirector/key/ca.rb
843
- - vendored/puppet/lib/puppet/indirector/key/disabled_ca.rb
844
820
  - vendored/puppet/lib/puppet/indirector/key/file.rb
845
821
  - vendored/puppet/lib/puppet/indirector/key/memory.rb
846
- - vendored/puppet/lib/puppet/indirector/ldap.rb
847
822
  - vendored/puppet/lib/puppet/indirector/memory.rb
848
823
  - vendored/puppet/lib/puppet/indirector/msgpack.rb
849
824
  - vendored/puppet/lib/puppet/indirector/node/exec.rb
850
- - vendored/puppet/lib/puppet/indirector/node/ldap.rb
851
825
  - vendored/puppet/lib/puppet/indirector/node/memory.rb
852
826
  - vendored/puppet/lib/puppet/indirector/node/msgpack.rb
853
827
  - vendored/puppet/lib/puppet/indirector/node/plain.rb
@@ -973,6 +947,7 @@ files:
973
947
  - vendored/puppet/lib/puppet/parser/ast/resource_instance.rb
974
948
  - vendored/puppet/lib/puppet/parser/ast/resourceparam.rb
975
949
  - vendored/puppet/lib/puppet/parser/ast/top_level_construct.rb
950
+ - vendored/puppet/lib/puppet/parser/catalog_compiler.rb
976
951
  - vendored/puppet/lib/puppet/parser/compiler.rb
977
952
  - vendored/puppet/lib/puppet/parser/compiler/catalog_validator.rb
978
953
  - vendored/puppet/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb
@@ -1087,6 +1062,7 @@ files:
1087
1062
  - vendored/puppet/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb
1088
1063
  - vendored/puppet/lib/puppet/pops/loader/ruby_data_type_instantiator.rb
1089
1064
  - vendored/puppet/lib/puppet/pops/loader/ruby_function_instantiator.rb
1065
+ - vendored/puppet/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb
1090
1066
  - vendored/puppet/lib/puppet/pops/loader/runtime3_type_loader.rb
1091
1067
  - vendored/puppet/lib/puppet/pops/loader/simple_environment_loader.rb
1092
1068
  - vendored/puppet/lib/puppet/pops/loader/static_loader.rb
@@ -1159,6 +1135,7 @@ files:
1159
1135
  - vendored/puppet/lib/puppet/pops/serialization/serializer.rb
1160
1136
  - vendored/puppet/lib/puppet/pops/serialization/time_factory.rb
1161
1137
  - vendored/puppet/lib/puppet/pops/serialization/to_data_converter.rb
1138
+ - vendored/puppet/lib/puppet/pops/serialization/to_stringified_converter.rb
1162
1139
  - vendored/puppet/lib/puppet/pops/time/timespan.rb
1163
1140
  - vendored/puppet/lib/puppet/pops/time/timestamp.rb
1164
1141
  - vendored/puppet/lib/puppet/pops/types/annotatable.rb
@@ -1212,10 +1189,9 @@ files:
1212
1189
  - vendored/puppet/lib/puppet/property/list.rb
1213
1190
  - vendored/puppet/lib/puppet/property/ordered_list.rb
1214
1191
  - vendored/puppet/lib/puppet/provider.rb
1215
- - vendored/puppet/lib/puppet/provider/aixobject.rb
1192
+ - vendored/puppet/lib/puppet/provider/aix_object.rb
1216
1193
  - vendored/puppet/lib/puppet/provider/command.rb
1217
1194
  - vendored/puppet/lib/puppet/provider/confine.rb
1218
- - vendored/puppet/lib/puppet/provider/cron/crontab.rb
1219
1195
  - vendored/puppet/lib/puppet/provider/exec.rb
1220
1196
  - vendored/puppet/lib/puppet/provider/exec/posix.rb
1221
1197
  - vendored/puppet/lib/puppet/provider/exec/shell.rb
@@ -1362,17 +1338,11 @@ files:
1362
1338
  - vendored/puppet/lib/puppet/ssl.rb
1363
1339
  - vendored/puppet/lib/puppet/ssl/base.rb
1364
1340
  - vendored/puppet/lib/puppet/ssl/certificate.rb
1365
- - vendored/puppet/lib/puppet/ssl/certificate_authority.rb
1366
- - vendored/puppet/lib/puppet/ssl/certificate_authority/autosign_command.rb
1367
- - vendored/puppet/lib/puppet/ssl/certificate_authority/interface.rb
1368
- - vendored/puppet/lib/puppet/ssl/certificate_factory.rb
1369
1341
  - vendored/puppet/lib/puppet/ssl/certificate_request.rb
1370
1342
  - vendored/puppet/lib/puppet/ssl/certificate_request_attributes.rb
1371
- - vendored/puppet/lib/puppet/ssl/certificate_revocation_list.rb
1372
1343
  - vendored/puppet/lib/puppet/ssl/certificate_signer.rb
1373
1344
  - vendored/puppet/lib/puppet/ssl/digest.rb
1374
1345
  - vendored/puppet/lib/puppet/ssl/host.rb
1375
- - vendored/puppet/lib/puppet/ssl/inventory.rb
1376
1346
  - vendored/puppet/lib/puppet/ssl/key.rb
1377
1347
  - vendored/puppet/lib/puppet/ssl/oids.rb
1378
1348
  - vendored/puppet/lib/puppet/ssl/validator.rb
@@ -1392,7 +1362,6 @@ files:
1392
1362
  - vendored/puppet/lib/puppet/transaction/resource_harness.rb
1393
1363
  - vendored/puppet/lib/puppet/type.rb
1394
1364
  - vendored/puppet/lib/puppet/type/component.rb
1395
- - vendored/puppet/lib/puppet/type/cron.rb
1396
1365
  - vendored/puppet/lib/puppet/type/exec.rb
1397
1366
  - vendored/puppet/lib/puppet/type/file.rb
1398
1367
  - vendored/puppet/lib/puppet/type/file/checksum.rb
@@ -1526,6 +1495,7 @@ files:
1526
1495
  - vendored/puppet/lib/puppet/util/windows/root_certs.rb
1527
1496
  - vendored/puppet/lib/puppet/util/windows/security.rb
1528
1497
  - vendored/puppet/lib/puppet/util/windows/security_descriptor.rb
1498
+ - vendored/puppet/lib/puppet/util/windows/service.rb
1529
1499
  - vendored/puppet/lib/puppet/util/windows/sid.rb
1530
1500
  - vendored/puppet/lib/puppet/util/windows/string.rb
1531
1501
  - vendored/puppet/lib/puppet/util/windows/user.rb