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
@@ -21,6 +21,8 @@ module Puppet::FileServing::TerminusSelector
21
21
  else
22
22
  Puppet[:default_file_terminus]
23
23
  end
24
+ when "http","https"
25
+ :http
24
26
  when nil
25
27
  :file_server
26
28
  else
@@ -71,8 +71,8 @@ class Puppet::FileSystem::FileImpl
71
71
  end
72
72
  end
73
73
 
74
- def read(path)
75
- path.read
74
+ def read(path, opts = {})
75
+ path.read(opts)
76
76
  end
77
77
 
78
78
  def read_preserve_line_endings(path)
@@ -39,7 +39,7 @@ class Puppet::FileSystem::MemoryImpl
39
39
  object.path
40
40
  end
41
41
 
42
- def read(path)
42
+ def read(path, opts = {})
43
43
  handle = assert_path(path).handle
44
44
  handle.read
45
45
  end
@@ -156,7 +156,7 @@ class Puppet::FileSystem::Uniquefile < DelegateClass(File)
156
156
  if $SAFE > 0
157
157
  tmp = @@systmpdir
158
158
  else
159
- for dir in [ENV['TMPDIR'], ENV['TMP'], ENV['TEMP'], @@systmpdir, '/tmp']
159
+ for dir in [ Puppet::Util.get_env('TMPDIR'), Puppet::Util.get_env('TMP'), Puppet::Util.get_env('TEMP'), @@systmpdir, '/tmp']
160
160
  if dir and stat = File.stat(dir) and stat.directory? and stat.writable?
161
161
  tmp = dir
162
162
  break
@@ -122,8 +122,8 @@ module Puppet::FileSystem
122
122
  #
123
123
  # @api public
124
124
  #
125
- def self.read(path)
126
- @impl.read(assert_path(path))
125
+ def self.read(path, opts = {})
126
+ @impl.read(assert_path(path), opts)
127
127
  end
128
128
 
129
129
  # Read a file keeping the original line endings intact. This
@@ -90,7 +90,7 @@ class Puppet::Forge
90
90
  # @raise [Puppet::Forge::Errors::SSLVerifyError] if there is a problem
91
91
  # verifying the remote SSL certificate
92
92
  def read_response(request, io = nil)
93
- http_object = get_http_object
93
+ http_object = Puppet::Util::HttpProxy.get_http_object(uri)
94
94
 
95
95
  http_object.start do |http|
96
96
  response = http.request(request)
@@ -121,36 +121,6 @@ class Puppet::Forge
121
121
  end
122
122
  end
123
123
 
124
- # Return a Net::HTTP::Proxy object constructed from the settings provided
125
- # accessing the repository.
126
- #
127
- # This method optionally configures SSL correctly if the URI scheme is
128
- # 'https', including setting up the root certificate store so remote server
129
- # SSL certificates can be validated.
130
- #
131
- # @return [Net::HTTP::Proxy] object constructed from repo settings
132
- def get_http_object
133
- proxy = Puppet::Util::HttpProxy.proxy(@uri)
134
-
135
- if @uri.scheme == 'https'
136
- cert_store = OpenSSL::X509::Store.new
137
- cert_store.set_default_paths
138
-
139
- proxy.use_ssl = true
140
- proxy.verify_mode = OpenSSL::SSL::VERIFY_PEER
141
- proxy.cert_store = cert_store
142
- end
143
-
144
- if Puppet[:http_debug]
145
- proxy.set_debug_output($stderr)
146
- end
147
-
148
- proxy.open_timeout = Puppet[:http_connect_timeout]
149
- proxy.read_timeout = Puppet[:http_read_timeout]
150
-
151
- proxy
152
- end
153
-
154
124
  # Return the local file name containing the data downloaded from the
155
125
  # repository at +release+ (e.g. "myuser-mymodule").
156
126
  def retrieve(release)
data/lib/puppet/forge.rb CHANGED
@@ -38,7 +38,7 @@ class Puppet::Forge < Semantic::Dependency::Source
38
38
  # "releases" => [{"version"=>"0.0.1"}, {"version"=>"0.0.2"}],
39
39
  # "full_name" => "puppetlabs/bacula",
40
40
  # "version" => "0.0.2",
41
- # "project_url" => "http://github.com/puppetlabs/puppetlabs-bacula",
41
+ # "project_url" => "https://github.com/puppetlabs/puppetlabs-bacula",
42
42
  # "desc" => "bacula"
