puppet 4.3.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. checksums.yaml +7 -0
  2. data/COMMITTERS.md +2 -2
  3. data/CONTRIBUTING.md +6 -6
  4. data/LICENSE +1 -1
  5. data/README.md +8 -9
  6. data/conf/auth.conf +2 -2
  7. data/ext/README.environment +1 -1
  8. data/ext/build_defaults.yaml +1 -1
  9. data/ext/debian/README.source +1 -1
  10. data/ext/debian/control +1 -1
  11. data/ext/debian/copyright +4 -4
  12. data/ext/debian/puppetmaster.README.debian +11 -9
  13. data/ext/emacs/puppet-mode.el +1 -1
  14. data/ext/envpuppet +2 -2
  15. data/ext/ips/puppetagent.xml +1 -1
  16. data/ext/ips/puppetmaster.xml +1 -1
  17. data/ext/project_data.yaml +8 -0
  18. data/ext/puppet-test +3 -3
  19. data/ext/rack/example-passenger-vhost.conf +1 -1
  20. data/ext/redhat/puppet.spec.erb +2 -2
  21. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  22. data/ext/solaris/pkginfo +1 -1
  23. data/ext/solaris/smf/puppet.xml +1 -1
  24. data/ext/suse/puppet.spec +2 -2
  25. data/ext/upload_facts.rb +1 -1
  26. data/ext/windows/puppet_interactive.bat +6 -0
  27. data/ext/windows/puppet_shell.bat +9 -0
  28. data/ext/windows/run_puppet_interactive.bat +9 -0
  29. data/ext/yaml_nodes.rb +1 -1
  30. data/install.rb +30 -20
  31. data/lib/hiera/scope.rb +1 -1
  32. data/lib/puppet/agent.rb +1 -1
  33. data/lib/puppet/application/agent.rb +4 -2
  34. data/lib/puppet/application/apply.rb +7 -4
  35. data/lib/puppet/application/cert.rb +1 -1
  36. data/lib/puppet/application/device.rb +1 -1
  37. data/lib/puppet/application/filebucket.rb +1 -1
  38. data/lib/puppet/application/inspect.rb +1 -1
  39. data/lib/puppet/application/lookup.rb +45 -47
  40. data/lib/puppet/application/master.rb +2 -2
  41. data/lib/puppet/application/resource.rb +1 -1
  42. data/lib/puppet/configurer.rb +100 -22
  43. data/lib/puppet/data_providers/hiera_config.rb +28 -3
  44. data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
  45. data/lib/puppet/data_providers/hiera_support.rb +1 -1
  46. data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
  47. data/lib/puppet/data_providers/lookup_adapter.rb +73 -26
  48. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
  49. data/lib/puppet/defaults.rb +69 -22
  50. data/lib/puppet/environments.rb +3 -1
  51. data/lib/puppet/face/config.rb +1 -1
  52. data/lib/puppet/face/epp.rb +1 -1
  53. data/lib/puppet/face/help/man.erb +1 -1
  54. data/lib/puppet/face/module/install.rb +6 -6
  55. data/lib/puppet/face/parser.rb +12 -9
  56. data/lib/puppet/face/status.rb +2 -1
  57. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  58. data/lib/puppet/feature/telnet.rb +9 -0
  59. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  60. data/lib/puppet/file_serving/metadata.rb +18 -2
  61. data/lib/puppet/file_serving/terminus_selector.rb +2 -0
  62. data/lib/puppet/file_system/file_impl.rb +2 -2
  63. data/lib/puppet/file_system/memory_impl.rb +1 -1
  64. data/lib/puppet/file_system/uniquefile.rb +1 -1
  65. data/lib/puppet/file_system.rb +2 -2
  66. data/lib/puppet/forge/repository.rb +1 -31
  67. data/lib/puppet/forge.rb +1 -1
  68. data/lib/puppet/functions/assert_type.rb +9 -9
  69. data/lib/puppet/functions/each.rb +5 -13
  70. data/lib/puppet/functions/filter.rb +5 -14
  71. data/lib/puppet/functions/lookup.rb +126 -150
  72. data/lib/puppet/functions/map.rb +6 -14
  73. data/lib/puppet/functions/match.rb +1 -0
  74. data/lib/puppet/functions/reduce.rb +5 -13
  75. data/lib/puppet/functions/reverse_each.rb +82 -0
  76. data/lib/puppet/functions/scanf.rb +15 -18
  77. data/lib/puppet/functions/slice.rb +22 -36
  78. data/lib/puppet/functions/split.rb +2 -2
  79. data/lib/puppet/functions/step.rb +88 -0
  80. data/lib/puppet/functions/type.rb +70 -0
  81. data/lib/puppet/functions.rb +45 -6
  82. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  83. data/lib/puppet/indirector/catalog/compiler.rb +188 -5
  84. data/lib/puppet/indirector/facts/facter.rb +2 -13
  85. data/lib/puppet/indirector/file_content/http.rb +15 -0
  86. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  87. data/lib/puppet/indirector/generic_http.rb +16 -0
  88. data/lib/puppet/indirector/hiera.rb +3 -1
  89. data/lib/puppet/indirector/indirection.rb +6 -2
  90. data/lib/puppet/indirector/json.rb +2 -2
  91. data/lib/puppet/indirector/node/exec.rb +1 -1
  92. data/lib/puppet/indirector/node/ldap.rb +1 -1
  93. data/lib/puppet/indirector/rest.rb +2 -1
  94. data/lib/puppet/info_service/class_information_service.rb +13 -12
  95. data/lib/puppet/loaders.rb +1 -0
  96. data/lib/puppet/module.rb +6 -2
  97. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
  98. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
  99. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
  100. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  101. data/lib/puppet/network/http/pool.rb +9 -0
  102. data/lib/puppet/node/environment.rb +11 -2
  103. data/lib/puppet/node.rb +11 -2
  104. data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
  105. data/lib/puppet/parser/compiler.rb +4 -11
  106. data/lib/puppet/parser/environment_compiler.rb +0 -1
  107. data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
  108. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  109. data/lib/puppet/parser/functions/lookup.rb +128 -149
  110. data/lib/puppet/parser/functions/map.rb +1 -1
  111. data/lib/puppet/parser/functions/match.rb +1 -0
  112. data/lib/puppet/parser/functions/scanf.rb +15 -26
  113. data/lib/puppet/parser/functions/slice.rb +17 -24
  114. data/lib/puppet/parser/functions/split.rb +1 -1
  115. data/lib/puppet/parser/functions.rb +28 -16
  116. data/lib/puppet/parser/resource.rb +19 -17
  117. data/lib/puppet/parser/scope.rb +176 -5
  118. data/lib/puppet/plugins/data_providers/data_provider.rb +56 -14
  119. data/lib/puppet/pops/adaptable.rb +4 -1
  120. data/lib/puppet/pops/adapters.rb +80 -12
  121. data/lib/puppet/pops/binder/binder.rb +21 -17
  122. data/lib/puppet/pops/binder/binder_issues.rb +8 -6
  123. data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
  124. data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
  125. data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
  126. data/lib/puppet/pops/binder/bindings_model.rb +49 -47
  127. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
  128. data/lib/puppet/pops/binder/injector.rb +53 -48
  129. data/lib/puppet/pops/binder/key_factory.rb +10 -6
  130. data/lib/puppet/pops/binder/producers.rb +67 -62
  131. data/lib/puppet/pops/evaluator/access_operator.rb +98 -96
  132. data/lib/puppet/pops/evaluator/closure.rb +122 -106
  133. data/lib/puppet/pops/evaluator/collector_transformer.rb +34 -14
  134. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
  135. data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
  136. data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
  137. data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
  138. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
  139. data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
  140. data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
  141. data/lib/puppet/pops/evaluator/runtime3_support.rb +47 -42
  142. data/lib/puppet/pops/functions/function.rb +6 -2
  143. data/lib/puppet/pops/issue_reporter.rb +6 -4
  144. data/lib/puppet/pops/issues.rb +50 -11
  145. data/lib/puppet/pops/loader/base_loader.rb +1 -1
  146. data/lib/puppet/pops/loader/loader.rb +1 -1
  147. data/lib/puppet/pops/loader/loader_paths.rb +15 -0
  148. data/lib/puppet/pops/loader/module_loaders.rb +17 -13
  149. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +18 -13
  150. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
  151. data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
  152. data/lib/puppet/pops/loaders.rb +51 -9
  153. data/lib/puppet/pops/lookup/explainer.rb +73 -3
  154. data/lib/puppet/pops/lookup/invocation.rb +21 -19
  155. data/lib/puppet/pops/lookup.rb +17 -12
  156. data/lib/puppet/pops/merge_strategy.rb +16 -19
  157. data/lib/puppet/pops/model/factory.rb +179 -157
  158. data/lib/puppet/pops/model/model.rb +17 -8
  159. data/lib/puppet/pops/model/model_label_provider.rb +14 -7
  160. data/lib/puppet/pops/model/model_meta.rb +17 -0
  161. data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
  162. data/lib/puppet/pops/parser/egrammar.ra +38 -14
  163. data/lib/puppet/pops/parser/eparser.rb +1353 -1276
  164. data/lib/puppet/pops/parser/epp_support.rb +11 -7
  165. data/lib/puppet/pops/parser/evaluating_parser.rb +17 -13
  166. data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
  167. data/lib/puppet/pops/parser/lexer2.rb +428 -403
  168. data/lib/puppet/pops/parser/lexer_support.rb +85 -7
  169. data/lib/puppet/pops/parser/locator.rb +21 -0
  170. data/lib/puppet/pops/parser/parser_support.rb +19 -16
  171. data/lib/puppet/pops/parser/slurp_support.rb +16 -8
  172. data/lib/puppet/pops/types/class_loader.rb +23 -19
  173. data/lib/puppet/pops/types/enumeration.rb +9 -26
  174. data/lib/puppet/pops/types/iterable.rb +308 -0
  175. data/lib/puppet/pops/types/recursion_guard.rb +82 -0
  176. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  177. data/lib/puppet/pops/types/type_asserter.rb +10 -9
  178. data/lib/puppet/pops/types/type_calculator.rb +140 -387
  179. data/lib/puppet/pops/types/type_factory.rb +91 -57
  180. data/lib/puppet/pops/types/type_formatter.rb +334 -0
  181. data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
  182. data/lib/puppet/pops/types/type_parser.rb +159 -112
  183. data/lib/puppet/pops/types/types.rb +2057 -1253
  184. data/lib/puppet/pops/utils.rb +11 -10
  185. data/lib/puppet/pops/validation/checker4_0.rb +115 -63
  186. data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
  187. data/lib/puppet/pops/validation.rb +11 -9
  188. data/lib/puppet/pops.rb +0 -8
  189. data/lib/puppet/provider/aixobject.rb +1 -1
  190. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  191. data/lib/puppet/provider/cron/crontab.rb +1 -1
  192. data/lib/puppet/provider/exec/windows.rb +1 -1
  193. data/lib/puppet/provider/group/windows_adsi.rb +2 -2
  194. data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
  195. data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
  196. data/lib/puppet/provider/package/appdmg.rb +3 -2
  197. data/lib/puppet/provider/package/dnf.rb +1 -1
  198. data/lib/puppet/provider/package/pip.rb +16 -9
  199. data/lib/puppet/provider/package/pip3.rb +1 -1
  200. data/lib/puppet/provider/package/pkg.rb +1 -1
  201. data/lib/puppet/provider/package/pkgdmg.rb +3 -2
  202. data/lib/puppet/provider/package/pkgng.rb +13 -4
  203. data/lib/puppet/provider/package/rpm.rb +0 -1
  204. data/lib/puppet/provider/package/windows.rb +1 -1
  205. data/lib/puppet/provider/package/yum.rb +2 -2
  206. data/lib/puppet/provider/package/zypper.rb +19 -0
  207. data/lib/puppet/provider/service/debian.rb +7 -20
  208. data/lib/puppet/provider/service/init.rb +7 -0
  209. data/lib/puppet/provider/service/launchd.rb +6 -12
  210. data/lib/puppet/provider/service/systemd.rb +9 -2
  211. data/lib/puppet/provider/sshkey/parsed.rb +1 -1
  212. data/lib/puppet/provider/user/aix.rb +1 -1
  213. data/lib/puppet/provider/user/directoryservice.rb +33 -58
  214. data/lib/puppet/provider/user/windows_adsi.rb +2 -2
  215. data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
  216. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  217. data/lib/puppet/provider/zpool/zpool.rb +1 -1
  218. data/lib/puppet/reference/configuration.rb +1 -1
  219. data/lib/puppet/reference/providers.rb +1 -1
  220. data/lib/puppet/resource/capability_finder.rb +20 -13
  221. data/lib/puppet/resource/catalog.rb +60 -3
  222. data/lib/puppet/resource/status.rb +11 -2
  223. data/lib/puppet/resource/type.rb +33 -42
  224. data/lib/puppet/resource.rb +15 -12
  225. data/lib/puppet/settings/config_file.rb +1 -1
  226. data/lib/puppet/settings/environment_conf.rb +13 -5
  227. data/lib/puppet/settings.rb +1 -1
  228. data/lib/puppet/ssl/certificate_factory.rb +3 -3
  229. data/lib/puppet/ssl/certificate_request.rb +4 -4
  230. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  231. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  232. data/lib/puppet/test/test_helper.rb +16 -4
  233. data/lib/puppet/transaction/additional_resource_generator.rb +23 -5
  234. data/lib/puppet/transaction/report.rb +31 -1
  235. data/lib/puppet/transaction/resource_harness.rb +0 -25
  236. data/lib/puppet/transaction.rb +15 -2
  237. data/lib/puppet/type/augeas.rb +1 -1
  238. data/lib/puppet/type/cron.rb +12 -12
  239. data/lib/puppet/type/file/checksum_value.rb +53 -0
  240. data/lib/puppet/type/file/content.rb +26 -111
  241. data/lib/puppet/type/file/data_sync.rb +84 -0
  242. data/lib/puppet/type/file/ensure.rb +17 -14
  243. data/lib/puppet/type/file/selcontext.rb +1 -1
  244. data/lib/puppet/type/file/source.rb +103 -18
  245. data/lib/puppet/type/file.rb +91 -39
  246. data/lib/puppet/type/filebucket.rb +1 -1
  247. data/lib/puppet/type/group.rb +6 -2
  248. data/lib/puppet/type/interface.rb +8 -3
  249. data/lib/puppet/type/macauthorization.rb +1 -1
  250. data/lib/puppet/type/package.rb +6 -0
  251. data/lib/puppet/type/schedule.rb +1 -1
  252. data/lib/puppet/type/stage.rb +1 -1
  253. data/lib/puppet/type/user.rb +19 -17
  254. data/lib/puppet/type/yumrepo.rb +20 -0
  255. data/lib/puppet/type.rb +11 -11
  256. data/lib/puppet/util/autoload.rb +16 -11
  257. data/lib/puppet/util/checksums.rb +74 -31
  258. data/lib/puppet/util/execution.rb +1 -1
  259. data/lib/puppet/util/http_proxy.rb +72 -0
  260. data/lib/puppet/util/log.rb +2 -0
  261. data/lib/puppet/util/logging.rb +43 -1
  262. data/lib/puppet/util/monkey_patches.rb +2 -2
  263. data/lib/puppet/util/multi_match.rb +51 -0
  264. data/lib/puppet/util/network_device/cisco/device.rb +10 -2
  265. data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
  266. data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
  267. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  268. data/lib/puppet/util/plist.rb +130 -0
  269. data/lib/puppet/util/resource_template.rb +1 -1
  270. data/lib/puppet/util/run_mode.rb +2 -2
  271. data/lib/puppet/util/skip_tags.rb +9 -0
  272. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  273. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  274. data/lib/puppet/util/windows/adsi.rb +65 -28
  275. data/lib/puppet/util/windows/api_types.rb +24 -18
  276. data/lib/puppet/util/windows/com.rb +3 -3
  277. data/lib/puppet/util/windows/error.rb +1 -1
  278. data/lib/puppet/util/windows/file.rb +8 -8
  279. data/lib/puppet/util/windows/principal.rb +190 -0
  280. data/lib/puppet/util/windows/process.rb +78 -11
  281. data/lib/puppet/util/windows/registry.rb +22 -16
  282. data/lib/puppet/util/windows/root_certs.rb +5 -5
  283. data/lib/puppet/util/windows/security.rb +33 -35
  284. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  285. data/lib/puppet/util/windows/sid.rb +84 -15
  286. data/lib/puppet/util/windows/taskscheduler.rb +15 -15
  287. data/lib/puppet/util/windows/user.rb +10 -10
  288. data/lib/puppet/util/windows.rb +4 -0
  289. data/lib/puppet/util.rb +109 -22
  290. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  291. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  292. data/lib/puppet/vendor/pathspec/README.md +1 -1
  293. data/lib/puppet/vendor/rgen/README.rdoc +1 -1
  294. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
  295. data/lib/puppet/version.rb +1 -1
  296. data/lib/puppet.rb +17 -0
  297. data/lib/semver.rb +17 -1
  298. data/man/man5/puppet.conf.5 +12 -12
  299. data/man/man8/extlookup2hiera.8 +1 -1
  300. data/man/man8/puppet-agent.8 +2 -2
  301. data/man/man8/puppet-apply.8 +2 -2
  302. data/man/man8/puppet-ca.8 +2 -2
  303. data/man/man8/puppet-catalog.8 +2 -2
  304. data/man/man8/puppet-cert.8 +2 -2
  305. data/man/man8/puppet-certificate.8 +2 -2
  306. data/man/man8/puppet-certificate_request.8 +2 -2
  307. data/man/man8/puppet-certificate_revocation_list.8 +2 -2
  308. data/man/man8/puppet-config.8 +3 -3
  309. data/man/man8/puppet-describe.8 +1 -1
  310. data/man/man8/puppet-device.8 +1 -1
  311. data/man/man8/puppet-doc.8 +1 -1
  312. data/man/man8/puppet-epp.8 +2 -2
  313. data/man/man8/puppet-facts.8 +2 -2
  314. data/man/man8/puppet-file.8 +2 -2
  315. data/man/man8/puppet-filebucket.8 +2 -2
  316. data/man/man8/puppet-help.8 +2 -2
  317. data/man/man8/puppet-inspect.8 +2 -2
  318. data/man/man8/puppet-key.8 +2 -2
  319. data/man/man8/puppet-man.8 +2 -2
  320. data/man/man8/puppet-master.8 +2 -2
  321. data/man/man8/puppet-module.8 +9 -9
  322. data/man/man8/puppet-node.8 +2 -2
  323. data/man/man8/puppet-parser.8 +2 -2
  324. data/man/man8/puppet-plugin.8 +2 -2
  325. data/man/man8/puppet-report.8 +2 -2
  326. data/man/man8/puppet-resource.8 +2 -2
  327. data/man/man8/puppet-resource_type.8 +2 -2
  328. data/man/man8/puppet-status.8 +3 -3
  329. data/man/man8/puppet.8 +1 -1
  330. data/spec/fixtures/module.tar.gz +0 -0
  331. data/spec/fixtures/unit/application/environments/production/data/common.yaml +4 -0
  332. data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
  333. data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
  334. data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/data.pp +10 -0
  335. data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
  336. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
  337. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
  338. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
  339. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
  340. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
  341. data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
  342. data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
  343. data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
  344. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
  345. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
  346. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
  347. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
  348. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
  349. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
  350. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
  351. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
  352. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  353. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
  354. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
  355. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
  356. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
  357. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
  358. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
  359. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  360. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  361. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
  362. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
  363. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  364. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
  365. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
  366. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
  367. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  368. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
  369. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
  370. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
  371. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
  372. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
  373. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
  374. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
  375. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
  376. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +81 -0
  377. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
  378. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  379. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  380. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  381. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  382. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
  383. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
  384. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  385. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
  386. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  387. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
  388. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
  389. data/spec/integration/defaults_spec.rb +14 -2
  390. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  391. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  392. data/spec/integration/node/environment_spec.rb +13 -0
  393. data/spec/integration/parser/collection_spec.rb +8 -0
  394. data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
  395. data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
  396. data/spec/integration/parser/undef_param_spec.rb +8 -0
  397. data/spec/integration/provider/yumrepo_spec.rb +1 -1
  398. data/spec/integration/test/test_helper_spec.rb +28 -0
  399. data/spec/integration/transaction/report_spec.rb +16 -0
  400. data/spec/integration/transaction_spec.rb +11 -0
  401. data/spec/integration/type/file_spec.rb +194 -4
  402. data/spec/integration/type/package_spec.rb +5 -1
  403. data/spec/integration/type/tidy_spec.rb +21 -9
  404. data/spec/integration/util/execution_spec.rb +22 -0
  405. data/spec/integration/util/windows/principal_spec.rb +201 -0
  406. data/spec/integration/util/windows/process_spec.rb +31 -0
  407. data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
  408. data/spec/integration/util/windows/security_spec.rb +8 -8
  409. data/spec/integration/util/windows/user_spec.rb +1 -1
  410. data/spec/integration/util_spec.rb +49 -27
  411. data/spec/lib/puppet_spec/compiler.rb +17 -0
  412. data/spec/lib/puppet_spec/files.rb +2 -2
  413. data/spec/lib/puppet_spec/pops.rb +13 -0
  414. data/spec/shared_behaviours/iterative_functions.rb +1 -1
  415. data/spec/shared_contexts/types_setup.rb +96 -0
  416. data/spec/unit/agent_spec.rb +1 -0
  417. data/spec/unit/application/agent_spec.rb +10 -0
  418. data/spec/unit/application/apply_spec.rb +9 -0
  419. data/spec/unit/application/lookup_spec.rb +138 -28
  420. data/spec/unit/configurer/downloader_spec.rb +5 -5
  421. data/spec/unit/configurer_spec.rb +271 -39
  422. data/spec/unit/data_providers/hiera_data_provider_spec.rb +182 -5
  423. data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
  424. data/spec/unit/defaults_spec.rb +15 -0
  425. data/spec/unit/environments_spec.rb +24 -4
  426. data/spec/unit/face/epp_face_spec.rb +2 -2
  427. data/spec/unit/face/parser_spec.rb +43 -2
  428. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  429. data/spec/unit/file_serving/metadata_spec.rb +50 -0
  430. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  431. data/spec/unit/file_system_spec.rb +26 -0
  432. data/spec/unit/functions/assert_type_spec.rb +36 -2
  433. data/spec/unit/functions/defined_spec.rb +2 -2
  434. data/spec/unit/functions/epp_spec.rb +17 -9
  435. data/spec/unit/functions/inline_epp_spec.rb +4 -4
  436. data/spec/unit/functions/lookup_spec.rb +88 -16
  437. data/spec/unit/functions/regsubst_spec.rb +1 -1
  438. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  439. data/spec/unit/functions/step_spec.rb +113 -0
  440. data/spec/unit/functions/type_spec.rb +35 -0
  441. data/spec/unit/functions4_spec.rb +62 -6
  442. data/spec/unit/hiera/scope_spec.rb +5 -2
  443. data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
  444. data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
  445. data/spec/unit/indirector/indirection_spec.rb +1 -1
  446. data/spec/unit/indirector/json_spec.rb +1 -1
  447. data/spec/unit/info_service_spec.rb +94 -32
  448. data/spec/unit/module_spec.rb +14 -0
  449. data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
  450. data/spec/unit/network/authstore_spec.rb +1 -1
  451. data/spec/unit/network/http/connection_spec.rb +1 -0
  452. data/spec/unit/network/http/pool_spec.rb +30 -0
  453. data/spec/unit/node_spec.rb +8 -0
  454. data/spec/unit/parser/compiler_spec.rb +16 -18
  455. data/spec/unit/parser/scope_spec.rb +28 -11
  456. data/spec/unit/pops/evaluator/access_ops_spec.rb +7 -7
  457. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
  458. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -2
  459. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
  460. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  461. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
  462. data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
  463. data/spec/unit/pops/loaders/loaders_spec.rb +127 -2
  464. data/spec/unit/pops/parser/lexer2_spec.rb +118 -3
  465. data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
  466. data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
  467. data/spec/unit/pops/parser/parser_spec.rb +10 -0
  468. data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
  469. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  470. data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
  471. data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
  472. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  473. data/spec/unit/pops/types/type_calculator_spec.rb +275 -390
  474. data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
  475. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
  476. data/spec/unit/pops/types/type_parser_spec.rb +58 -13
  477. data/spec/unit/pops/types/types_spec.rb +241 -0
  478. data/spec/unit/pops/validator/validator_spec.rb +159 -15
  479. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  480. data/spec/unit/provider/group/windows_adsi_spec.rb +8 -8
  481. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  482. data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
  483. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  484. data/spec/unit/provider/package/dnf_spec.rb +16 -0
  485. data/spec/unit/provider/package/pip3_spec.rb +60 -42
  486. data/spec/unit/provider/package/pip_spec.rb +88 -47
  487. data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
  488. data/spec/unit/provider/package/pkgng_spec.rb +4 -2
  489. data/spec/unit/provider/package/rpm_spec.rb +2 -25
  490. data/spec/unit/provider/package/yum_spec.rb +12 -1
  491. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  492. data/spec/unit/provider/service/debian_spec.rb +6 -24
  493. data/spec/unit/provider/service/init_spec.rb +11 -1
  494. data/spec/unit/provider/service/launchd_spec.rb +18 -25
  495. data/spec/unit/provider/service/systemd_spec.rb +25 -12
  496. data/spec/unit/provider/service/upstart_spec.rb +57 -0
  497. data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
  498. data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
  499. data/spec/unit/provider/user/windows_adsi_spec.rb +5 -5
  500. data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
  501. data/spec/unit/resource/capability_finder_spec.rb +28 -15
  502. data/spec/unit/resource/catalog_spec.rb +33 -1
  503. data/spec/unit/resource/type_spec.rb +149 -7
  504. data/spec/unit/resource_spec.rb +99 -50
  505. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  506. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  507. data/spec/unit/transaction/report_spec.rb +27 -0
  508. data/spec/unit/transaction/resource_harness_spec.rb +0 -47
  509. data/spec/unit/transaction_spec.rb +5 -0
  510. data/spec/unit/type/file/checksum_spec.rb +6 -0
  511. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  512. data/spec/unit/type/file/content_spec.rb +12 -193
  513. data/spec/unit/type/file/source_spec.rb +211 -119
  514. data/spec/unit/type/file_spec.rb +133 -34
  515. data/spec/unit/type/interface_spec.rb +32 -0
  516. data/spec/unit/type/macauthorization_spec.rb +4 -1
  517. data/spec/unit/type/yumrepo_spec.rb +2 -2
  518. data/spec/unit/util/filetype_spec.rb +1 -1
  519. data/spec/unit/util/http_proxy_spec.rb +2 -2
  520. data/spec/unit/util/log/destinations_spec.rb +0 -2
  521. data/spec/unit/util/logging_spec.rb +69 -0
  522. data/spec/unit/util/multi_match_spec.rb +39 -0
  523. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  524. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  525. data/spec/unit/util/plist_spec.rb +110 -0
  526. data/spec/unit/util/resource_template_spec.rb +2 -2
  527. data/spec/unit/util/run_mode_spec.rb +27 -3
  528. data/spec/unit/util/windows/adsi_spec.rb +46 -38
  529. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  530. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  531. data/spec/unit/util/windows/sid_spec.rb +48 -11
  532. data/spec/unit/util_spec.rb +123 -13
  533. data/tasks/cfpropertylist.rake +15 -0
  534. metadata +3342 -3195
  535. data/lib/puppet/vendor/load_plist.rb +0 -1
  536. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  537. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  538. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  539. data/lib/puppet/vendor/plist/README +0 -36
  540. data/lib/puppet/vendor/plist/Rakefile +0 -144
  541. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  542. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  543. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  544. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  545. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  546. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  547. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  548. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  549. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  550. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  551. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  552. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  553. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  554. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  555. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  556. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  557. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  558. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
  559. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
  560. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
