puppet 6.13.0-x86-mingw32 → 6.18.0-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (461) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -7
  3. data/CONTRIBUTING.md +7 -13
  4. data/Gemfile +4 -2
  5. data/Gemfile.lock +36 -32
  6. data/README.md +17 -24
  7. data/ext/windows/service/daemon.rb +3 -3
  8. data/lib/puppet.rb +33 -9
  9. data/lib/puppet/agent.rb +20 -14
  10. data/lib/puppet/application/agent.rb +26 -17
  11. data/lib/puppet/application/apply.rb +18 -20
  12. data/lib/puppet/application/describe.rb +7 -5
  13. data/lib/puppet/application/device.rb +2 -2
  14. data/lib/puppet/application/filebucket.rb +19 -15
  15. data/lib/puppet/application/lookup.rb +16 -4
  16. data/lib/puppet/application/plugin.rb +1 -0
  17. data/lib/puppet/application/ssl.rb +4 -4
  18. data/lib/puppet/configurer.rb +58 -57
  19. data/lib/puppet/configurer/downloader.rb +31 -10
  20. data/lib/puppet/configurer/plugin_handler.rb +10 -1
  21. data/lib/puppet/confine.rb +2 -2
  22. data/lib/puppet/confine/any.rb +1 -1
  23. data/lib/puppet/context/trusted_information.rb +14 -8
  24. data/lib/puppet/daemon.rb +13 -27
  25. data/lib/puppet/defaults.rb +92 -12
  26. data/lib/puppet/environments.rb +4 -5
  27. data/lib/puppet/face/facts.rb +1 -1
  28. data/lib/puppet/face/help.rb +29 -3
  29. data/lib/puppet/face/module/search.rb +5 -0
  30. data/lib/puppet/face/plugin.rb +2 -2
  31. data/lib/puppet/feature/base.rb +1 -1
  32. data/lib/puppet/file_serving/http_metadata.rb +14 -2
  33. data/lib/puppet/file_serving/metadata.rb +4 -1
  34. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  35. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  36. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  37. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  38. data/lib/puppet/file_system/file_impl.rb +17 -13
  39. data/lib/puppet/file_system/uniquefile.rb +12 -16
  40. data/lib/puppet/forge.rb +1 -1
  41. data/lib/puppet/forge/cache.rb +1 -1
  42. data/lib/puppet/forge/repository.rb +4 -7
  43. data/lib/puppet/functions/call.rb +1 -1
  44. data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
  45. data/lib/puppet/functions/filter.rb +1 -0
  46. data/lib/puppet/functions/lstrip.rb +4 -4
  47. data/lib/puppet/functions/reduce.rb +2 -4
  48. data/lib/puppet/functions/reverse_each.rb +1 -1
  49. data/lib/puppet/functions/rstrip.rb +4 -4
  50. data/lib/puppet/functions/step.rb +1 -1
  51. data/lib/puppet/functions/strip.rb +4 -4
  52. data/lib/puppet/gettext/config.rb +5 -5
  53. data/lib/puppet/gettext/module_translations.rb +4 -4
  54. data/lib/puppet/http.rb +3 -0
  55. data/lib/puppet/http/client.rb +263 -73
  56. data/lib/puppet/http/external_client.rb +90 -0
  57. data/lib/puppet/http/redirector.rb +43 -7
  58. data/lib/puppet/http/resolver.rb +46 -3
  59. data/lib/puppet/http/resolver/server_list.rb +76 -16
  60. data/lib/puppet/http/resolver/settings.rb +23 -3
  61. data/lib/puppet/http/resolver/srv.rb +29 -3
  62. data/lib/puppet/http/response.rb +87 -1
  63. data/lib/puppet/http/retry_after_handler.rb +39 -0
  64. data/lib/puppet/http/service.rb +97 -12
  65. data/lib/puppet/http/service/ca.rb +76 -14
  66. data/lib/puppet/http/service/compiler.rb +249 -16
  67. data/lib/puppet/http/service/file_server.rb +141 -20
  68. data/lib/puppet/http/service/report.rb +47 -17
  69. data/lib/puppet/http/session.rb +96 -7
  70. data/lib/puppet/indirector.rb +1 -1
  71. data/lib/puppet/indirector/catalog/rest.rb +34 -0
  72. data/lib/puppet/indirector/exec.rb +1 -1
  73. data/lib/puppet/indirector/facts/facter.rb +3 -3
  74. data/lib/puppet/indirector/facts/rest.rb +42 -0
  75. data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
  76. data/lib/puppet/indirector/file_content/http.rb +5 -0
  77. data/lib/puppet/indirector/file_content/rest.rb +30 -0
  78. data/lib/puppet/indirector/file_metadata/http.rb +28 -8
  79. data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
  80. data/lib/puppet/indirector/hiera.rb +4 -0
  81. data/lib/puppet/indirector/indirection.rb +1 -1
  82. data/lib/puppet/indirector/node/rest.rb +24 -0
  83. data/lib/puppet/indirector/report/processor.rb +2 -2
  84. data/lib/puppet/indirector/report/rest.rb +19 -0
  85. data/lib/puppet/indirector/report/yaml.rb +23 -0
  86. data/lib/puppet/indirector/request.rb +1 -1
  87. data/lib/puppet/indirector/rest.rb +12 -0
  88. data/lib/puppet/indirector/status/rest.rb +18 -0
  89. data/lib/puppet/loaders.rb +6 -0
  90. data/lib/puppet/metatype/manager.rb +80 -80
  91. data/lib/puppet/module.rb +1 -2
  92. data/lib/puppet/network/format_support.rb +2 -2
  93. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  94. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  95. data/lib/puppet/network/http/base_pool.rb +7 -2
  96. data/lib/puppet/network/http/compression.rb +7 -0
  97. data/lib/puppet/network/http/connection.rb +2 -0
  98. data/lib/puppet/network/http/connection_adapter.rb +184 -0
  99. data/lib/puppet/network/http/nocache_pool.rb +1 -0
  100. data/lib/puppet/network/http/pool.rb +8 -5
  101. data/lib/puppet/network/http/route.rb +2 -2
  102. data/lib/puppet/network/http_pool.rb +2 -1
  103. data/lib/puppet/node/environment.rb +22 -5
  104. data/lib/puppet/pal/catalog_compiler.rb +5 -0
  105. data/lib/puppet/pal/pal_impl.rb +30 -31
  106. data/lib/puppet/parameter.rb +1 -1
  107. data/lib/puppet/parser/ast/leaf.rb +5 -5
  108. data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
  109. data/lib/puppet/parser/compiler.rb +43 -33
  110. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  111. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  112. data/lib/puppet/parser/environment_compiler.rb +4 -1
  113. data/lib/puppet/parser/functions.rb +18 -9
  114. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  115. data/lib/puppet/parser/functions/filter.rb +1 -0
  116. data/lib/puppet/parser/resource.rb +3 -2
  117. data/lib/puppet/parser/resource/param.rb +6 -0
  118. data/lib/puppet/parser/type_loader.rb +2 -2
  119. data/lib/puppet/pops/adaptable.rb +7 -13
  120. data/lib/puppet/pops/adapters.rb +8 -4
  121. data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -5
  122. data/lib/puppet/pops/issues.rb +5 -0
  123. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  124. data/lib/puppet/pops/loaders.rb +24 -15
  125. data/lib/puppet/pops/lookup/context.rb +1 -1
  126. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  127. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  128. data/lib/puppet/pops/types/iterable.rb +34 -8
  129. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  130. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  131. data/lib/puppet/provider/file/windows.rb +1 -1
  132. data/lib/puppet/provider/group/groupadd.rb +9 -4
  133. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  134. data/lib/puppet/provider/package/aix.rb +17 -2
  135. data/lib/puppet/provider/package/apt.rb +98 -1
  136. data/lib/puppet/provider/package/aptitude.rb +1 -1
  137. data/lib/puppet/provider/package/dnfmodule.rb +61 -14
  138. data/lib/puppet/provider/package/gem.rb +45 -9
  139. data/lib/puppet/provider/package/pacman.rb +2 -5
  140. data/lib/puppet/provider/package/pip.rb +143 -48
  141. data/lib/puppet/provider/package/pip3.rb +0 -2
  142. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  143. data/lib/puppet/provider/package/pkgng.rb +16 -4
  144. data/lib/puppet/provider/package/portage.rb +2 -2
  145. data/lib/puppet/provider/package/puppet_gem.rb +11 -2
  146. data/lib/puppet/provider/package/rpm.rb +6 -213
  147. data/lib/puppet/provider/package/yum.rb +100 -20
  148. data/lib/puppet/provider/package/zypper.rb +62 -1
  149. data/lib/puppet/provider/service/systemd.rb +22 -4
  150. data/lib/puppet/provider/service/windows.rb +23 -7
  151. data/lib/puppet/provider/user/aix.rb +1 -1
  152. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  153. data/lib/puppet/provider/user/useradd.rb +16 -5
  154. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  155. data/lib/puppet/reports/http.rb +15 -9
  156. data/lib/puppet/resource.rb +2 -1
  157. data/lib/puppet/resource/type.rb +8 -0
  158. data/lib/puppet/resource/type_collection.rb +20 -16
  159. data/lib/puppet/runtime.rb +31 -1
  160. data/lib/puppet/settings.rb +3 -1
  161. data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
  162. data/lib/puppet/ssl.rb +1 -0
  163. data/lib/puppet/ssl/host.rb +4 -4
  164. data/lib/puppet/ssl/oids.rb +1 -0
  165. data/lib/puppet/ssl/ssl_context.rb +2 -2
  166. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  167. data/lib/puppet/ssl/state_machine.rb +81 -35
  168. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  169. data/lib/puppet/ssl/verifier_adapter.rb +9 -1
  170. data/lib/puppet/test/test_helper.rb +21 -14
  171. data/lib/puppet/transaction.rb +2 -2
  172. data/lib/puppet/transaction/persistence.rb +1 -1
  173. data/lib/puppet/transaction/report.rb +3 -3
  174. data/lib/puppet/trusted_external.rb +29 -1
  175. data/lib/puppet/type.rb +21 -8
  176. data/lib/puppet/type/file.rb +51 -13
  177. data/lib/puppet/type/file/checksum.rb +4 -4
  178. data/lib/puppet/type/file/source.rb +75 -64
  179. data/lib/puppet/type/notify.rb +2 -2
  180. data/lib/puppet/type/package.rb +41 -3
  181. data/lib/puppet/type/service.rb +59 -8
  182. data/lib/puppet/type/user.rb +19 -29
  183. data/lib/puppet/util.rb +41 -3
  184. data/lib/puppet/util/at_fork.rb +1 -1
  185. data/lib/puppet/util/autoload.rb +13 -25
  186. data/lib/puppet/util/character_encoding.rb +9 -5
  187. data/lib/puppet/util/checksums.rb +19 -4
  188. data/lib/puppet/util/execution.rb +2 -2
  189. data/lib/puppet/util/fileparsing.rb +2 -2
  190. data/lib/puppet/util/instance_loader.rb +14 -10
  191. data/lib/puppet/util/log/destinations.rb +1 -10
  192. data/lib/puppet/util/package/version/debian.rb +175 -0
  193. data/lib/puppet/util/package/version/gem.rb +15 -0
  194. data/lib/puppet/util/package/version/pip.rb +167 -0
  195. data/lib/puppet/util/package/version/range.rb +53 -0
  196. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  197. data/lib/puppet/util/package/version/range/gt.rb +14 -0
  198. data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
  199. data/lib/puppet/util/package/version/range/lt.rb +14 -0
  200. data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
  201. data/lib/puppet/util/package/version/range/min_max.rb +21 -0
  202. data/lib/puppet/util/package/version/range/simple.rb +11 -0
  203. data/lib/puppet/util/package/version/rpm.rb +73 -0
  204. data/lib/puppet/util/pidlock.rb +13 -7
  205. data/lib/puppet/util/platform.rb +5 -0
  206. data/lib/puppet/util/provider_features.rb +1 -1
  207. data/lib/puppet/util/reference.rb +1 -1
  208. data/lib/puppet/util/rpm_compare.rb +193 -0
  209. data/lib/puppet/util/windows.rb +1 -0
  210. data/lib/puppet/util/windows/adsi.rb +2 -2
  211. data/lib/puppet/util/windows/api_types.rb +60 -33
  212. data/lib/puppet/util/windows/eventlog.rb +1 -6
  213. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  214. data/lib/puppet/util/windows/principal.rb +8 -6
  215. data/lib/puppet/util/windows/process.rb +15 -14
  216. data/lib/puppet/util/windows/registry.rb +11 -11
  217. data/lib/puppet/util/windows/security.rb +5 -4
  218. data/lib/puppet/util/windows/service.rb +43 -26
  219. data/lib/puppet/util/windows/sid.rb +3 -3
  220. data/lib/puppet/util/windows/user.rb +242 -8
  221. data/lib/puppet/version.rb +1 -1
  222. data/locales/puppet.pot +641 -511
  223. data/man/man5/puppet.conf.5 +75 -10
  224. data/man/man8/puppet-agent.8 +7 -7
  225. data/man/man8/puppet-apply.8 +1 -1
  226. data/man/man8/puppet-catalog.8 +1 -1
  227. data/man/man8/puppet-config.8 +1 -1
  228. data/man/man8/puppet-describe.8 +1 -1
  229. data/man/man8/puppet-device.8 +2 -2
  230. data/man/man8/puppet-doc.8 +1 -1
  231. data/man/man8/puppet-epp.8 +1 -1
  232. data/man/man8/puppet-facts.8 +1 -1
  233. data/man/man8/puppet-filebucket.8 +17 -2
  234. data/man/man8/puppet-generate.8 +1 -1
  235. data/man/man8/puppet-help.8 +6 -3
  236. data/man/man8/puppet-key.8 +1 -1
  237. data/man/man8/puppet-lookup.8 +2 -2
  238. data/man/man8/puppet-man.8 +1 -1
  239. data/man/man8/puppet-module.8 +4 -1
  240. data/man/man8/puppet-node.8 +1 -1
  241. data/man/man8/puppet-parser.8 +1 -1
  242. data/man/man8/puppet-plugin.8 +1 -1
  243. data/man/man8/puppet-report.8 +1 -1
  244. data/man/man8/puppet-resource.8 +1 -1
  245. data/man/man8/puppet-script.8 +1 -1
  246. data/man/man8/puppet-ssl.8 +2 -2
  247. data/man/man8/puppet-status.8 +1 -1
  248. data/man/man8/puppet.8 +2 -2
  249. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  250. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  251. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
  252. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
  253. data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
  254. data/spec/fixtures/ssl/unknown-ca.pem +59 -0
  255. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  256. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  257. data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
  258. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  259. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  260. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  261. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  262. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +1 -67
  263. 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 +1 -69
  264. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -69
  265. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -67
  266. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -65
  267. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -67
  268. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +1 -67
  269. data/spec/integration/application/agent_spec.rb +475 -0
  270. data/spec/integration/application/apply_spec.rb +279 -150
  271. data/spec/integration/application/config_spec.rb +74 -0
  272. data/spec/integration/application/doc_spec.rb +16 -6
  273. data/spec/integration/application/filebucket_spec.rb +239 -0
  274. data/spec/integration/application/help_spec.rb +42 -0
  275. data/spec/integration/application/lookup_spec.rb +13 -0
  276. data/spec/integration/application/module_spec.rb +68 -0
  277. data/spec/integration/application/plugin_spec.rb +123 -0
  278. data/spec/integration/data_binding_spec.rb +82 -0
  279. data/spec/integration/defaults_spec.rb +1 -2
  280. data/spec/integration/directory_environments_spec.rb +17 -17
  281. data/spec/integration/http/client_spec.rb +47 -37
  282. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  283. data/spec/integration/indirector/report/yaml.rb +83 -0
  284. data/spec/integration/network/http_pool_spec.rb +93 -20
  285. data/spec/integration/node/environment_spec.rb +15 -0
  286. data/spec/integration/parser/compiler_spec.rb +11 -0
  287. data/spec/integration/type/file_spec.rb +1 -1
  288. data/spec/integration/util/execution_spec.rb +22 -0
  289. data/spec/integration/util/windows/adsi_spec.rb +6 -1
  290. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  291. data/spec/integration/util/windows/process_spec.rb +26 -32
  292. data/spec/integration/util/windows/registry_spec.rb +7 -7
  293. data/spec/integration/util/windows/user_spec.rb +47 -5
  294. data/spec/integration/util_spec.rb +7 -33
  295. data/spec/lib/puppet/test_ca.rb +2 -2
  296. data/spec/lib/puppet_spec/https.rb +16 -7
  297. data/spec/lib/puppet_spec/matchers.rb +0 -80
  298. data/spec/lib/puppet_spec/puppetserver.rb +127 -0
  299. data/spec/shared_contexts/https.rb +29 -0
  300. data/spec/unit/agent_spec.rb +80 -26
  301. data/spec/unit/application/agent_spec.rb +12 -9
  302. data/spec/unit/application/describe_spec.rb +88 -50
  303. data/spec/unit/application/device_spec.rb +2 -2
  304. data/spec/unit/application/face_base_spec.rb +6 -4
  305. data/spec/unit/application/facts_spec.rb +39 -10
  306. data/spec/unit/application/filebucket_spec.rb +22 -2
  307. data/spec/unit/application/man_spec.rb +52 -0
  308. data/spec/unit/application/resource_spec.rb +3 -1
  309. data/spec/unit/application/ssl_spec.rb +15 -2
  310. data/spec/unit/configurer/downloader_spec.rb +10 -0
  311. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  312. data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
  313. data/spec/unit/configurer_spec.rb +64 -46
  314. data/spec/unit/confine_spec.rb +2 -1
  315. data/spec/unit/context/trusted_information_spec.rb +25 -2
  316. data/spec/unit/daemon_spec.rb +5 -64
  317. data/spec/unit/defaults_spec.rb +24 -1
  318. data/spec/unit/environments_spec.rb +8 -0
  319. data/spec/unit/face/config_spec.rb +3 -1
  320. data/spec/unit/face/module/search_spec.rb +17 -0
  321. data/spec/unit/face/plugin_spec.rb +12 -10
  322. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  323. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  324. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  325. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  326. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  327. data/spec/unit/file_system/uniquefile_spec.rb +29 -0
  328. data/spec/unit/file_system_spec.rb +10 -0
  329. data/spec/unit/functions/lookup_spec.rb +13 -0
  330. data/spec/unit/http/client_spec.rb +321 -36
  331. data/spec/unit/http/external_client_spec.rb +201 -0
  332. data/spec/unit/http/resolver_spec.rb +34 -3
  333. data/spec/unit/http/response_spec.rb +75 -0
  334. data/spec/unit/http/service/ca_spec.rb +53 -12
  335. data/spec/unit/http/service/compiler_spec.rb +332 -28
  336. data/spec/unit/http/service/file_server_spec.rb +100 -12
  337. data/spec/unit/http/service/report_spec.rb +19 -9
  338. data/spec/unit/http/service_spec.rb +94 -6
  339. data/spec/unit/http/session_spec.rb +159 -8
  340. data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
  341. data/spec/unit/indirector/catalog/rest_spec.rb +59 -2
  342. data/spec/unit/indirector/facts/rest_spec.rb +79 -24
  343. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
  344. data/spec/unit/indirector/file_content/rest_spec.rb +53 -2
  345. data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
  346. data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -2
  347. data/spec/unit/indirector/node/rest_spec.rb +57 -2
  348. data/spec/unit/indirector/report/rest_spec.rb +58 -51
  349. data/spec/unit/indirector/request_spec.rb +1 -1
  350. data/spec/unit/indirector/resource/ral_spec.rb +7 -8
  351. data/spec/unit/indirector/rest_spec.rb +13 -0
  352. data/spec/unit/indirector/status/rest_spec.rb +43 -2
  353. data/spec/unit/interface_spec.rb +3 -3
  354. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  355. data/spec/unit/network/format_support_spec.rb +3 -2
  356. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  357. data/spec/unit/network/http/connection_spec.rb +552 -190
  358. data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
  359. data/spec/unit/network/http/pool_spec.rb +59 -13
  360. data/spec/unit/network/http_pool_spec.rb +63 -57
  361. data/spec/unit/network/http_spec.rb +1 -1
  362. data/spec/unit/node/environment_spec.rb +33 -0
  363. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  364. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  365. data/spec/unit/parser/scope_spec.rb +1 -1
  366. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  367. data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
  368. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  369. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  370. data/spec/unit/provider/group/groupadd_spec.rb +22 -8
  371. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  372. data/spec/unit/provider/package/aix_spec.rb +29 -0
  373. data/spec/unit/provider/package/apt_spec.rb +107 -0
  374. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  375. data/spec/unit/provider/package/dnfmodule_spec.rb +54 -15
  376. data/spec/unit/provider/package/gem_spec.rb +40 -0
  377. data/spec/unit/provider/package/pacman_spec.rb +6 -21
  378. data/spec/unit/provider/package/pip_spec.rb +68 -19
  379. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  380. data/spec/unit/provider/package/pkgng_spec.rb +38 -0
  381. data/spec/unit/provider/package/portage_spec.rb +5 -0
  382. data/spec/unit/provider/package/puppet_gem_spec.rb +12 -1
  383. data/spec/unit/provider/package/rpm_spec.rb +0 -212
  384. data/spec/unit/provider/package/yum_spec.rb +243 -1
  385. data/spec/unit/provider/package/zypper_spec.rb +98 -0
  386. data/spec/unit/provider/service/init_spec.rb +42 -0
  387. data/spec/unit/provider/service/openbsd_spec.rb +9 -0
  388. data/spec/unit/provider/service/openwrt_spec.rb +1 -0
  389. data/spec/unit/provider/service/redhat_spec.rb +9 -0
  390. data/spec/unit/provider/service/systemd_spec.rb +93 -18
  391. data/spec/unit/provider/service/windows_spec.rb +50 -14
  392. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  393. data/spec/unit/provider/user/useradd_spec.rb +30 -16
  394. data/spec/unit/provider/user/windows_adsi_spec.rb +85 -3
  395. data/spec/unit/puppet_pal_2pec.rb +11 -0
  396. data/spec/unit/puppet_pal_catalog_spec.rb +43 -0
  397. data/spec/unit/puppet_spec.rb +33 -0
  398. data/spec/unit/reports/http_spec.rb +70 -52
  399. data/spec/unit/reports/store_spec.rb +17 -13
  400. data/spec/unit/resource_spec.rb +3 -3
  401. data/spec/unit/settings/autosign_setting_spec.rb +1 -1
  402. data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
  403. data/spec/unit/ssl/host_spec.rb +4 -2
  404. data/spec/unit/ssl/oids_spec.rb +1 -0
  405. data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
  406. data/spec/unit/ssl/state_machine_spec.rb +99 -13
  407. data/spec/unit/test/test_helper_spec.rb +17 -0
  408. data/spec/unit/transaction/persistence_spec.rb +15 -0
  409. data/spec/unit/transaction/report_spec.rb +5 -1
  410. data/spec/unit/transaction_spec.rb +0 -2
  411. data/spec/unit/type/file/ensure_spec.rb +1 -2
  412. data/spec/unit/type/file/source_spec.rb +89 -38
  413. data/spec/unit/type/file_spec.rb +122 -96
  414. data/spec/unit/type/service_spec.rb +218 -8
  415. data/spec/unit/type/user_spec.rb +32 -3
  416. data/spec/unit/type_spec.rb +50 -0
  417. data/spec/unit/util/at_fork_spec.rb +3 -2
  418. data/spec/unit/util/autoload_spec.rb +2 -1
  419. data/spec/unit/util/character_encoding_spec.rb +4 -4
  420. data/spec/unit/util/checksums_spec.rb +16 -0
  421. data/spec/unit/util/command_line_spec.rb +11 -6
  422. data/spec/unit/util/log/destinations_spec.rb +1 -29
  423. data/spec/unit/util/package/version/debian_spec.rb +83 -0
  424. data/spec/unit/util/package/version/pip_spec.rb +464 -0
  425. data/spec/unit/util/package/version/range_spec.rb +175 -0
  426. data/spec/unit/util/package/version/rpm_spec.rb +121 -0
  427. data/spec/unit/util/pidlock_spec.rb +102 -54
  428. data/spec/unit/util/rpm_compare_spec.rb +196 -0
  429. data/spec/unit/util/windows/adsi_spec.rb +4 -4
  430. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  431. data/spec/unit/util/windows/service_spec.rb +4 -4
  432. data/spec/unit/util/windows/sid_spec.rb +2 -2
  433. data/spec/unit/util_spec.rb +3 -3
  434. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  435. data/tasks/generate_cert_fixtures.rake +15 -1
  436. data/tasks/manpages.rake +5 -35
  437. metadata +84 -52
  438. data/COMMITTERS.md +0 -244
  439. data/spec/integration/faces/config_spec.rb +0 -91
  440. data/spec/integration/faces/documentation_spec.rb +0 -57
  441. data/spec/integration/faces/plugin_spec.rb +0 -61
  442. data/spec/integration/file_bucket/file_spec.rb +0 -50
  443. data/spec/integration/file_serving/content_spec.rb +0 -7
  444. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  445. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  446. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  447. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  448. data/spec/integration/module_tool/forge_spec.rb +0 -64
  449. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  450. data/spec/integration/provider/service/init_spec.rb +0 -48
  451. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  452. data/spec/integration/provider/service/windows_spec.rb +0 -50
  453. data/spec/integration/reference/providers_spec.rb +0 -21
  454. data/spec/integration/reports_spec.rb +0 -13
  455. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  456. data/spec/integration/ssl/host_spec.rb +0 -72
  457. data/spec/integration/ssl/key_spec.rb +0 -99
  458. data/spec/integration/test/test_helper_spec.rb +0 -31
  459. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  460. data/spec/unit/face/man_spec.rb +0 -25
  461. data/spec/unit/man_spec.rb +0 -31