43
43
  # }
44
44
  # ]
@@ -50,7 +50,7 @@
50
50
  #
51
51
  # @since 4.0.0
52
52
  #
53
- Puppet::Functions.create_function(:assert_type) do
53
+ Puppet::Functions.create_function(:assert_type, Puppet::Functions::InternalFunction) do
54
54
  dispatch :assert_type do
55
55
  param 'Type', :type
56
56
  param 'Any', :value
@@ -58,6 +58,7 @@ Puppet::Functions.create_function(:assert_type) do
58
58
  end
59
59
 
60
60
  dispatch :assert_type_s do
61
+ scope_param
61
62
  param 'String', :type_string
62
63
  param 'Any', :value
63
64
  optional_block_param 'Callable[Type, Type]', :block
@@ -70,26 +71,25 @@ Puppet::Functions.create_function(:assert_type) do
70
71
  unless Puppet::Pops::Types::TypeCalculator.instance?(type,value)
71
72
  inferred_type = Puppet::Pops::Types::TypeCalculator.infer(value)
72
73
  if block_given?
73
- # Give the inferred type to allow richer comparisson in the given block (if generalized
74
+ # Give the inferred type to allow richer comparison in the given block (if generalized
74
75
  # information is lost).
75
76
  #
76
77
  value = yield(type, inferred_type)
77
78
  else
78
- # Do not give all the details - i.e. format as Integer, instead of Integer[n, n] for exact value, which
79
- # is just confusing. (OTOH: may need to revisit, or provide a better "type diff" output.
80
- #
81
- actual = Puppet::Pops::Types::TypeCalculator.generalize(inferred_type)
82
- raise Puppet::Pops::Types::TypeAssertionError.new("assert_type(): Expected type #{type} does not match actual: #{actual}", type,actual)
79
+ raise Puppet::Pops::Types::TypeAssertionError.new(
80
+ Puppet::Pops::Types::TypeMismatchDescriber.singleton.describe_mismatch('assert_type():', type, inferred_type),
81
+ type, inferred_type)
83
82
  end
84
83
  end
85
84
  value
86
85
  end
87
86
 
87
+ # @param scope [Puppet::Parser::Scope] scope used when obtaining loader for defined types
88
88
  # @param type_string [String] the type the value must be an instance of given in String form
89
89
  # @param value [Object] the value to assert
90
90
  #
91
- def assert_type_s(type_string, value, &proc)
92
- t = Puppet::Pops::Types::TypeParser.new.parse(type_string)
91
+ def assert_type_s(scope, type_string, value, &proc)
92
+ t = Puppet::Pops::Types::TypeParser.new.parse(type_string, scope)
93
93
  block_given? ? assert_type(t, value, &proc) : assert_type(t, value)
94
94
  end
95
95
  end
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # This function takes two mandatory arguments, in this order:
5
5
  #
6
- # 1. An array or hash the function will iterate over.
6
+ # 1. An array, hash, or other iterable object that the function will iterate over.
7
7
  # 2. A lambda, which the function calls for each element in the first argument. It can
8
8
  # request one or two parameters.
9
9
  #
@@ -106,12 +106,12 @@ Puppet::Functions.create_function(:each) do
106
106
  end
107
107
 
108
108
  dispatch :foreach_Enumerable_2 do
109
- param 'Any', :enumerable
109
+ param 'Iterable', :enumerable
110
110
  block_param 'Callable[2,2]', :block
111
111
  end
112
112
 
113
113
  dispatch :foreach_Enumerable_1 do
114
- param 'Any', :enumerable
114
+ param 'Iterable', :enumerable
115
115
  block_param 'Callable[1,1]', :block
116
116
  end
117
117
 
@@ -134,7 +134,7 @@ Puppet::Functions.create_function(:each) do
134
134
  end
135
135
 
136
136
  def foreach_Enumerable_1(enumerable)
137
- enum = asserted_enumerable(enumerable)
137
+ enum = Puppet::Pops::Types::Iterable.asserted_iterable(self, enumerable)
138
138
  begin
139
139
  loop { yield(enum.next) }
140
140
  rescue StopIteration
@@ -144,7 +144,7 @@ Puppet::Functions.create_function(:each) do
144
144
  end
145
145
 
146
146
  def foreach_Enumerable_2(enumerable)