@@ -8,7 +8,7 @@ Puppet::Type.type(:sshkey).provide(
8
8
  desc "Parse and generate host-wide known hosts files for SSH."
9
9
 
10
10
  text_line :comment, :match => /^#/
11
- text_line :blank, :match => /^\s+/
11
+ text_line :blank, :match => /^\s*$/
12
12
 
13
13
  record_line :parsed, :fields => %w{name type key},
14
14
  :post_parse => proc { |hash|
@@ -7,7 +7,7 @@
7
7
  # but puppet does not allow it. There is a ticket open for that (#5431)
8
8
  # - AIX maximum password age is in WEEKs, not days
9
9
  #
10
- # See http://docs.puppetlabs.com/guides/provider_development.html
10
+ # See https://docs.puppetlabs.com/guides/provider_development.html
11
11
  # for more information
12
12
  #
13
13
  # Author:: Hector Rivas Gandara <keymon@gmail.com>
@@ -1,5 +1,5 @@
1
1
  require 'puppet'
2
- require 'plist'
2
+ require 'puppet/util/plist' if Puppet.features.cfpropertylist?
3
3
  require 'base64'
4
4
 
5
5
  Puppet::Type.type(:user).provide :directoryservice do
@@ -13,11 +13,11 @@ Puppet::Type.type(:user).provide :directoryservice do
13
13
  commands :uuidgen => '/usr/bin/uuidgen'
14
14
  commands :dsimport => '/usr/bin/dsimport'
15
15
  commands :dscl => '/usr/bin/dscl'
16
- commands :plutil => '/usr/bin/plutil'
17
16
  commands :dscacheutil => '/usr/bin/dscacheutil'
18
17
 
19
18
  # Provider confines and defaults
20
19
  confine :operatingsystem => :darwin
20
+ confine :feature => :cfpropertylist
21
21
  defaultfor :operatingsystem => :darwin
22
22
 
23
23
  # Need this to create getter/setter methods automagically
@@ -91,7 +91,7 @@ Puppet::Type.type(:user).provide :directoryservice do
91
91
  # Return an array of hashes containing information about every user on
92
92
  # the system.
93
93
  def self.get_all_users
94
- Plist.parse_xml(dscl '-plist', '.', 'readall', '/Users')
94
+ Puppet::Util::Plist.parse_plist(dscl '-plist', '.', 'readall', '/Users')
95
95
  end
96
96
 
97
97
  # This method accepts an individual user plist, passed as a hash, and
@@ -164,14 +164,14 @@ Puppet::Type.type(:user).provide :directoryservice do
164
164
  # Use dscl to retrieve an array of hashes containing attributes about all
165
165
  # of the local groups on the machine.
166
166
  def self.get_list_of_groups
167
- @groups ||= Plist.parse_xml(dscl '-plist', '.', 'readall', '/Groups')
167
+ @groups ||= Puppet::Util::Plist.parse_plist(dscl '-plist', '.', 'readall', '/Groups')
168
168
  end
169
169
 
170
170
  # Perform a dscl lookup at the path specified for the specific keyname
171
171
  # value. The value returned is the first item within the array returned
172
172
  # from dscl
173
173
  def self.get_attribute_from_dscl(path, username, keyname)
174
- Plist.parse_xml(dscl '-plist', '.', 'read', "/#{path}/#{username}", keyname)
174
+ Puppet::Util::Plist.parse_plist(dscl '-plist', '.', 'read', "/#{path}/#{username}", keyname)
175
175
  end
176
176
 
177
177
  # The plist embedded in the ShadowHashData key is a binary plist. The
@@ -179,40 +179,25 @@ Puppet::Type.type(:user).provide :directoryservice do
179
179
  # extract the binary plist, convert it to XML, and return it.
180
180
  def self.get_embedded_binary_plist(shadow_hash_data)
181
181
  embedded_binary_plist = Array(shadow_hash_data['dsAttrTypeNative:ShadowHashData'][0].delete(' ')).pack('H*')
182
- convert_binary_to_xml(embedded_binary_plist)
183
- end
184
-
185
- # This method will accept a hash that has been returned from Plist::parse_xml
186
- # and convert it to a binary plist (string value).
187
- def self.convert_xml_to_binary(plist_data)
188
- Puppet.debug('Converting XML plist to binary')
189
- Puppet.debug('Executing: \'plutil -convert binary1 -o - -\'')
190
- IO.popen('plutil -convert binary1 -o - -', 'r+') do |io|
191
- io.write Plist::Emit.dump(plist_data)
192
- io.close_write
193
- @converted_plist = io.read
194
- end
195
- @converted_plist
196
- end
197
-
198
- # This method will accept a binary plist (as a string) and convert it to a
199
- # hash via Plist::parse_xml.
200
- def self.convert_binary_to_xml(plist_data)
201
- Puppet.debug('Converting binary plist to XML')
202
- Puppet.debug('Executing: \'plutil -convert xml1 -o - -\'')
203
- IO.popen('plutil -convert xml1 -o - -', 'r+') do |io|
204
- io.write plist_data
205
- io.close_write
206
- @converted_plist = io.read
207
- end
208
- Puppet.debug('Converting XML values to a hash.')
209
- Plist::parse_xml(@converted_plist)
182
+ convert_binary_to_hash(embedded_binary_plist)
183
+ end
184
+
185
+ # This method will accept a hash and convert it to a binary plist (string value).
186
+ def self.convert_hash_to_binary(plist_data)
187
+ Puppet.debug('Converting plist hash to binary')
188
+ Puppet::Util::Plist.dump_plist(plist_data, :binary)
189
+ end
190
+
191
+ # This method will accept a binary plist (as a string) and convert it to a hash.
192
+ def self.convert_binary_to_hash(plist_data)
193
+ Puppet.debug('Converting binary plist to hash')
194
+ Puppet::Util::Plist.parse_plist(plist_data)
210
195
  end
211
196
 
212
197
  # The salted-SHA512 password hash in 10.7 is stored in the 'SALTED-SHA512'
213
198
  # key as binary data. That data is extracted and converted to a hex string.
214
199
  def self.get_salted_sha512(embedded_binary_plist)
215
- embedded_binary_plist['SALTED-SHA512'].string.unpack("H*")[0]
200
+ embedded_binary_plist['SALTED-SHA512'].unpack("H*")[0]
216
201
  end
217
202
 
218
203
  # This method reads the passed embedded_binary_plist hash and returns values
@@ -222,7 +207,7 @@ Puppet::Type.type(:user).provide :directoryservice do
222
207
  def self.get_salted_sha512_pbkdf2(field, embedded_binary_plist)
223
208
  case field
224
209
  when 'salt', 'entropy'
225
- embedded_binary_plist['SALTED-SHA512-PBKDF2'][field].string.unpack('H*').first
210
+ embedded_binary_plist['SALTED-SHA512-PBKDF2'][field].unpack('H*').first
226
211
  when 'iterations'
227
212
  Integer(embedded_binary_plist['SALTED-SHA512-PBKDF2'][field])
228
213
  else
@@ -549,15 +534,16 @@ Puppet::Type.type(:user).provide :directoryservice do
549
534
  def get_users_plist(username)
550
535
  # This method will retrieve the data stored in a user's plist and
551
536
  # return it as a native Ruby hash.
552
- Plist::parse_xml(plutil('-convert', 'xml1', '-o', '/dev/stdout', "#{users_plist_dir}/#{username}.plist"))
537
+ path = "#{users_plist_dir}/#{username}.plist"
538
+ Puppet::Util::Plist.read_plist_file(path)
553
539
  end
554
540
 
555
541
  # This method will return the binary plist that's embedded in the
556
542
  # ShadowHashData key of a user's plist, or false if it doesn't exist.
557
543
  def get_shadow_hash_data(users_plist)
558
544
  if users_plist['ShadowHashData']
559
- password_hash_plist = users_plist['ShadowHashData'][0].string
560
- self.class.convert_binary_to_xml(password_hash_plist)
545
+ password_hash_plist = users_plist['ShadowHashData'][0]
546
+ self.class.convert_binary_to_hash(password_hash_plist)
561
547
  else
562
548
  false
563
549
  end
@@ -568,22 +554,13 @@ Puppet::Type.type(:user).provide :directoryservice do
568
554
  # into the ShadowHashData key of the user's plist.
569
555
  def set_shadow_hash_data(users_plist, binary_plist)
570
556
  if users_plist.has_key?('ShadowHashData')
571
- users_plist['ShadowHashData'][0].string = binary_plist
557
+ users_plist['ShadowHashData'][0] = binary_plist
572
558
  else
573
- users_plist['ShadowHashData'] = [new_stringio_object(binary_plist)]
559
+ users_plist['ShadowHashData'] = [binary_plist]
574
560
  end
575
561
  write_users_plist_to_disk(users_plist)
576
562
  end
577
563
 
578
- # This method returns a new StringIO object. Why does it exist?
579
- # Well, StringIO objects have their own 'serial number', so when
580
- # writing rspec tests it's difficult to compare StringIO objects
581
- # due to this serial number. If this action is wrapped in its own
582
- # method, it can be mocked for easier testing.
583
- def new_stringio_object(value = '')
584
- StringIO.new(value)
585
- end
586
-
587
564
  # This method accepts an argument of a hex password hash, and base64
588
565
  # decodes it into a format that OS X 10.7 and 10.8 will store
589
566
  # in the user's plist.
@@ -598,17 +575,17 @@ Puppet::Type.type(:user).provide :directoryservice do
598
575
  def set_salted_sha512(users_plist, shadow_hash_data, value)
599
576
  unless shadow_hash_data
600
577
  shadow_hash_data = Hash.new
601
- shadow_hash_data['SALTED-SHA512'] = new_stringio_object
578
+ shadow_hash_data['SALTED-SHA512'] = ''
602
579
  end
603
- shadow_hash_data['SALTED-SHA512'].string = base64_decode_string(value)
604
- binary_plist = self.class.convert_xml_to_binary(shadow_hash_data)
580
+ shadow_hash_data['SALTED-SHA512'] = base64_decode_string(value)
581
+ binary_plist = self.class.convert_hash_to_binary(shadow_hash_data)
605
582
  set_shadow_hash_data(users_plist, binary_plist)
606
583
  end
607
584
 
608
585
  # This method accepts a passed value and one of three fields: 'salt',
609
586
  # 'entropy', or 'iterations'. These fields correspond with the fields
610
587
  # utilized in a PBKDF2 password hashing system
611
- # (see http://en.wikipedia.org/wiki/PBKDF2 ) where 'entropy' is the
588
+ # (see https://en.wikipedia.org/wiki/PBKDF2 ) where 'entropy' is the
612
589
  # password hash, 'salt' is the password hash salt value, and 'iterations'
613
590
  # is an integer recommended to be > 10,000. The remaining arguments are
614
591
  # the user's plist itself, and the shadow_hash_data hash containing the
@@ -618,8 +595,7 @@ Puppet::Type.type(:user).provide :directoryservice do
618
595
  shadow_hash_data['SALTED-SHA512-PBKDF2'] = Hash.new unless shadow_hash_data['SALTED-SHA512-PBKDF2']
619
596
  case field
620
597
  when 'salt', 'entropy'
621
- shadow_hash_data['SALTED-SHA512-PBKDF2'][field] = new_stringio_object unless shadow_hash_data['SALTED-SHA512-PBKDF2'][field]
622
- shadow_hash_data['SALTED-SHA512-PBKDF2'][field].string = base64_decode_string(value)
598
+ shadow_hash_data['SALTED-SHA512-PBKDF2'][field] = base64_decode_string(value)
623
599
  when 'iterations'
624
600
  shadow_hash_data['SALTED-SHA512-PBKDF2'][field] = Integer(value)
625
601
  else
@@ -633,15 +609,14 @@ Puppet::Type.type(:user).provide :directoryservice do
633
609
  # Convert shadow_hash_data to a binary plist, and call the
634
610
  # set_shadow_hash_data method to serialize and write the data
635
611
  # back to the user's plist.
636
- binary_plist = self.class.convert_xml_to_binary(shadow_hash_data)
612
+ binary_plist = self.class.convert_hash_to_binary(shadow_hash_data)
637
613
  set_shadow_hash_data(users_plist, binary_plist)
638
614
  end
639
615
 
640
616
  # This method will accept a plist in XML format, save it to disk, convert
641
617
  # the plist to a binary format, and flush the dscl cache.
642
618
  def write_users_plist_to_disk(users_plist)
643
- Plist::Emit.save_plist(users_plist, "#{users_plist_dir}/#{@resource.name}.plist")
644
- plutil'-convert', 'binary1', "#{users_plist_dir}/#{@resource.name}.plist"
619
+ Puppet::Util::Plist.write_plist_file(users_plist, "#{users_plist_dir}/#{@resource.name}.plist", :binary)
645
620
  end
646
621
 
647
622
  # This is a simple wrapper method for writing values to a file.
@@ -40,7 +40,7 @@ Puppet::Type.type(:user).provide :windows_adsi do
40
40
  specified_users = Puppet::Util::Windows::ADSI::Group.name_sid_hash(should)
41
41
 
42
42
  if @resource[:membership] == :inclusive
43
- current_users == specified_users
43
+ current_users.keys.to_a == specified_users.keys.to_a
44
44
  else
45
45
  (specified_users.keys.to_a & current_users.keys.to_a) == specified_users.keys.to_a
46
46
  end
@@ -55,7 +55,7 @@ Puppet::Type.type(:user).provide :windows_adsi do
55
55
  else
56
56
  account = sid.account
57
57
  end
58
- resource.debug("#{sid.domain}\\#{account} (#{sid.to_s})")
58
+ resource.debug("#{sid.domain}\\#{account} (#{sid.sid})")
59
59
  "#{sid.domain}\\#{account}"
60
60
  end
61
61
  return groups.join(',')
@@ -74,9 +74,12 @@ Puppet::Type.type(:yumrepo).provide(:inifile) do
74
74
  def self.reposdir(conf='/etc/yum.conf', dirs=['/etc/yum.repos.d', '/etc/yum/repos.d'])
75
75
  reposdir = find_conf_value('reposdir', conf)
76
76
  # Use directories in reposdir if they are set instead of default
77
- dirs = reposdir.split(",").map(&:strip) if reposdir
78
-
79
-
77
+ if reposdir
78
+ # Follow the code from the yum/config.py
79
+ dirs = reposdir.gsub!("\n", ' ')
80
+ dirs = reposdir.gsub!(',', ' ')
81
+ dirs = reposdir.split
82
+ end
80
83
  dirs.select! { |dir| Puppet::FileSystem.exist?(dir) }
81
84
  if dirs.empty?
82
85
  Puppet.debug('No yum directories were found on the local filesystem')
@@ -40,7 +40,7 @@ Puppet::Type.type(:zfs).provide(:zfs) do
40
40
 
41
41
  PARAMETER_UNSET_OR_NOT_AVAILABLE = '-'
42
42
 
43
- # http://docs.oracle.com/cd/E19963-01/html/821-1448/gbscy.html
43
+ # https://docs.oracle.com/cd/E19963-01/html/821-1448/gbscy.html
44
44
  # shareiscsi (added in build 120) was removed from S11 build 136
45
45
  # aclmode was removed from S11 in build 139 but it may have been added back
46
46
  # http://webcache.googleusercontent.com/search?q=cache:-p74K0DVsdwJ:developers.slashdot.org/story/11/11/09/2343258/solaris-11-released+&cd=13
@@ -48,7 +48,7 @@ Puppet::Type.type(:zpool).provide(:zpool) do
48
48
  end
49
49
 
50
50
  def get_pool_data
51
- # http://docs.oracle.com/cd/E19082-01/817-2271/gbcve/index.html
51
+ # https://docs.oracle.com/cd/E19082-01/817-2271/gbcve/index.html
52
52
  # we could also use zpool iostat -v mypool for a (little bit) cleaner output
53
53
  out = execute("zpool status #{@resource[:pool]}", :failonfail => false, :combine => false)
54
54
  zpool_data = out.lines.select { |line| line.index("\t") == 0 }.collect { |l| l.strip.split("\s")[0] }
@@ -73,7 +73,7 @@ config.header = <<EOT
73
73
 
74
74
  See the [configuration guide][confguide] for more details.
75
75
 
76
- [confguide]: http://docs.puppetlabs.com/guides/configuring.html
76
+ [confguide]: http://docs.puppetlabs.com/puppet/latest/reference/config_about_settings.html
77
77
 
78
78
  * * *
79
79
 
@@ -91,7 +91,7 @@ providers = Puppet::Util::Reference.newreference :providers, :title => "Provider
91
91
 
92
92
  ret << markdown_header(type.name.to_s + "_", 2)
93
93
 
94
- ret << "[#{type.name}](http://docs.puppetlabs.com/references/stable/type.html##{type.name})\n\n"
94
+ ret << "[#{type.name}](https://docs.puppetlabs.com/references/stable/type.html##{type.name})\n\n"
95
95
  ret << option("Default provider", default)
96
96
  ret << doctable(headers, table_data)
97
97
 
@@ -35,15 +35,10 @@ module Puppet::Resource::CapabilityFinder
35
35
  ['select_catalogs',
36
36
  ['=', 'code_id', code_id]]]]