@@ -1,6 +1,7 @@
1
1
  require 'puppet/util/autoload'
2
2
  require 'puppet/parser/scope'
3
3
  require 'puppet/pops/adaptable'
4
+ require 'puppet/concurrent/lock'
4
5
 
5
6
  # A module for managing parser functions. Each specified function
6
7
  # is added to a central module that then gets included into the Scope
@@ -76,15 +77,10 @@ module Puppet::Parser::Functions
76
77
  # @api private
77
78
  class AnonymousModuleAdapter < Puppet::Pops::Adaptable::Adapter
78
79
  attr_accessor :module
79
- end
80
80
 
81
- # Get the module that functions are mixed into corresponding to an
82
- # environment
83
- #
84
- # @api private
85
- def self.environment_module(env)
86
- AnonymousModuleAdapter.adapt(env) do |a|
87
- a.module ||= Module.new do
81
+ def self.create_adapter(env)
82
+ adapter = super(env)
83
+ adapter.module = Module.new do
88
84
  @metadata = {}
89
85
 
90
86
  def self.all_function_info
@@ -99,7 +95,20 @@ module Puppet::Parser::Functions
99
95
  @metadata[name] = info
100
96
  end
101
97
  end
102
- end.module
98
+ adapter
99
+ end
100
+ end
101
+
102
+ @environment_module_lock = Puppet::Concurrent::Lock.new
103
+
104
+ # Get the module that functions are mixed into corresponding to an
105
+ # environment
106
+ #
107
+ # @api private
108
+ def self.environment_module(env)
109
+ @environment_module_lock.synchronize do
110
+ AnonymousModuleAdapter.adapt(env).module
111
+ end
103
112
  end