147
- enum = asserted_enumerable(enumerable)
147
+ enum = Puppet::Pops::Types::Iterable.asserted_iterable(self, enumerable)
148
148
  index = 0
149
149
  begin
150
150
  loop do
@@ -156,12 +156,4 @@ Puppet::Functions.create_function(:each) do
156
156
  # produces the receiver
157
157
  enumerable
158
158
  end
159
-
160
- def asserted_enumerable(obj)
161
- unless enum = Puppet::Pops::Types::Enumeration.enumerator(obj)
162
- raise ArgumentError, ("#{self.class.name}(): wrong argument type (#{obj.class}; must be something enumerable.")
163
- end
164
- enum
165
- end
166
-
167
159
  end
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # This function takes two mandatory arguments, in this order:
6
6
  #
7
- # 1. An array or hash the function will iterate over.
7
+ # 1. An array, hash, or other iterable object that the function will iterate over.
8
8
  # 2. A lambda, which the function calls for each element in the first argument. It can
9
9
  # request one or two parameters.
10
10
  #
@@ -80,12 +80,12 @@ Puppet::Functions.create_function(:filter) do
80
80
  end
81
81
 
82
82
  dispatch :filter_Enumerable_2 do
83
- param 'Any', :enumerable
83
+ param 'Iterable', :enumerable
84
84
  block_param 'Callable[2,2]', :block
85
85
  end
86
86
 
87
87
  dispatch :filter_Enumerable_1 do
88
- param 'Any', :enumerable
88
+ param 'Iterable', :enumerable
89
89
  block_param 'Callable[1,1]', :block
90
90
  end
91
91
 
@@ -105,8 +105,7 @@ Puppet::Functions.create_function(:filter) do
105
105
 
106
106
  def filter_Enumerable_1(enumerable)
107
107
  result = []
108
- index = 0
109
- enum = asserted_enumerable(enumerable)
108
+ enum = Puppet::Pops::Types::Iterable.asserted_iterable(self, enumerable)
110
109
  begin
111
110
  loop do
112
111
  it = enum.next
@@ -122,7 +121,7 @@ Puppet::Functions.create_function(:filter) do
122
121
  def filter_Enumerable_2(enumerable)
123
122
  result = []
124
123
  index = 0
125
- enum = asserted_enumerable(enumerable)
124
+ enum = Puppet::Pops::Types::Iterable.asserted_iterable(self, enumerable)
126
125
  begin
127
126
  loop do
128
127
  it = enum.next
@@ -135,12 +134,4 @@ Puppet::Functions.create_function(:filter) do
135
134
  end
136
135
  result
137
136
  end
138
-
139
- def asserted_enumerable(obj)
140
- unless enum = Puppet::Pops::Types::Enumeration.enumerator(obj)
141
- raise ArgumentError, ("#{self.class.name}(): wrong argument type (#{obj.class}; must be something enumerable.")
142
- end
143
- enum
144
- end
145
-
146
137
  end