37
37
  end
38
- query = query_terms.to_json
39
38
 
40
- Puppet.notice "Capability lookup #{cap}]: #{query}"
39
+ Puppet.notice "Capability lookup #{cap}]: #{query_terms}"
41
40
 
42
- http = Puppet::Util.const_get('Puppetdb').const_get('Http')
43
- response = http.action("/pdb/query/v4/resources?query=#{CGI.escape(query)}") do |conn, uri|
44
- conn.get(uri, { 'Accept' => 'application/json'})
45
- end
46
- json = response.body
41
+ data = query_puppetdb(query_terms)
47
42
 
48
43
  # The format of the response body is documented at
49
44
  # http://docs.puppetlabs.com/puppetdb/3.0/api/query/v4/resources.html#response-format
@@ -53,12 +48,6 @@ module Puppet::Resource::CapabilityFinder
53
48
  # ::Resource. If the array contains more than one entry, we have a
54
49
  # bug in the overall system, as we allowed multiple capabilities with
55
50
  # the same type and title to be produced in this environment.
56
- begin
57
- data = JSON.parse(json)
58
- rescue JSON::JSONError => e
59
- raise Puppet::DevError,
60
- "Invalid JSON from PuppetDB when looking up #{cap}\n#{e}\nRaw JSON was:\n#{json}"
61
- end
62
51
  unless data.is_a?(Array)