104
113
 
105
114
  # Create a new Puppet DSL function.
@@ -1,5 +1,9 @@
1
1
  Puppet::Parser::Functions::newfunction(:create_resources, :arity => -3, :doc => <<-'ENDHEREDOC') do |args|
2
2
  Converts a hash into a set of resources and adds them to the catalog.
3
+
4
+ **Note**: Use this function selectively. It's generally better to write resources in
5
+ [Puppet](https://puppet.com/docs/puppet/latest/lang_resources.html), as
6
+ resources created with `create_resource` are difficult to read and troubleshoot.
3
7
 
4
8
  This function takes two mandatory arguments: a resource type, and a hash describing
5
9
  a set of resources. The hash should be in the form `{title => {parameters} }`:
@@ -33,7 +37,7 @@ Puppet::Parser::Functions::newfunction(:create_resources, :arity => -3, :doc =>
33
37
  as native resources.
34
38
 
35
39
  Virtual and Exported resources may be created by prefixing the type name
36
- with @ or @@ respectively. For example, the $myusers hash may be exported
40
+ with @ or @@ respectively. For example, the $myusers hash may be exported
37
41
  in the following manner:
38
42
 
39
43
  create_resources("@@user", $myusers)
@@ -42,9 +46,9 @@ Puppet::Parser::Functions::newfunction(:create_resources, :arity => -3, :doc =>
42
46
 
43
47
  create_resources("@user", $myusers)
44
48
 
45
- Note that `create_resources` will filter out parameter values that are `undef` so that normal
46
- data binding and puppet default value expressions are considered (in that order) for the
47
- final value of a parameter (just as when setting a parameter to `undef` in a puppet language
49
+ Note that `create_resources` filters out parameter values that are `undef` so that normal
50
+ data binding and Puppet default value expressions are considered (in that order) for the
51
+ final value of a parameter (just as when setting a parameter to `undef` in a Puppet language
48
52
  resource declaration).
49
53
  ENDHEREDOC
50
54
  if Puppet[:tasks]
@@ -63,9 +67,9 @@ Puppet::Parser::Functions::newfunction(:create_resources, :arity => -3, :doc =>
63
67
  defaults ||= {}
64
68
  type_name = type.sub(/^@{1,2}/, '').downcase
65
69
 
66
- # Get file/line information from the puppet stack (where call comes from in puppet source)
67
- # If relayed via other puppet functions in ruby that do not nest their calls, the source position
68
- # will be in the original puppet source.
70
+ # Get file/line information from the Puppet stack (where call comes from in Puppet source)
71
+ # If relayed via other Puppet functions in ruby that do not nest their calls, the source position
72
+ # will be in the original Puppet source.
69
73
  #
70
74
  file, line = Puppet::Pops::PuppetStack.top_of_stack
71
75
 
@@ -43,6 +43,7 @@ as an array in the form `[key, value]` and returns a hash containing the results
43
43
  $data = { "orange" => 0, "blueberry" => 1, "raspberry" => 2 }
44
44
  $filtered_data = $data.filter |$items| { $items[0] =~ /berry$/ }
45
45
  # $filtered_data = {blueberry => 1, raspberry => 2}
46
+ ~~~
46
47
 
47
48
  When the first argument is an array and the lambda has two parameters, Puppet passes the
48
49
  array's indexes (enumerated from 0) in the first parameter and its values in the second
@@ -338,10 +338,11 @@ class Puppet::Parser::Resource < Puppet::Resource
338
338
  end
339
339
 
340
340
  def replace_sensitive_data
341
- parameters.each_pair do |name, param|
341
+ parameters.keys.each do |name|
342
+ param = parameters[name]
342
343
  if param.value.is_a?(Puppet::Pops::Types::PSensitiveType::Sensitive)
343
344
  @sensitive_parameters << name
344
- param.value = param.value.unwrap
345
+ parameters[name] = Puppet::Parser::Resource::Param.from_param(param, param.value.unwrap)
345
346
  end
346
347
  end
347
348
  end
@@ -26,4 +26,10 @@ class Puppet::Parser::Resource::Param
26
26
  def to_s
27
27
  "#{self.name} => #{self.value}"
28
28
  end
29
+
30
+ def self.from_param(param, value)
31
+ new_param = param.dup
32
+ new_param.value = value
33
+ return new_param
34
+ end
29
35
  end
@@ -81,7 +81,7 @@ class Puppet::Parser::TypeLoader
81
81
  end
82
82
 
83
83
  def parse_file(file)
84
- Puppet.debug("importing '#{file}' in environment #{environment}")
84
+ Puppet.debug { "importing '#{file}' in environment #{environment}" }
85
85
  parser = Puppet::Parser::ParserFactory.parser
86
86
  parser.file = file
87
87
  return parser.parse
@@ -118,7 +118,7 @@ class Puppet::Parser::TypeLoader
118
118
  # still be parsed. Mark this file as loaded so that
119
119
  # it would not be parsed next time (handle it as if
120
120
  # it was successfully parsed).
121
- Puppet.debug("Unable to parse '#{file}': #{e.message}")
121
+ Puppet.debug { "Unable to parse '#{file}': #{e.message}" }
122
122
  end
123
123
  else
124
124
  loaded_asts << parse_file(file)
@@ -69,11 +69,7 @@ module Adaptable
69
69
  #
70
70
  def self.get(o)
71
71
  attr_name = self_attr_name
72
- if o.instance_variable_defined?(attr_name)
73
- o.instance_variable_get(attr_name)
74
- else
75
- nil
76
- end
72
+ o.instance_variable_get(attr_name)
77
73
  end
78
74
 
79
75
  # Returns an existing adapter for the given object, or creates a new adapter if the
@@ -94,14 +90,13 @@ module Adaptable
94
90
  #
95
91
  def self.adapt(o, &block)
96
92
  attr_name = self_attr_name
97
- value = o.instance_variable_get(attr_name) if o.instance_variable_defined?(attr_name)
93
+ value = o.instance_variable_get(attr_name)
98
94
  adapter = value || associate_adapter(create_adapter(o), o)
99
95
  if block_given?
100
- case block.arity
101
- when 1
102
- block.call(adapter)
103
- else
104
- block.call(adapter, o)
96
+ if block.arity == 1
97
+ block.call(adapter)
98
+ else
99
+ block.call(adapter, o)
105
100
  end
106
101
  end
107
102
  adapter
@@ -127,8 +122,7 @@ module Adaptable
127
122
  def self.adapt_new(o, &block)
128
123
  adapter = associate_adapter(create_adapter(o), o)
129
124
  if block_given?
130
- case block.arity
131
- when 1
125
+ if block.arity == 1
132
126
  block.call(adapter)
133
127
  else
134
128
  block.call(adapter, o)
@@ -99,6 +99,13 @@ module Adapters
99
99
 
100
100
  class PathsAndNameCacheAdapter < Puppet::Pops::Adaptable::Adapter
101
101
  attr_accessor :cache, :paths
102
+
103
+ def self.create_adapter(env)
104
+ adapter = super(env)
105
+ adapter.paths = env.modulepath.map { |p| Pathname.new(p) }
106
+ adapter.cache = {}
107
+ adapter
108
+ end
102
109
  end
103
110
 
104
111
  # Attempts to find the module that `instance` originates from by looking at it's {SourcePosAdapter} and
@@ -117,10 +124,7 @@ module Adapters
117
124
  def self.loader_name_by_source(environment, instance, file)
118
125
  file = instance.file if file.nil?
119
126
  return nil if file.nil? || EMPTY_STRING == file
120
- pn_adapter = PathsAndNameCacheAdapter.adapt(environment) do |a|
121
- a.paths ||= environment.modulepath.map { |p| Pathname.new(p) }
122
- a.cache ||= {}
123
- end
127
+ pn_adapter = PathsAndNameCacheAdapter.adapt(environment)
124
128
  dir = File.dirname(file)
125
129
  pn_adapter.cache.fetch(dir) do |key|
126
130
  mod = find_module_for_dir(environment, pn_adapter.paths, dir)
@@ -876,11 +876,11 @@ class EvaluatorImpl
876
876
  def eval_ApplyExpression(o, scope)
877
877
  # All expressions are wrapped in an ApplyBlockExpression so we can identify the contents of
878
878
  # that block. However we don't want to serialize the block expression, so unwrap here.
879
- body = if o.body.statements.count > 1
880
- Model::BlockExpression.from_asserted_hash(o.body._pcore_init_hash)
881
- else
882
- o.body.statements[0]
883
- end
879
+ body = if o.body.statements.count == 1
880
+ o.body.statements[0]
881
+ else
882
+ Model::BlockExpression.from_asserted_hash(o.body._pcore_init_hash)
883
+ end
884
884
 
885
885
  Puppet.lookup(:apply_executor).apply(unfold([], o.arguments, scope), body, scope)
886
886
  end
@@ -920,5 +920,10 @@ module Issues
920
920
  LOADER_FAILURE = issue :LOADER_FAILURE, :type do
921
921
  _('Failed to load: %{type_name}') % { type: type }
922
922
  end
923
+
924
+ DEPRECATED_APP_ORCHESTRATION = issue :DEPRECATED_APP_ORCHESTRATION, :klass do
925
+ _("Use of the application-orchestration %{expr} is deprecated. See https://puppet.com/docs/puppet/5.5/deprecated_language.html" % { expr: label(klass) })
926
+ end
927
+
923
928
  end
924
929
  end
@@ -7,10 +7,12 @@ module Loader
7
7
  #
8
8
  # @api private
9
9
  class Runtime3TypeLoader < BaseLoader
10
- def initialize(parent_loader, loaders, environment, env_path)
10
+ attr_reader :resource_3x_loader
11
+
12
+ def initialize(parent_loader, loaders, environment, resource_3x_loader)
11
13
  super(parent_loader, environment.name)
12
14
  @environment = environment
13
- @resource_3x_loader = env_path.nil? ? nil : ModuleLoaders.pcore_resource_type_loader_from(parent_loader, loaders, env_path)
15
+ @resource_3x_loader = resource_3x_loader
14
16
  end
15
17
 
16
18
  def discover(type, error_collector = nil, name_authority = Pcore::RUNTIME_NAME_AUTHORITY, &block)
@@ -18,16 +18,18 @@ class Loaders
18
18
  attr_reader :private_environment_loader
19
19
  attr_reader :environment
20
20
 
21
- def self.new(environment, for_agent = false)
22
- obj = environment.loaders
23
- if obj.nil?
24
- obj = self.allocate
25
- obj.send(:initialize, environment, for_agent)
21
+ def self.new(environment, for_agent = false, load_from_pcore = true)
22
+ environment.lock.synchronize do
23
+ obj = environment.loaders
24
+ if obj.nil?
25
+ obj = self.allocate
26
+ obj.send(:initialize, environment, for_agent, load_from_pcore)
27
+ end
28
+ obj
26
29
  end
27
- obj
28
30
  end
29
31
 
30
- def initialize(environment, for_agent)
32
+ def initialize(environment, for_agent, load_from_pcore = true)
31
33
  # Protect against environment havoc
32
34
  raise ArgumentError.new(_("Attempt to redefine already initialized loaders for environment")) unless environment.loaders.nil?
33
35
  environment.loaders = self
@@ -49,12 +51,13 @@ class Loaders
49
51
  # TODO: loaders need to work when also running in an agent doing catalog application. There is no
50
52
  # concept of environment the same way as when running as a master (except when doing apply).
51
53
  # The creation mechanisms should probably differ between the two.
52
- @private_environment_loader = if for_agent
53
- @puppet_cache_loader = create_puppet_cache_loader()
54
- create_environment_loader(environment, @puppet_cache_loader)
55
- else
56
- create_environment_loader(environment, @puppet_system_loader)
57
- end
54
+ @private_environment_loader =
55
+ if for_agent
56
+ @puppet_cache_loader = create_puppet_cache_loader
57
+ create_environment_loader(environment, @puppet_cache_loader, load_from_pcore)
58
+ else
59
+ create_environment_loader(environment, @puppet_system_loader, load_from_pcore)
60
+ end
58
61
 
59
62
  Pcore.init_env(@private_environment_loader)
60
63
 
@@ -360,7 +363,7 @@ class Loaders
360
363
  Loader::ModuleLoaders.cached_loader_from(puppet_system_loader, self)
361
364
  end
362
365
 
363
- def create_environment_loader(environment, parent_loader)
366
+ def create_environment_loader(environment, parent_loader, load_from_pcore = true)
364
367
  # This defines where to start parsing/evaluating - the "initial import" (to use 3x terminology)
365
368
  # Is either a reference to a single .pp file, or a directory of manifests. If the environment becomes
366
369
  # a module and can hold functions, types etc. then these are available across all other modules without
@@ -385,7 +388,13 @@ class Loaders
385
388
  else
386
389
  # Create the 3.x resource type loader
387
390
  static_loader.runtime_3_init
388
- @runtime3_type_loader = add_loader_by_name(Loader::Runtime3TypeLoader.new(parent_loader, self, environment, env_conf.nil? ? nil : env_path))
391
+ # Create pcore resource type loader, if applicable
392
+ pcore_resource_type_loader = if load_from_pcore && env_path
393
+ Loader::ModuleLoaders.pcore_resource_type_loader_from(parent_loader, self, env_path)
394
+ else
395
+ nil
396
+ end
397
+ @runtime3_type_loader = add_loader_by_name(Loader::Runtime3TypeLoader.new(parent_loader, self, environment, pcore_resource_type_loader))
389
398
 
390
399
  if env_path.nil?
391
400
  # Not a real directory environment, cannot work as a module TODO: Drop when legacy env are dropped?
@@ -47,7 +47,7 @@ class EnvironmentContext < Adaptable::Adapter
47
47
  file_data = @file_data_cache[path]
48
48
  stat = Puppet::FileSystem.stat(path)
49
49
  unless file_data && file_data.valid?(stat)
50
- Puppet.debug("File at '#{path}' was changed, reloading") if file_data
50
+ Puppet.debug { "File at '#{path}' was changed, reloading" } if file_data
51
51
  content = Puppet::FileSystem.read(path, :encoding => 'utf-8')
52
52
  file_data = FileData.new(path, stat.ino, stat.mtime, stat.size, block_given? ? yield(content) : content)
53
53
  @file_data_cache[path] = file_data
@@ -46,6 +46,7 @@ class HieraConfig
46
46
  KEY_DATADIR = 'datadir'.freeze
47
47
  KEY_DEFAULT_HIERARCHY = 'default_hierarchy'.freeze
48
48
  KEY_HIERARCHY = 'hierarchy'.freeze
49
+ KEY_PLAN_HIERARCHY = 'plan_hierarchy'.freeze
49
50
  KEY_LOGGER = 'logger'.freeze
50
51
  KEY_OPTIONS = 'options'.freeze
51
52
  KEY_PATH = 'path'.freeze
@@ -580,6 +581,7 @@ class HieraConfigV5 < HieraConfig
580
581
  tf.optional(KEY_OPTIONS) => tf.hash_kv(option_name_t, tf.data),
581
582
  }),
582
583
  tf.optional(KEY_HIERARCHY) => hierarchy_t,
584
+ tf.optional(KEY_PLAN_HIERARCHY) => hierarchy_t,
583
585
  tf.optional(KEY_DEFAULT_HIERARCHY) => hierarchy_t
584
586
  })
585
587
  end
@@ -600,7 +602,15 @@ class HieraConfigV5 < HieraConfig
600
602
  return data_providers
601
603
  end
602
604
 
603
- @config[use_default_hierarchy ? KEY_DEFAULT_HIERARCHY : KEY_HIERARCHY].each do |he|
605
+ compiler = Puppet.lookup(:pal_compiler) { nil }
606
+ config_key = if compiler.is_a?(Puppet::Pal::ScriptCompiler) && !@config[KEY_PLAN_HIERARCHY].nil?
607
+ KEY_PLAN_HIERARCHY
608
+ elsif use_default_hierarchy
609
+ KEY_DEFAULT_HIERARCHY
610
+ else
611
+ KEY_HIERARCHY
612
+ end
613
+ @config[config_key].each do |he|
604
614
  name = he[KEY_NAME]
605
615
  if data_providers.include?(name)
606
616
  first_line = find_line_matching(/\s+name:\s+['"]?#{name}(?:[^\w]|$)/)
@@ -691,6 +701,9 @@ class HieraConfigV5 < HieraConfig
691
701
  defaults = config[KEY_DEFAULTS]
692
702
  validate_defaults(defaults) unless defaults.nil?
693
703
  config[KEY_HIERARCHY].each { |he| validate_hierarchy(he, defaults, owner) }
704
+ if config.include?(KEY_PLAN_HIERARCHY)
705
+ config[KEY_PLAN_HIERARCHY].each { |he| validate_hierarchy(he, defaults, owner) }
706
+ end
694
707
 
695
708
  if config.include?(KEY_DEFAULT_HIERARCHY)
696
709
  unless owner.is_a?(ModuleDataProvider)
@@ -248,6 +248,8 @@ class ResourceTypeImpl
248
248
  #######################
249
249
 
250
250
  # Applications are not supported
251
+ #
252
+ # @deprecated application orchestration will be removed in puppet 7
251
253
  def application?
252
254
  false
253
255
  end
@@ -23,13 +23,16 @@ module Puppet::Pops::Types
23
23
  #
24
24
  # An `ArgumentError` is raised for all other objects.
25
25
  #
26
- # @param o [Object] The object to produce an `Iterable` for
26
+ # @param my_caller [Object] The calling object to reference in errors
27
+ # @param obj [Object] The object to produce an `Iterable` for
28
+ # @param infer_elements [Boolean] Whether or not to recursively infer all elements of obj. Optional
29
+ #
27
30
  # @return [Iterable,nil] The produced `Iterable`
28
31
  # @raise [ArgumentError] In case an `Iterable` cannot be produced
29
32
  # @api public
30
- def self.asserted_iterable(caller, obj)
31
- iter = self.on(obj)
32
- raise ArgumentError, "#{caller.class}(): wrong argument type (#{obj.class}; is not Iterable." if iter.nil?
33
+ def self.asserted_iterable(my_caller, obj, infer_elements = false)
34
+ iter = self.on(obj, nil, infer_elements)
35
+ raise ArgumentError, "#{my_caller.class}(): wrong argument type (#{obj.class}; is not Iterable." if iter.nil?
33
36
  iter
34
37
  end
35
38
 
@@ -48,11 +51,14 @@ module Puppet::Pops::Types
48
51
  # The value `nil` is returned for all other objects.
49
52
  #
50
53
  # @param o [Object] The object to produce an `Iterable` for
51
- # @param element_type [PAnyType] the element type for the iterator. Optional (inferred if not provided)
54
+ # @param element_type [PAnyType] the element type for the iterator. Optional
55
+ # @param infer_elements [Boolean] if element_type is nil, whether or not to recursively
56
+ # infer types for the entire collection. Optional
57
+ #
52
58
  # @return [Iterable,nil] The produced `Iterable` or `nil` if it couldn't be produced
53
59
  #
54
60
  # @api public
55
- def self.on(o, element_type = nil)
61
+ def self.on(o, element_type = nil, infer_elements = true)
56
62
  case o
57
63
  when IteratorProducer
58
64
  o.iterator
@@ -64,7 +70,7 @@ module Puppet::Pops::Types
64
70
  if o.empty?
65
71
  Iterator.new(PUnitType::DEFAULT, o.each)
66
72
  else
67
- if element_type.nil?
73
+ if element_type.nil? && infer_elements
68
74
  tc = TypeCalculator.singleton
69
75
  element_type = PVariantType.maybe_create(o.map {|e| tc.infer_set(e) })
70
76
  end
@@ -75,7 +81,7 @@ module Puppet::Pops::Types
75
81
  if o.empty?
76
82
  HashIterator.new(PHashType::DEFAULT_KEY_PAIR_TUPLE, o.each)
77
83
  else
78
- if element_type.nil?
84
+ if element_type.nil? && infer_elements
79
85
  tc = TypeCalculator.singleton
80
86
  element_type = PTupleType.new([
81
87
  PVariantType.maybe_create(o.keys.map {|e| tc.infer_set(e) }),
@@ -202,6 +208,26 @@ module Puppet::Pops::Types
202
208
  @enumeration.send(name, *arguments, &block)
203
209
  end
204
210
 
211
+ def next
212
+ @enumeration.next
213
+ end
214
+
215
+ def map(*args, &block)
216
+ @enumeration.map(*args, &block)
217
+ end
218
+
219
+ def reduce(*args, &block)
220
+ @enumeration.reduce(*args, &block)
221
+ end
222
+
223
+ def all?(&block)
224
+ @enumeration.all?(&block)
225
+ end
226
+
227
+ def any?(&block)
228
+ @enumeration.any?(&block)
229
+ end
230
+
205
231
  def step(step, &block)
206
232
  raise ArgumentError if step <= 0
207
233
  r = self