@@ -1,153 +1,129 @@
1
- # Looks up data defined using Data Binding, and Data Providers using different strategies. The lookup searches in
2
- # Data Bindings first (if configured; typically Hiera), then in the environments data provider (if any), and last in
3
- # the module's data provider (if any) of the module the call to lookup originates from. Thus, the global Data Binding
4
- # has higher priority than data provided in the environment, which has higher priority than data provided in a module,
5
- #
6
- # The lookup function can be called in one of these ways:
7
- #
8
- # lookup(name)
9
- # lookup(name, value_type)
10
- # lookup(name, value_type, merge)
11
- # lookup(name, value_type, merge, default_value)
12
- # lookup(options_hash)
13
- # lookup(name, options_hash)
14
- #
15
- # The function may optionally be called with a code block / lambda with the following signature:
16
- #
17
- # lookup(...) |$name| { ... }
18
- #
19
- # The block, if present, is mutually exclusive to the `default_value` and will be called with the `name` used in the
20
- # lookup when no value is found. The value produced by the block then becomes the value produced by the lookup.
21
- #
22
- # The meaning of the parameters or content of the options hash is:
23
- #
24
- # * `name` - The name or array of names to lookup (first found is returned)
25
- # * `value_type` - The type to assert. Defaults to 'Data' See 'Type Specification' below.
26
- # * `default_value` - The default value if there was no value found (must comply with the data type)
27
- # * `override` - a hash with map from names to values that are used instead of the underlying bindings. If the name
28
- # is found here it wins. Defaults to an empty hash.
29
- # * `default_values_hash` - a hash with map from names to values that are used as a last resort to obtain a value.
30
- # Defaults to an empty hash.
31
- # * `merge` - A string of type Enum[unique, hash, merge] or a hash with the key 'strategy' set to that string. See
32
- # 'Merge Strategies' below.
33
- #
34
- # It is not permitted to pass the `name` as both a parameter and in the options hash.
35
- #
36
- # The search will proceed as follows:
37
- # 1. For each name given in the `name` array (or once, if it's just one name):
38
- # - If a matching key is found in the `override` hash, it's value is immediately type checked and returned
39
- # - Search and optionally merge Data Binding, environment data providers, and module data providers
40
- # - Type check and return the value if a matching key is found
41
- # 2. For each name given in the `name` array (or once, if it's just one name):
42
- # - Type check and return the value if a matching key is found in the `default_values_hash`
43
- # 3. Type check and return either the given `default_value` or the result of calling the code block if either exist
44
- # 4. Raise an error indicating that no matching value was found
45
- #
46
- # *Merge Strategies*
47
- #
48
- # The default behavior of the lookup is to return the first value that is found for the given `name`. The optional
49
- # `merge` parameter will change this so that a lookup makes an attempt to find values in all three sources (the Data
50
- # Binder, the environment, and the module scope) and then merge these values according to the given strategy. This
51
- # does not apply to values found in the 'override' hash. Such values are returned immediately without merging.
52
- # Note that `merge` is passed on to allow the underlying provider to return a merged result
53
- #
54
- # The valid strategies are:
55
- # - 'hash' Performs a simple hash-merge by overwriting keys of lower lookup priority. Merged values must be of Hash type
56
- # - 'unique' Appends everything to an array containing no nested arrays and where all duplicates have been removed. Can
57
- # append values of Scalar or Array[Scalar] type
58
- # - 'deep' Performs a deep merge on values of Array and Hash type. See documentation for the DeepMerge gem's deep_merge
59
- # operation for details and options.
60
- #
61
- # The 'deep' strategy can use additional options to control its behavior. Options can be passed as top level
62
- # keys in the `merge` parameter when it is a given as a hash. Recognized options are:
63
- # - 'knockout_prefix' Set to string value to signify prefix which deletes elements from existing element. Defaults is _undef_
64
- # - 'sort_merged_arrays' Set to _true_ to sort all arrays that are merged together. Default is _false_
65
- # - 'unpack_arrays' Set to string value used as a deliminator to join all array values and then split them again. Default is _undef_
66
- # - 'merge_hash_arrays' Set to _true_ to merge hashes within arrays. Default is _false_
67
- #
68
- # *Type Specification*
69
- #
70
- # The type specification is a type in the Puppet Type System, e.g.:
71
- # * `Integer`, an integral value with optional range e.g.:
72
- # * `Integer[0, default]` - 0 or positive
73
- # * `Integer[default, -1]` - negative,
74
- # * `Integer[1,100]` - value between 1 and 100 inclusive
75
- # * `String`- any string
76
- # * `Float` - floating point number (same signature as for Integer for `Integer` ranges)
77
- # * `Boolean` - true of false (strict)
78
- # * `Array` - an array (of Data by default), or parameterized as `Array[<element_type>]`, where
79
- # `<element_type>` is the expected type of elements
80
- # * `Hash`, - a hash (of default `Literal` keys and `Data` values), or parameterized as
81
- # `Hash[<value_type>]`, `Hash[<key_type>, <value_type>]`, where `<key_type>`, and
82
- # `<value_type>` are the types of the keys and values respectively
83
- # (key is `Literal` by default).
84
- # * `Data` - abstract type representing any `Literal` (including _undef_), `Array[Data]`, or `Hash[Literal, Data]`
85
- # * `Pattern[<p1>, <p2>, ..., <pn>]` - an enumeration of valid patterns (one or more) where
86
- # a pattern is a regular expression string or regular expression,
87
- # e.g. `Pattern['.com$', '.net$']`, `Pattern[/[a-z]+[0-9]+/]`
88
- # * `Enum[<s1>, <s2>, ..., <sn>]`, - an enumeration of exact string values (one or more)
89
- # e.g. `Enum[blue, red, green]`.
90
- # * `Variant[<t1>, <t2>,...<tn>]` - matches one of the listed types (at least one must be given)
91
- # e.g. `Variant[Integer[8000,8999], Integer[20000, 99999]]` to accept a value in either range
92
- # * `Regexp`- a regular expression (i.e. the result is a regular expression, not a string
93
- # matching a regular expression).
94
- #
95
- # For more options and details about types, see the Puppet Language Reference
96
- #
97
- # *Handling of undef*
98
- #
99
- # When no match is found for the given `name` when searching all sources, (including the `override`and
100
- # `default_values_hash`), then the value used is either the `default_value` or the value produced by the given block.
101
- # If neither is provided, then the lookup will always raise an error. Note that this only applies when there's no
102
- # match for the given `name`. It does not happen when a value is found and that value happens to be _undef_.
103
- #
104
- # *Validation of returned value*
105
- #
106
- # The produced value is subject to type validation using the `value_type` (if given) and an error is raised unless
107
- # the resulting value is of correct type.
108
- #
109
- # *Examples*
110
- #
111
- # When called with one argument; **the name**, it
112
- # returns the bound value with the given name after having asserted it has the default datatype `Data`:
113
- #
114
- # lookup('the_name')
115
- #
116
- # When called with two arguments; **the name**, and **the expected type**, it
117
- # returns the bound value with the given name after having asserted it has the given data
118
- # type ('String' in the example):
119
- #
120
- # lookup('the_name', String)
121
- #
122
- # When called with four arguments, **the name**, the **expected type**, the **merge** strategy, and a
123
- # **default value**, it returns the bound value with the given name, or the default after having asserted the value
124
- # has the given data type:
125
- #
126
- # lookup('the_name', String, undef, 'Fred')
127
- # lookup('the_name', Array[String], 'unique', [Fred])
128
- #
129
- # Using a lambda to provide a default value by calling a function:
130
- #
131
- # lookup('the_size', Integer[1,100]) |$name| {
132
- # obtain_size_default()
133
- # }
134
- #
135
- # There are two ways to make lookup return undef when no matching key was found instead of raising an error.
136
- # Either call it with four arguments (the `merge` argument must be present even when using the default strategy
137
- # to ensure that the four argument variant is used):
138
- #
139
- # $are_you_there = lookup('peekaboo', Optional[String], undef, undef)
140
- #
141
- # or call it using an options hash:
142
- #
143
- # $are_you_there = lookup('peekaboo', { 'default_value' => undef })
144
- # $are_you_there = lookup({ 'name' => 'peekaboo', 'default_value' => undef })
145
- #
146
- # or with a block that produces an undef value:
147
- #
148
- # $are_you_there = lookup('peekaboo', Optional[String]) |$name| { undef }
149
- #
150
- # - Since 4.0.0
1
+ # Uses the Puppet lookup system to retrieve a value for a given key. By default,
2
+ # this returns the first value found (and fails compilation if no values are
3
+ # available), but you can configure it to merge multiple values into one, fail
4
+ # gracefully, and more.
5
+ #
6
+ # When looking up a key, Puppet will search up to three tiers of data, in the
7
+ # following order:
8
+ #
9
+ # 1. Hiera.
10
+ # 2. The current environment's data provider.
11
+ # 3. The indicated module's data provider, if the key is of the form
12
+ # `<MODULE NAME>::<SOMETHING>`.
13
+ #
14
+ # #### Arguments
15
+ #
16
+ # You must provide the name of a key to look up, and can optionally provide other
17
+ # arguments. You can combine these arguments in the following ways:
18
+ #
19
+ # * `lookup( <NAME>, [<VALUE TYPE>], [<MERGE BEHAVIOR>], [<DEFAULT VALUE>] )`
20
+ # * `lookup( [<NAME>], <OPTIONS HASH> )`
21
+ # * `lookup( as above ) |$key| { # lambda returns a default value }`
22
+ #
23
+ # Arguments in `[square brackets]` are optional.
24
+ #
25
+ # The arguments accepted by `lookup` are as follows:
26
+ #
27
+ # 1. `<NAME>` (string or array) --- The name of the key to look up.
28
+ # * This can also be an array of keys. If Puppet doesn't find anything for the
29
+ # first key, it will try again with the subsequent ones, only resorting to a
30
+ # default value if none of them succeed.
31
+ # 2. `<VALUE TYPE>` (data type) --- A
32
+ # [data type](https://docs.puppetlabs.com/puppet/latest/reference/lang_data_type.html)
33
+ # that must match the retrieved value; if not, the lookup (and catalog
34
+ # compilation) will fail. Defaults to `Data` (accepts any normal value).
35
+ # 3. `<MERGE BEHAVIOR>` (string or hash; see **"Merge Behaviors"** below) ---
36
+ # Whether (and how) to combine multiple values. If present, this overrides any
37
+ # merge behavior specified in the data sources. Defaults to no value; Puppet will
38
+ # use merge behavior from the data sources if present, and will otherwise do a
39
+ # first-found lookup.
40
+ # 4. `<DEFAULT VALUE>` (any normal value) --- If present, `lookup` returns this
41
+ # when it can't find a normal value. Default values are never merged with found
42
+ # values. Like a normal value, the default must match the value type. Defaults to
43
+ # no value; if Puppet can't find a normal value, the lookup (and compilation) will
44
+ # fail.
45
+ # 5. `<OPTIONS HASH>` (hash) --- Alternate way to set the arguments above, plus
46
+ # some less-common extra options. If you pass an options hash, you can't combine
47
+ # it with any regular arguments (except `<NAME>`). An options hash can have the
48
+ # following keys:
49
+ # * `'name'` --- Same as `<NAME>` (argument 1). You can pass this as an
50
+ # argument or in the hash, but not both.
51
+ # * `'value_type'` --- Same as `<VALUE TYPE>` (argument 2).
52
+ # * `'merge'` --- Same as `<MERGE BEHAVIOR>` (argument 3).
53
+ # * `'default_value'` --- Same as `<DEFAULT VALUE>` (argument 4).
54
+ # * `'default_values_hash'` (hash) --- A hash of lookup keys and default
55
+ # values. If Puppet can't find a normal value, it will check this hash for the
56
+ # requested key before giving up. You can combine this with `default_value` or
57
+ # a lambda, which will be used if the key isn't present in this hash. Defaults
58
+ # to an empty hash.
59
+ # * `'override'` (hash) --- A hash of lookup keys and override values. Puppet
60
+ # will check for the requested key in the overrides hash _first;_ if found, it
61
+ # returns that value as the _final_ value, ignoring merge behavior. Defaults
62
+ # to an empty hash.
63
+ #
64
+ # Finally, `lookup` can take a lambda, which must accept a single parameter.
65
+ # This is yet another way to set a default value for the lookup; if no results are
66
+ # found, Puppet will pass the requested key to the lambda and use its result as
67
+ # the default value.
68
+ #
69
+ # #### Merge Behaviors
70
+ #
71
+ # Puppet lookup uses a hierarchy of data sources, and a given key might have
72
+ # values in multiple sources. By default, Puppet returns the first value it finds,
73
+ # but it can also continue searching and merge all the values together.
74
+ #
75
+ # > **Note:** Data sources can use the special `lookup_options` metadata key to
76
+ # request a specific merge behavior for a key. The `lookup` function will use that
77
+ # requested behavior unless you explicitly specify one.
78
+ #
79
+ # The valid merge behaviors are:
80
+ #
81
+ # * `'first'` --- Returns the first value found, with no merging. Puppet lookup's
82
+ # default behavior.
83
+ # * `'unique'` (called "array merge" in classic Hiera) --- Combines any number of
84
+ # arrays and scalar values to return a merged, flattened array with all duplicate
85
+ # values removed. The lookup will fail if any hash values are found.
86
+ # * `'hash'` --- Combines the keys and values of any number of hashes to return a
87
+ # merged hash. If the same key exists in multiple source hashes, Puppet will use
88
+ # the value from the highest-priority data source; it won't recursively merge the
89
+ # values.
90
+ # * `'deep'` --- Combines the keys and values of any number of hashes to return a
91
+ # merged hash. If the same key exists in multiple source hashes, Puppet will
92
+ # recursively merge hash or array values (with duplicate values removed from
93
+ # arrays). For conflicting scalar values, the highest-priority value will win.
94
+ # * `{'strategy' => 'first|unique|hash'}` --- Same as the string versions of these
95
+ # merge behaviors.
96
+ # * `{'strategy' => 'deep', <DEEP OPTION> => <VALUE>, ...}` --- Same as `'deep'`,
97
+ # but can adjust the merge with additional options. The available options are:
98
+ # * `'knockout_prefix'` (string or undef) --- A string prefix to indicate a
99
+ # value should be _removed_ from the final result. Defaults to `undef`, which
100
+ # disables this feature.
101
+ # * `'sort_merged_arrays'` (boolean) --- Whether to sort all arrays that are
102
+ # merged together. Defaults to `false`.
103
+ # * `'unpack_arrays'` (string or undef) --- A delimiter string; Puppet will
104
+ # join merged arrays with this delimiter, then split them again. Defaults to
105
+ # `undef`, which disables this feature.
106
+ # * `'merge_hash_arrays'` (boolean) --- Whether to merge hashes within arrays.
107
+ # Defaults to `false`.
108
+ #
109
+ # @example Look up a key and return the first value found
110
+ #
111
+ # lookup('ntp::service_name')
112
+ #
113
+ # @example Do a unique merge lookup of class names, then add all of those classes to the catalog (like `hiera_include`)
114
+ #
115
+ # lookup('classes', Array[String], 'unique').include
116
+ #
117
+ # @example Do a deep hash merge lookup of user data, but let higher priority sources remove values by prefixing them with `--`
118
+ #
119
+ # lookup( { 'name' => 'users',
120
+ # 'merge' => {
121
+ # 'strategy' => 'deep',
122
+ # 'knockout_prefix' => '--',
123
+ # },
124
+ # })
125
+ #
126
+ # @since 4.0.0
151
127
  Puppet::Functions.create_function(:lookup, Puppet::Functions::InternalFunction) do