63
52
  raise Puppet::DevError,
64
53
  "Unexpected response from PuppetDB when looking up #{cap}: " +
@@ -92,4 +81,22 @@ module Puppet::Resource::CapabilityFinder
92
81
  return resource
93
82
  end
94
83
  end
84
+
85
+ def self.query_puppetdb(query)
86
+ # If using PuppetDB >= 4, use the API method query_puppetdb()
87
+ if Puppet::Util::Puppetdb.respond_to?(:query_puppetdb)
88
+ # PuppetDB 4 uses a unified query endpoint, so we have to specify what we're querying
89
+ Puppet::Util::Puppetdb.query_puppetdb(["from", "resources", query])
90
+ # For PuppetDB < 4, use the old internal method action()
91
+ else
92
+ url = "/pdb/query/v4/resource?query=#{CGI.escape(query.to_json)}"
93
+ response = Puppet::Util::Puppetdb::Http.action(url) do |conn, uri|
94
+ conn.get(uri, { 'Accept' => 'application/json'})
95
+ end
96
+ JSON.parse(response.body)
97
+ end
98
+ rescue JSON::JSONError => e
99
+ raise Puppet::DevError,
100
+ "Invalid JSON from PuppetDB when looking up #{cap}\n#{e}"
101
+ end
95
102
  end
@@ -3,6 +3,7 @@ require 'puppet/indirector'
3
3
  require 'puppet/transaction'
4
4
  require 'puppet/util/tagging'
5
5
  require 'puppet/graph'
6
+ require 'securerandom'
6
7
 
7
8
  require 'puppet/resource/capability_finder'
8
9
 
@@ -32,6 +33,22 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
32
33
  # The id of the code input to the compiler.
33
34
  attr_accessor :code_id
34
35
 
36
+ # The UUID of the catalog
37
+ attr_accessor :catalog_uuid
38
+
39
+ # @return [Integer] catalog format version number. This value is constant
40
+ # for a given version of Puppet; it is incremented when a new release of
41
+ # Puppet changes the API for the various objects that make up the catalog.
42
+ attr_accessor :catalog_format
43
+
44
+ # Inlined file metadata for non-recursive find
45
+ # A hash of title => metadata
46
+ attr_accessor :metadata
47
+
48
+ # Inlined file metadata for recursive search
49
+ # A hash of title => { source => [metadata, ...] }
50
+ attr_accessor :recursive_metadata
51
+
35
52
  # How long this catalog took to retrieve. Used for reporting stats.
36
53
  attr_accessor :retrieval_duration
37
54
 
@@ -272,6 +289,10 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
272
289
  def initialize(name = nil, environment = Puppet::Node::Environment::NONE, code_id = nil)