152
128
  name_t = 'Variant[String,Array[String]]'
153
129
  value_type_t = 'Type'
@@ -1,9 +1,9 @@
1
- # Applies a [lambda](http://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html)
1
+ # Applies a [lambda](https://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html)
2
2
  # to every value in a data structure and returns an array containing the results.
3
3
  #
4
4
  # This function takes two mandatory arguments, in this order:
5
5
  #
6
- # 1. An array or hash the function will iterate over.
6
+ # 1. An array, hash, or other iterable object that the function will iterate over.
7
7
  # 2. A lambda, which the function calls for each element in the first argument. It can
8
8
  # request one or two parameters.
9
9
  #
@@ -78,12 +78,12 @@ Puppet::Functions.create_function(:map) do
78
78
  end
79
79
 
80
80
  dispatch :map_Enumerable_2 do
81
- param 'Any', :enumerable
81
+ param 'Iterable', :enumerable
82
82
  block_param 'Callable[2,2]', :block
83
83
  end
84
84
 
85
85
  dispatch :map_Enumerable_1 do
86
- param 'Any', :enumerable
86
+ param 'Iterable', :enumerable
87
87
  block_param 'Callable[1,1]', :block
88
88
  end
89
89
 
@@ -98,7 +98,7 @@ Puppet::Functions.create_function(:map) do
98
98
  def map_Enumerable_1(enumerable)