273
290
  super()
274
291
  @name = name
292
+ @catalog_uuid = SecureRandom.uuid
293
+ @catalog_format = 1
294
+ @metadata = {}
295
+ @recursive_metadata = {}
275
296
  @classes = []
276
297
  @resource_table = {}
277
298
  @resources = []
@@ -379,6 +400,12 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
379
400
  result.code_id = code_id
380
401
  end
381
402
 
403
+ if catalog_uuid = data['catalog_uuid']
404
+ result.catalog_uuid = catalog_uuid
405
+ end
406
+
407
+ result.catalog_format = data['catalog_format'] || 0
408
+
382
409
  if environment = data['environment']
383
410
  result.environment = environment
384
411
  result.environment_instance = Puppet::Node::Environment.remote(environment.to_sym)
@@ -411,20 +438,46 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
411
438
  result.add_class(*classes)
412
439
  end
413
440
 
441
+ if metadata = data['metadata']
442
+ result.metadata = metadata.inject({}) { |h, (k, v)| h[k] = Puppet::FileServing::Metadata.from_data_hash(v); h }
443
+ end
444
+
445
+ if recursive_metadata = data['recursive_metadata']
446
+ result.recursive_metadata = recursive_metadata.inject({}) do |h, (title, source_to_meta_hash)|
447
+ h[title] = source_to_meta_hash.inject({}) do |inner_h, (source, metas)|
448
+ inner_h[source] = metas.map {|meta| Puppet::FileServing::Metadata.from_data_hash(meta)}
449
+ inner_h
450
+ end
451
+ h
452
+ end
453
+ end
454
+
414
455
  result
415
456
  end
416
457
 
417
458
  def to_data_hash
459
+ metadata_hash = metadata.inject({}) { |h, (k, v)| h[k] = v.to_data_hash; h }
460
+ recursive_metadata_hash = recursive_metadata.inject({}) do |h, (title, source_to_meta_hash)|
461
+ h[title] = source_to_meta_hash.inject({}) do |inner_h, (source, metas)|
462
+ inner_h[source] = metas.map {|meta| meta.to_data_hash}
463
+ inner_h
464
+ end
465
+ h
466
+ end
467
+
418
468
  {
419
469
  'tags' => tags,
420
470
  'name' => name,
421
471
  'version' => version,
422
472
  'code_id' => code_id,
423
- 'environment' => environment.to_s,
473
+ 'catalog_uuid' => catalog_uuid,
474
+ 'catalog_format' => catalog_format,
475
+ 'environment' => environment.to_s,
424
476
  'resources' => @resources.collect { |v| @resource_table[v].to_data_hash },
425
477
  'edges' => edges. collect { |e| e.to_data_hash },
426
- 'classes' => classes
427
- }
478
+ 'classes' => classes,
479
+ }.merge(metadata_hash.empty? ? {} : {'metadata' => metadata_hash})
480
+ .merge(recursive_metadata_hash.empty? ? {} : {'recursive_metadata' => recursive_metadata_hash})
428
481
  end
429
482
 
430
483
  # Convert our catalog into a RAL catalog.
@@ -536,6 +589,10 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
536
589
 
537
590
  result.version = self.version
538
591
  result.code_id = self.code_id
592
+ result.catalog_uuid = self.catalog_uuid
593
+ result.catalog_format = self.catalog_format
594
+ result.metadata = self.metadata
595
+ result.recursive_metadata = self.recursive_metadata
539
596
 
540
597
  map = {}
541
598
  resources.each do |resource|