99
99
  result = []
100
100
  index = 0
101
- enum = asserted_enumerable(enumerable)
101
+ enum = Puppet::Pops::Types::Iterable.asserted_iterable(self, enumerable)
102
102
  begin
103
103
  loop { result << yield(enum.next) }
104
104
  rescue StopIteration
@@ -109,7 +109,7 @@ Puppet::Functions.create_function(:map) do
109
109
  def map_Enumerable_2(enumerable)
110
110
  result = []
111
111
  index = 0
112
- enum = asserted_enumerable(enumerable)
112
+ enum = Puppet::Pops::Types::Iterable.asserted_iterable(self, enumerable)
113
113
  begin
114
114
  loop do
115
115
  result << yield(index, enum.next)
@@ -119,12 +119,4 @@ Puppet::Functions.create_function(:map) do
119
119
  end
120
120
  result
121
121
  end
122
-
123
- def asserted_enumerable(obj)
124
- unless enum = Puppet::Pops::Types::Enumeration.enumerator(obj)
125
- raise ArgumentError, ("#{self.class.name}(): wrong argument type (#{obj.class}; must be something enumerable.")
126
- end
127
- enum
128
- end
129
-
130
122
  end
@@ -30,6 +30,7 @@
30
30
  # ~~~ ruby
31
31
  # $matches = ["abc123","def456"].match(/([a-z]+)([1-9]+)/)
32
32
  # # $matches contains [[abc123, abc, 123], [def456, def, 456]]
33
+ # ~~~
33
34
  #
34
35
  # @since 4.0.0
35
36
  #