@@ -1,5 +1,6 @@
1
1
  require 'time'
2
2
  require 'puppet/network/format_support'
3
+ require 'puppet/util/psych_support'
3
4
 
4
5
  module Puppet
5
6
  class Resource
@@ -11,6 +12,7 @@ module Puppet
11
12
  #
12
13
  # @api private
13
14
  class Status
15
+ include Puppet::Util::PsychSupport
14
16
  include Puppet::Util::Tagging
15
17
  include Puppet::Network::FormatSupport
16
18
 
@@ -181,7 +183,14 @@ module Puppet
181
183
  @failed = data['failed']
182
184
 
183
185
  @events = data['events'].map do |event|
184
- Puppet::Transaction::Event.from_data_hash(event)
186
+ # in YAML (for reports) we serialize this as an object, but
187
+ # in PSON it becomes a hash. Depending on where we came from
188
+ # we might not need to deserialize it.
189
+ if event.class == Puppet::Transaction::Event
190
+ event
191
+ else
192
+ Puppet::Transaction::Event.from_data_hash(event)
193
+ end
185
194
  end
186
195
  end
187
196
 
@@ -194,7 +203,7 @@ module Puppet
194
203
  'resource_type' => @resource_type,
195
204
  'containment_path' => @containment_path,
196
205
  'evaluation_time' => @evaluation_time,
197
- 'tags' => @tags,
206
+ 'tags' => @tags.to_a,
198
207
  'time' => @time.iso8601(9),
199
208
  'failed' => @failed,
200
209
  'changed' => @changed,
@@ -174,12 +174,9 @@ class Puppet::Resource::Type
174
174
 
175
175
  if code
176
176
  if @match # Only bother setting up the ephemeral scope if there are match variables to add into it
177
- begin
178
- elevel = scope.ephemeral_level
177
+ scope.with_guarded_scope do
179
178
  scope.ephemeral_from(@match, file, line)
180
179
  code.safeevaluate(scope)
181
- ensure
182
- scope.unset_ephemeral_var(elevel)
183
180
  end
184
181
  else
185
182
  code.safeevaluate(scope)
@@ -346,18 +343,23 @@ class Puppet::Resource::Type
346
343
  end
347
344
 
348
345
  # Validate and set any arguments passed by the resource as variables in the scope.
346
+ #
347
+ # This method is known to only be used on the server/compile side.
348
+ #
349
349
  # @param resource [Puppet::Parser::Resource] the resource
350
350
  # @param scope [Puppet::Parser::Scope] the scope
351
351
  #
352
352
  # @api private
353
353
  def set_resource_parameters(resource, scope)
354
354
  # Inject parameters from using external lookup
355
+ modname = resource[:module_name] || module_name
356
+ scope[MODULE_NAME] = modname unless modname.nil?
357
+ caller_name = resource[:caller_module_name] || scope.parent_module_name
358
+ scope[CALLER_MODULE_NAME] = caller_name unless caller_name.nil?
359
+
355
360
  resource.add_parameters_from_consume
356
361
  inject_external_parameters(resource, scope)
357
362
 
358
- resource_hash = {}
359
- resource.each { |k, v| resource_hash[k.to_s] = v.value unless k == :name || k == :title }
360
-
361
363
  if @type == :hostclass
362
364
  scope[TITLE] = resource.title.to_s.downcase
363
365
  scope[NAME] = resource.name.to_s.downcase
@@ -365,17 +367,21 @@ class Puppet::Resource::Type
365
367
  scope[TITLE] = resource.title
366
368
  scope[NAME] = resource.name
367
369
  end
370
+ scope.class_set(self.name,scope) if hostclass? || node?
368
371
 
369
- modname = resource_hash[MODULE_NAME] || module_name
370
- scope[MODULE_NAME] = modname unless modname.nil?
371
- caller_name = resource_hash[CALLER_MODULE_NAME] || scope.parent_module_name
372
- scope[CALLER_MODULE_NAME] = caller_name unless caller_name.nil?
372
+ param_hash = scope.with_parameter_scope(arguments.keys) do |param_scope|
373
+ # Assign directly to the parameter scope to avoid scope parameter validation at this point. It
374
+ # will happen anyway when the values are assigned to the scope after the parameter scoped has
375
+ # been popped.
376
+ resource.each { |k, v| param_scope[k.to_s] = v.value unless k == :name || k == :title }
377
+ assign_defaults(resource, param_scope, scope)
378
+ param_scope.to_hash
379
+ end
373
380
 
374
- scope.class_set(self.name,scope) if hostclass? || node?
381
+ validate_resource_hash(resource, param_hash)
375
382
 
376
- assign_defaults(resource, scope, resource_hash)
377
- validate_resource_hash(resource, resource_hash)
378
- resource_hash.each { |param, value| exceptwrap { scope[param] = value }}
383
+ # Assign parameter values to current scope
384
+ param_hash.each { |param, value| exceptwrap { scope[param] = value }}
379
385
  end
380
386
 
381
387
  # Lookup and inject parameters from external scope
@@ -385,28 +391,30 @@ class Puppet::Resource::Type
385
391
  # Only lookup parameters for host classes
386
392
  return unless type == :hostclass
387
393
  parameters = resource.parameters
388
- arguments.each do |param_name, _|
389
- name = param_name.to_sym
390
- next if parameters.include?(name)
391
- value = lookup_external_default_for(param_name, scope)
392
- resource[name] = value unless value.nil?
394
+ arguments.each do |param_name, default|
395
+ sym_name = param_name.to_sym
396
+ param = parameters[sym_name]
397
+ next unless param.nil? || param.value.nil?
398
+ catch(:no_such_key) do
399
+ bound_value = Puppet::Pops::Lookup.search_and_merge("#{name}::#{param_name}", Puppet::Pops::Lookup::Invocation.new(scope), nil)
400
+ # Assign bound value but don't let an undef trump a default expression
401
+ resource[sym_name] = bound_value unless bound_value.nil? && !default.nil?
402
+ end
393
403
  end
394
404
  end
395
405
  private :inject_external_parameters
396
406
 
397
- def assign_defaults(resource, scope, resource_hash)
407
+ def assign_defaults(resource, param_scope, scope)
398
408
  return unless resource.is_a?(Puppet::Parser::Resource)
399
409
  parameters = resource.parameters
400
- hashed_types = parameter_struct.hashed_elements
401
410
  arguments.each do |param_name, default|
402
411
  next if default.nil?
403
412
  name = param_name.to_sym
404
413
  param = parameters[name]
405
414
  next unless param.nil? || param.value.nil?
406
-
407
- value = default.safeevaluate(scope)
415
+ value = exceptwrap { param_scope.evaluate3x(param_name, default, scope) }
408
416
  resource[name] = value
409
- resource_hash[param_name] = value
417
+ param_scope[param_name] = value
410
418
  end
411
419
  end
412
420
  private :assign_defaults
@@ -551,21 +559,4 @@ class Puppet::Resource::Type
551
559
  type_factory.struct(members)
552
560
  end
553
561
  private :create_params_struct
554
-
555
- # Consult external data bindings for class parameter values which must be
556
- # namespaced in the backend.
557
- #
558
- # Example:
559
- #
560
- # class foo($port=0){ ... }
561
- #
562
- # We make a request to the backend for the key 'foo::port' not 'foo'
563
- #
564
- def lookup_external_default_for(param, scope)
565
- if type == :hostclass
566
- catch(:no_such_key) { return Puppet::Pops::Lookup.search_and_merge("#{name}::#{param}", Puppet::Pops::Lookup::Invocation.new(scope), nil) }
567
- end
568
- nil
569
- end
570
- private :lookup_external_default_for
571
562
  end