puppet 6.16.0-x86-mingw32 → 6.20.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 (458) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -16
  3. data/Gemfile +6 -2
  4. data/Gemfile.lock +40 -36
  5. data/README.md +3 -4
  6. data/Rakefile +4 -12
  7. data/lib/puppet/agent.rb +2 -2
  8. data/lib/puppet/agent/locker.rb +0 -7
  9. data/lib/puppet/application.rb +10 -6
  10. data/lib/puppet/application/agent.rb +23 -6
  11. data/lib/puppet/application/apply.rb +20 -21
  12. data/lib/puppet/application/device.rb +1 -0
  13. data/lib/puppet/application/doc.rb +1 -1
  14. data/lib/puppet/application/filebucket.rb +2 -2
  15. data/lib/puppet/application/lookup.rb +16 -4
  16. data/lib/puppet/application/script.rb +1 -0
  17. data/lib/puppet/application_support.rb +7 -0
  18. data/lib/puppet/configurer.rb +70 -20
  19. data/lib/puppet/configurer/downloader.rb +31 -10
  20. data/lib/puppet/confine.rb +2 -2
  21. data/lib/puppet/confine/any.rb +1 -1
  22. data/lib/puppet/defaults.rb +113 -46
  23. data/lib/puppet/environments.rb +84 -59
  24. data/lib/puppet/face/catalog.rb +1 -1
  25. data/lib/puppet/face/config.rb +56 -16
  26. data/lib/puppet/face/epp.rb +12 -2
  27. data/lib/puppet/face/facts.rb +60 -0
  28. data/lib/puppet/face/node.rb +3 -3
  29. data/lib/puppet/face/node/clean.rb +2 -2
  30. data/lib/puppet/face/status.rb +1 -1
  31. data/lib/puppet/feature/base.rb +1 -1
  32. data/lib/puppet/ffi/posix.rb +10 -0
  33. data/lib/puppet/ffi/posix/constants.rb +14 -0
  34. data/lib/puppet/ffi/posix/functions.rb +24 -0
  35. data/lib/puppet/file_bucket/dipper.rb +1 -1
  36. data/lib/puppet/file_serving/http_metadata.rb +13 -1
  37. data/lib/puppet/file_serving/metadata.rb +4 -1
  38. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  39. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  40. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  41. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  42. data/lib/puppet/file_system/file_impl.rb +4 -4
  43. data/lib/puppet/file_system/uniquefile.rb +8 -16
  44. data/lib/puppet/forge.rb +1 -1
  45. data/lib/puppet/forge/cache.rb +1 -1
  46. data/lib/puppet/forge/repository.rb +3 -7
  47. data/lib/puppet/functions/epp.rb +1 -0
  48. data/lib/puppet/functions/inline_epp.rb +1 -0
  49. data/lib/puppet/functions/lstrip.rb +4 -4
  50. data/lib/puppet/functions/new.rb +8 -3
  51. data/lib/puppet/functions/reverse_each.rb +1 -1
  52. data/lib/puppet/functions/rstrip.rb +4 -4
  53. data/lib/puppet/functions/step.rb +1 -1
  54. data/lib/puppet/functions/strip.rb +4 -4
  55. data/lib/puppet/gettext/config.rb +5 -5
  56. data/lib/puppet/gettext/module_translations.rb +4 -4
  57. data/lib/puppet/http.rb +1 -0
  58. data/lib/puppet/http/client.rb +6 -1
  59. data/lib/puppet/http/redirector.rb +9 -7
  60. data/lib/puppet/http/resolver.rb +5 -8
  61. data/lib/puppet/http/resolver/server_list.rb +18 -36
  62. data/lib/puppet/http/resolver/settings.rb +4 -4
  63. data/lib/puppet/http/resolver/srv.rb +5 -5
  64. data/lib/puppet/http/response.rb +19 -0
  65. data/lib/puppet/http/service.rb +3 -1
  66. data/lib/puppet/http/service/compiler.rb +1 -1
  67. data/lib/puppet/http/service/file_server.rb +1 -1
  68. data/lib/puppet/http/service/puppetserver.rb +39 -0
  69. data/lib/puppet/http/session.rb +5 -4
  70. data/lib/puppet/indirector.rb +1 -1
  71. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  72. data/lib/puppet/indirector/exec.rb +1 -1
  73. data/lib/puppet/indirector/fact_search.rb +60 -0
  74. data/lib/puppet/indirector/facts/facter.rb +3 -3
  75. data/lib/puppet/indirector/facts/json.rb +27 -0
  76. data/lib/puppet/indirector/facts/yaml.rb +4 -59
  77. data/lib/puppet/indirector/file_content/rest.rb +1 -1
  78. data/lib/puppet/indirector/file_metadata/http.rb +25 -5
  79. data/lib/puppet/indirector/file_metadata/rest.rb +2 -2
  80. data/lib/puppet/indirector/hiera.rb +4 -0
  81. data/lib/puppet/indirector/indirection.rb +1 -1
  82. data/lib/puppet/indirector/json.rb +5 -1
  83. data/lib/puppet/indirector/msgpack.rb +1 -1
  84. data/lib/puppet/indirector/node/json.rb +8 -0
  85. data/lib/puppet/indirector/report/json.rb +34 -0
  86. data/lib/puppet/indirector/report/processor.rb +2 -2
  87. data/lib/puppet/indirector/request.rb +5 -5
  88. data/lib/puppet/indirector/yaml.rb +1 -1
  89. data/lib/puppet/module.rb +1 -2
  90. data/lib/puppet/module_tool/applications/installer.rb +48 -2
  91. data/lib/puppet/module_tool/errors/shared.rb +17 -2
  92. data/lib/puppet/network/format_support.rb +2 -2
  93. data/lib/puppet/network/formats.rb +2 -1
  94. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  95. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  96. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  97. data/lib/puppet/network/http/connection_adapter.rb +6 -4
  98. data/lib/puppet/network/http/route.rb +2 -2
  99. data/lib/puppet/node/environment.rb +12 -5
  100. data/lib/puppet/node/facts.rb +17 -0
  101. data/lib/puppet/pal/pal_impl.rb +90 -13
  102. data/lib/puppet/parameter.rb +1 -1
  103. data/lib/puppet/parser/ast/leaf.rb +7 -6
  104. data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
  105. data/lib/puppet/parser/compiler.rb +1 -1
  106. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  107. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  108. data/lib/puppet/parser/environment_compiler.rb +4 -1
  109. data/lib/puppet/parser/functions.rb +21 -17
  110. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  111. data/lib/puppet/parser/resource.rb +3 -2
  112. data/lib/puppet/parser/resource/param.rb +6 -0
  113. data/lib/puppet/parser/templatewrapper.rb +1 -1
  114. data/lib/puppet/parser/type_loader.rb +2 -2
  115. data/lib/puppet/pops/adaptable.rb +7 -13
  116. data/lib/puppet/pops/adapters.rb +8 -4
  117. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  118. data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
  119. data/lib/puppet/pops/evaluator/evaluator_impl.rb +27 -8
  120. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  121. data/lib/puppet/pops/issues.rb +5 -0
  122. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  123. data/lib/puppet/pops/loaders.rb +18 -11
  124. data/lib/puppet/pops/lookup/context.rb +1 -1
  125. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  126. data/lib/puppet/pops/model/ast_transformer.rb +1 -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/types/p_meta_type.rb +1 -1
  130. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  131. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  132. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  133. data/lib/puppet/provider/file/windows.rb +1 -1
  134. data/lib/puppet/provider/package/apt.rb +38 -0
  135. data/lib/puppet/provider/package/aptitude.rb +1 -1
  136. data/lib/puppet/provider/package/dpkg.rb +1 -1
  137. data/lib/puppet/provider/package/gem.rb +4 -2
  138. data/lib/puppet/provider/package/pip2.rb +17 -0
  139. data/lib/puppet/provider/package/puppet_gem.rb +5 -0
  140. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  141. data/lib/puppet/provider/package/yum.rb +2 -1
  142. data/lib/puppet/provider/package/zypper.rb +3 -0
  143. data/lib/puppet/provider/service/windows.rb +23 -7
  144. data/lib/puppet/provider/user/aix.rb +3 -3
  145. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  146. data/lib/puppet/provider/user/useradd.rb +11 -4
  147. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  148. data/lib/puppet/reference/configuration.rb +6 -5
  149. data/lib/puppet/reports/http.rb +2 -0
  150. data/lib/puppet/resource.rb +2 -1
  151. data/lib/puppet/resource/type.rb +10 -1
  152. data/lib/puppet/rest/route.rb +2 -2
  153. data/lib/puppet/settings.rb +63 -21
  154. data/lib/puppet/settings/alias_setting.rb +37 -0
  155. data/lib/puppet/settings/base_setting.rb +26 -2
  156. data/lib/puppet/ssl/ssl_context.rb +2 -2
  157. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  158. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  159. data/lib/puppet/test/test_helper.rb +18 -13
  160. data/lib/puppet/transaction.rb +2 -2
  161. data/lib/puppet/transaction/persistence.rb +1 -1
  162. data/lib/puppet/transaction/report.rb +12 -8
  163. data/lib/puppet/trusted_external.rb +29 -1
  164. data/lib/puppet/type.rb +15 -7
  165. data/lib/puppet/type/file.rb +40 -15
  166. data/lib/puppet/type/file/checksum.rb +4 -4
  167. data/lib/puppet/type/file/source.rb +32 -12
  168. data/lib/puppet/type/filebucket.rb +1 -1
  169. data/lib/puppet/type/notify.rb +2 -2
  170. data/lib/puppet/type/service.rb +53 -0
  171. data/lib/puppet/type/user.rb +18 -3
  172. data/lib/puppet/util.rb +41 -3
  173. data/lib/puppet/util/autoload.rb +10 -15
  174. data/lib/puppet/util/character_encoding.rb +9 -5
  175. data/lib/puppet/util/checksums.rb +19 -4
  176. data/lib/puppet/util/connection.rb +8 -8
  177. data/lib/puppet/util/execution.rb +2 -2
  178. data/lib/puppet/util/fact_dif.rb +62 -0
  179. data/lib/puppet/util/fileparsing.rb +2 -2
  180. data/lib/puppet/util/posix.rb +54 -5
  181. data/lib/puppet/util/provider_features.rb +1 -1
  182. data/lib/puppet/util/reference.rb +1 -1
  183. data/lib/puppet/util/rubygems.rb +5 -1
  184. data/lib/puppet/util/run_mode.rb +5 -1
  185. data/lib/puppet/util/windows.rb +1 -0
  186. data/lib/puppet/util/windows/api_types.rb +60 -33
  187. data/lib/puppet/util/windows/eventlog.rb +1 -6
  188. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  189. data/lib/puppet/util/windows/principal.rb +8 -6
  190. data/lib/puppet/util/windows/registry.rb +11 -11
  191. data/lib/puppet/util/windows/security.rb +4 -4
  192. data/lib/puppet/util/windows/service.rb +43 -26
  193. data/lib/puppet/util/windows/user.rb +242 -8
  194. data/lib/puppet/version.rb +1 -1
  195. data/locales/puppet.pot +501 -443
  196. data/man/man5/puppet.conf.5 +70 -24
  197. data/man/man8/puppet-agent.8 +8 -5
  198. data/man/man8/puppet-apply.8 +2 -2
  199. data/man/man8/puppet-catalog.8 +1 -1
  200. data/man/man8/puppet-config.8 +6 -6
  201. data/man/man8/puppet-describe.8 +1 -1
  202. data/man/man8/puppet-device.8 +2 -2
  203. data/man/man8/puppet-doc.8 +1 -1
  204. data/man/man8/puppet-epp.8 +1 -1
  205. data/man/man8/puppet-facts.8 +32 -1
  206. data/man/man8/puppet-filebucket.8 +3 -3
  207. data/man/man8/puppet-generate.8 +1 -1
  208. data/man/man8/puppet-help.8 +1 -1
  209. data/man/man8/puppet-key.8 +1 -1
  210. data/man/man8/puppet-lookup.8 +2 -2
  211. data/man/man8/puppet-man.8 +1 -1
  212. data/man/man8/puppet-module.8 +1 -1
  213. data/man/man8/puppet-node.8 +7 -4
  214. data/man/man8/puppet-parser.8 +1 -1
  215. data/man/man8/puppet-plugin.8 +1 -1
  216. data/man/man8/puppet-report.8 +4 -1
  217. data/man/man8/puppet-resource.8 +1 -1
  218. data/man/man8/puppet-script.8 +2 -2
  219. data/man/man8/puppet-ssl.8 +1 -1
  220. data/man/man8/puppet-status.8 +2 -2
  221. data/man/man8/puppet.8 +2 -2
  222. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
  223. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  224. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  225. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  226. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  227. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  228. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
  229. data/spec/integration/application/agent_spec.rb +263 -54
  230. data/spec/integration/application/apply_spec.rb +168 -149
  231. data/spec/integration/application/doc_spec.rb +16 -6
  232. data/spec/integration/application/filebucket_spec.rb +70 -21
  233. data/spec/integration/application/help_spec.rb +42 -0
  234. data/spec/integration/application/lookup_spec.rb +13 -0
  235. data/spec/integration/application/module_spec.rb +68 -0
  236. data/spec/integration/application/plugin_spec.rb +53 -3
  237. data/spec/integration/configurer_spec.rb +14 -0
  238. data/spec/integration/data_binding_spec.rb +82 -0
  239. data/spec/integration/defaults_spec.rb +20 -3
  240. data/spec/integration/directory_environments_spec.rb +17 -17
  241. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  242. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  243. data/spec/integration/network/http_pool_spec.rb +26 -9
  244. data/spec/integration/node/environment_spec.rb +1 -1
  245. data/spec/integration/parser/compiler_spec.rb +11 -0
  246. data/spec/integration/resource/type_collection_spec.rb +2 -6
  247. data/spec/integration/transaction_spec.rb +4 -9
  248. data/spec/integration/type/file_spec.rb +1 -1
  249. data/spec/integration/util/execution_spec.rb +22 -0
  250. data/spec/integration/util/windows/adsi_spec.rb +5 -3
  251. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  252. data/spec/integration/util/windows/process_spec.rb +26 -32
  253. data/spec/integration/util/windows/registry_spec.rb +7 -17
  254. data/spec/integration/util/windows/user_spec.rb +47 -5
  255. data/spec/integration/util_spec.rb +7 -33
  256. data/spec/lib/puppet_spec/matchers.rb +0 -80
  257. data/spec/lib/puppet_spec/puppetserver.rb +8 -0
  258. data/spec/lib/puppet_spec/settings.rb +6 -1
  259. data/spec/shared_contexts/types_setup.rb +2 -0
  260. data/spec/spec_helper.rb +1 -4
  261. data/spec/unit/agent_spec.rb +8 -6
  262. data/spec/unit/application/agent_spec.rb +3 -5
  263. data/spec/unit/application/config_spec.rb +224 -4
  264. data/spec/unit/application/doc_spec.rb +2 -2
  265. data/spec/unit/application/face_base_spec.rb +6 -4
  266. data/spec/unit/application/facts_spec.rb +41 -10
  267. data/spec/unit/application/filebucket_spec.rb +0 -2
  268. data/spec/unit/application/man_spec.rb +52 -0
  269. data/spec/unit/application/resource_spec.rb +3 -1
  270. data/spec/unit/application/ssl_spec.rb +15 -2
  271. data/spec/unit/application_spec.rb +60 -13
  272. data/spec/unit/configurer/downloader_spec.rb +10 -0
  273. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  274. data/spec/unit/configurer_spec.rb +86 -37
  275. data/spec/unit/confine/feature_spec.rb +1 -1
  276. data/spec/unit/confine_spec.rb +10 -3
  277. data/spec/unit/context/trusted_information_spec.rb +10 -4
  278. data/spec/unit/defaults_spec.rb +20 -1
  279. data/spec/unit/environments_spec.rb +176 -32
  280. data/spec/unit/face/config_spec.rb +65 -12
  281. data/spec/unit/face/node_spec.rb +2 -13
  282. data/spec/unit/file_serving/configuration/parser_spec.rb +0 -1
  283. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  284. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  285. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  286. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  287. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  288. data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
  289. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  290. data/spec/unit/file_system/uniquefile_spec.rb +18 -0
  291. data/spec/unit/file_system_spec.rb +1 -2
  292. data/spec/unit/forge/module_release_spec.rb +2 -7
  293. data/spec/unit/functions/inline_epp_spec.rb +26 -1
  294. data/spec/unit/http/client_spec.rb +64 -9
  295. data/spec/unit/http/resolver_spec.rb +24 -5
  296. data/spec/unit/http/response_spec.rb +6 -0
  297. data/spec/unit/http/service/ca_spec.rb +2 -3
  298. data/spec/unit/http/service/compiler_spec.rb +51 -3
  299. data/spec/unit/http/service/file_server_spec.rb +2 -3
  300. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  301. data/spec/unit/http/service/report_spec.rb +2 -3
  302. data/spec/unit/http/service_spec.rb +1 -2
  303. data/spec/unit/http/session_spec.rb +8 -21
  304. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  305. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  306. data/spec/unit/indirector/face_spec.rb +0 -1
  307. data/spec/unit/indirector/facts/facter_spec.rb +0 -1
  308. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  309. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  310. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
  311. data/spec/unit/indirector/file_metadata/http_spec.rb +27 -0
  312. data/spec/unit/indirector/indirection_spec.rb +8 -12
  313. data/spec/unit/indirector/json_spec.rb +8 -8
  314. data/spec/unit/indirector/key/file_spec.rb +0 -1
  315. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  316. data/spec/unit/indirector/node/json_spec.rb +33 -0
  317. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  318. data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
  319. data/spec/unit/indirector/report/yaml_spec.rb +72 -8
  320. data/spec/unit/indirector/request_spec.rb +5 -5
  321. data/spec/unit/indirector/rest_spec.rb +1 -1
  322. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  323. data/spec/unit/indirector/yaml_spec.rb +7 -7
  324. data/spec/unit/indirector_spec.rb +2 -2
  325. data/spec/unit/interface_spec.rb +3 -3
  326. data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
  327. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  328. data/spec/unit/network/authconfig_spec.rb +0 -3
  329. data/spec/unit/network/format_support_spec.rb +3 -2
  330. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -10
  331. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  332. data/spec/unit/network/http/connection_spec.rb +42 -32
  333. data/spec/unit/network/http/handler_spec.rb +0 -5
  334. data/spec/unit/node/environment_spec.rb +18 -1
  335. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  336. data/spec/unit/parser/compiler_spec.rb +3 -19
  337. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  338. data/spec/unit/parser/resource_spec.rb +14 -8
  339. data/spec/unit/parser/scope_spec.rb +1 -1
  340. data/spec/unit/parser/templatewrapper_spec.rb +4 -3
  341. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
  342. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  343. data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
  344. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  345. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  346. data/spec/unit/property_spec.rb +1 -0
  347. data/spec/unit/provider/exec_spec.rb +4 -3
  348. data/spec/unit/provider/nameservice_spec.rb +66 -65
  349. data/spec/unit/provider/package/apt_spec.rb +76 -3
  350. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  351. data/spec/unit/provider/package/base_spec.rb +6 -5
  352. data/spec/unit/provider/package/dpkg_spec.rb +22 -7
  353. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  354. data/spec/unit/provider/package/pacman_spec.rb +18 -12
  355. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  356. data/spec/unit/provider/package/pip_spec.rb +6 -11
  357. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
  358. data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
  359. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  360. data/spec/unit/provider/package/yum_spec.rb +31 -0
  361. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  362. data/spec/unit/provider/service/base_spec.rb +2 -4
  363. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  364. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  365. data/spec/unit/provider/service/debian_spec.rb +3 -5
  366. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  367. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  368. data/spec/unit/provider/service/init_spec.rb +45 -5
  369. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  370. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  371. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  372. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  373. data/spec/unit/provider/service/runit_spec.rb +2 -1
  374. data/spec/unit/provider/service/smf_spec.rb +1 -1
  375. data/spec/unit/provider/service/src_spec.rb +3 -5
  376. data/spec/unit/provider/service/systemd_spec.rb +3 -6
  377. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  378. data/spec/unit/provider/service/windows_spec.rb +50 -14
  379. data/spec/unit/provider/user/aix_spec.rb +5 -0
  380. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  381. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  382. data/spec/unit/provider/user/pw_spec.rb +2 -0
  383. data/spec/unit/provider/user/useradd_spec.rb +23 -16
  384. data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
  385. data/spec/unit/provider_spec.rb +8 -10
  386. data/spec/unit/puppet_pal_2pec.rb +40 -0
  387. data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
  388. data/spec/unit/reports/store_spec.rb +17 -13
  389. data/spec/unit/resource/capability_finder_spec.rb +6 -1
  390. data/spec/unit/resource/type_spec.rb +1 -1
  391. data/spec/unit/resource_spec.rb +14 -13
  392. data/spec/unit/rest/route_spec.rb +4 -4
  393. data/spec/unit/settings_spec.rb +576 -239
  394. data/spec/unit/ssl/base_spec.rb +0 -1
  395. data/spec/unit/ssl/host_spec.rb +0 -5
  396. data/spec/unit/ssl/ssl_provider_spec.rb +82 -50
  397. data/spec/unit/test/test_helper_spec.rb +17 -0
  398. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
  399. data/spec/unit/transaction/event_manager_spec.rb +14 -11
  400. data/spec/unit/transaction/persistence_spec.rb +15 -0
  401. data/spec/unit/transaction/report_spec.rb +3 -1
  402. data/spec/unit/transaction_spec.rb +13 -4
  403. data/spec/unit/type/file/content_spec.rb +0 -1
  404. data/spec/unit/type/file/selinux_spec.rb +0 -2
  405. data/spec/unit/type/file/source_spec.rb +4 -4
  406. data/spec/unit/type/file_spec.rb +122 -102
  407. data/spec/unit/type/filebucket_spec.rb +1 -1
  408. data/spec/unit/type/group_spec.rb +13 -6
  409. data/spec/unit/type/resources_spec.rb +7 -7
  410. data/spec/unit/type/service_spec.rb +210 -1
  411. data/spec/unit/type/tidy_spec.rb +0 -1
  412. data/spec/unit/type/user_spec.rb +31 -2
  413. data/spec/unit/type_spec.rb +52 -2
  414. data/spec/unit/util/at_fork_spec.rb +2 -2
  415. data/spec/unit/util/autoload_spec.rb +5 -1
  416. data/spec/unit/util/backups_spec.rb +1 -2
  417. data/spec/unit/util/character_encoding_spec.rb +4 -4
  418. data/spec/unit/util/checksums_spec.rb +16 -0
  419. data/spec/unit/util/command_line_spec.rb +11 -6
  420. data/spec/unit/util/execution_spec.rb +15 -11
  421. data/spec/unit/util/inifile_spec.rb +6 -14
  422. data/spec/unit/util/log_spec.rb +8 -7
  423. data/spec/unit/util/logging_spec.rb +3 -3
  424. data/spec/unit/util/posix_spec.rb +363 -15
  425. data/spec/unit/util/rubygems_spec.rb +2 -2
  426. data/spec/unit/util/run_mode_spec.rb +6 -6
  427. data/spec/unit/util/selinux_spec.rb +76 -52
  428. data/spec/unit/util/storage_spec.rb +3 -1
  429. data/spec/unit/util/suidmanager_spec.rb +44 -41
  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_spec.rb +16 -9
  433. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  434. metadata +52 -53
  435. data/spec/integration/faces/config_spec.rb +0 -91
  436. data/spec/integration/faces/documentation_spec.rb +0 -57
  437. data/spec/integration/file_bucket/file_spec.rb +0 -50
  438. data/spec/integration/file_serving/content_spec.rb +0 -7
  439. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  440. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  441. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  442. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  443. data/spec/integration/module_tool/forge_spec.rb +0 -51
  444. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  445. data/spec/integration/provider/service/init_spec.rb +0 -48
  446. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  447. data/spec/integration/provider/service/windows_spec.rb +0 -50
  448. data/spec/integration/reference/providers_spec.rb +0 -21
  449. data/spec/integration/reports_spec.rb +0 -13
  450. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  451. data/spec/integration/ssl/host_spec.rb +0 -72
  452. data/spec/integration/ssl/key_spec.rb +0 -99
  453. data/spec/integration/test/test_helper_spec.rb +0 -31
  454. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  455. data/spec/unit/face/catalog_spec.rb +0 -6
  456. data/spec/unit/face/man_spec.rb +0 -25
  457. data/spec/unit/face/module_spec.rb +0 -3
  458. data/spec/unit/man_spec.rb +0 -31
@@ -131,8 +131,54 @@ module Puppet::ModuleTool
131
131
  begin
132
132
  Puppet.info _("Resolving dependencies ...")
133
133
  releases = SemanticPuppet::Dependency.resolve(graph)
134
- rescue SemanticPuppet::Dependency::UnsatisfiableGraph
135
- raise NoVersionsSatisfyError, results.merge(:requested_name => name)
134
+ rescue SemanticPuppet::Dependency::UnsatisfiableGraph => e
135
+ unsatisfied = nil
136
+
137
+ if e.respond_to?(:unsatisfied)
138
+ constraints = {}
139
+ # If the module we're installing satisfies all its
140
+ # dependencies, but would break an already installed
141
+ # module that depends on it, show what would break.
142
+ if name == e.unsatisfied
143
+ graph.constraints[name].each do |mod, range, _|
144
+ next unless mod.split.include?('constraint')
145
+
146
+ # If the user requested a specific version or range,
147
+ # only show the modules with non-intersecting ranges
148
+ if options[:version]
149
+ requested_range = SemanticPuppet::VersionRange.parse(options[:version])
150
+ constraint_range = SemanticPuppet::VersionRange.parse(range)
151
+
152
+ if requested_range.intersection(constraint_range) == SemanticPuppet::VersionRange::EMPTY_RANGE
153
+ constraints[mod.split.first] = range
154
+ end
155
+ else
156
+ constraints[mod.split.first] = range
157
+ end
158
+ end
159
+
160
+ # If the module fails to satisfy one of its
161
+ # dependencies, show the unsatisfiable module
162
+ else
163
+ unsatisfied_range = graph.dependencies[name].max.constraints[e.unsatisfied].first[1]
164
+ constraints[e.unsatisfied] = unsatisfied_range
165
+ end
166
+
167
+ installed_module = @environment.module_by_forge_name(e.unsatisfied.tr('-', '/'))
168
+ current_version = installed_module.version if installed_module
169
+
170
+ unsatisfied = {
171
+ :name => e.unsatisfied,
172
+ :constraints => constraints,
173
+ :current_version => current_version
174
+ }
175
+ end
176
+
177
+ raise NoVersionsSatisfyError, results.merge(
178
+ :requested_name => name,
179
+ :requested_version => options[:version] || graph.dependencies[name].max.version.to_s,
180
+ :unsatisfied => unsatisfied
181
+ )
136
182
  end
137
183
 
138
184
  unless forced?
@@ -7,6 +7,7 @@ module Puppet::ModuleTool::Errors
7
7
  @installed_version = options[:installed_version]
8
8
  @conditions = options[:conditions]
9
9
  @action = options[:action]
10
+ @unsatisfied = options[:unsatisfied]
10
11
 
11
12
  super _("Could not %{action} '%{module_name}' (%{version}); no version satisfies all dependencies") % { action: @action, module_name: @requested_name, version: vstring }
12
13
  end
@@ -14,9 +15,23 @@ module Puppet::ModuleTool::Errors
14
15
  def multiline
15
16
  message = []
16
17
  message << _("Could not %{action} module '%{module_name}' (%{version})") % { action: @action, module_name: @requested_name, version: vstring }
17
- message << _(" No version of '%{module_name}' can satisfy all dependencies") % { module_name: @requested_name }
18
+
19
+ if @unsatisfied
20
+ message << _(" The requested version cannot satisfy one or more of the following installed modules:")
21
+ if @unsatisfied[:current_version]
22
+ message << _(" %{name}, installed: %{current_version}, expected: %{constraints}") % { name: @unsatisfied[:name], current_version: @unsatisfied[:current_version], constraints: @unsatisfied[:constraints][@unsatisfied[:name]] }
23
+ else
24
+ @unsatisfied[:constraints].each do |mod, range|
25
+ message << _(" %{mod}, expects '%{name}': %{range}") % { mod: mod, name: @requested_name, range: range }
26
+ end
27
+ end
28
+ message << _("")
29
+ else
30
+ message << _(" The requested version cannot satisfy all dependencies")
31
+ end
32
+
18
33
  #TRANSLATORS `puppet module %{action} --ignore-dependencies` is a command line and should not be translated
19
- message << _(" Use `puppet module %{action} --ignore-dependencies` to %{action} only this module") % { action: @action }
34
+ message << _(" Use `puppet module %{action} '%{module_name}' --ignore-dependencies` to %{action} only this module") % { action: @action, module_name: @requested_name }
20
35
  message.join("\n")
21
36
  end
22
37
  end
@@ -49,7 +49,7 @@ module Puppet::Network::FormatSupport
49
49
 
50
50
  result = put_preferred_format_first(result).map(&:name)
51
51
 
52
- Puppet.debug "#{friendly_name} supports formats: #{result.join(' ')}"
52
+ Puppet.debug { "#{friendly_name} supports formats: #{result.join(' ')}" }
53
53
 
54
54
  result
55
55
  end
@@ -81,7 +81,7 @@ module Puppet::Network::FormatSupport
81
81
  }
82
82
 
83
83
  if preferred.empty?
84
- Puppet.debug "Value of 'preferred_serialization_format' (#{preferred_format}) is invalid for #{friendly_name}, using default (#{list.first.name})"
84
+ Puppet.debug { "Value of 'preferred_serialization_format' (#{preferred_format}) is invalid for #{friendly_name}, using default (#{list.first.name})" }
85
85
  else
86
86
  list = preferred + list.reject { |format|
87
87
  format.mime.end_with?(preferred_format)
@@ -255,7 +255,8 @@ Puppet::Network::FormatHandler.create_serialized_formats(:rich_data_msgpack, mim
255
255
  end
256
256
 
257
257
  def supported?(klass)
258
- klass == Puppet::Resource::Catalog &&
258
+ suitable? &&
259
+ klass == Puppet::Resource::Catalog &&
259
260
  Puppet.lookup(:current_environment).rich_data?
260
261
  end
261
262
  end
@@ -218,7 +218,7 @@ class Puppet::Network::HTTP::API::IndirectedRoutes
218
218
  return formatter if formatter
219
219
 
220
220
  raise Puppet::Network::HTTP::Error::HTTPNotAcceptableError.new(
221
- _("No supported formats are acceptable (Accept: %{accepted_formats})") % { accepted_formats: formats },
221
+ _("No supported formats are acceptable (Accept: %{accepted_formats})") % { accepted_formats: formats.map(&:mime).join(', ') },
222
222
  Puppet::Network::HTTP::Issues::UNSUPPORTED_FORMAT)
223
223
  end
224
224
 
@@ -1,8 +1,11 @@
1
1
  require 'puppet/util/json'
2
2
  require 'puppet/parser/environment_compiler'
3
3
 
4
+ # @deprecated application orchestration will be removed in puppet 7
4
5
  class Puppet::Network::HTTP::API::Master::V3::Environment
5
6
  def call(request, response)
7
+ Puppet.deprecation_warning("Application orchestration is deprecated. See https://puppet.com/docs/puppet/5.5/deprecated_language.html")
8
+
6
9
  env_name = request.routing_path.split('/').last
7
10
  env = Puppet.lookup(:environments).get(env_name)
8
11
  code_id = request.params[:code_id]
@@ -31,5 +31,4 @@ class Puppet::Network::HTTP::API::Master::V3::Environments
31
31
  ttl
32
32
  end
33
33
  end
34
-
35
34
  end
@@ -149,12 +149,14 @@ class Puppet::Network::HTTP::ConnectionAdapter < Puppet::Network::HTTP::Connecti
149
149
  # though clients are only supposed to send them to proxies, so the proxy knows
150
150
  # what upstream server to CONNECT to. This method creates a URL using the
151
151
  # scheme/host/port that the connection was created with, and appends the path
152
- # portion of the absolute-form. The resulting request will use "origin-form"
152
+ # and query portions of the absolute-form. The resulting request will use "origin-form"
153
153
  # as it should have done all along.
154
- url = URI(path)
155
- URI("#{@site.addr}/#{normalize_path(url.path)}")
154
+ abs_form = URI(path)
155
+ url = URI("#{@site.addr}/#{normalize_path(abs_form.path)}")
156
+ url.query = abs_form.query if abs_form.query
157
+ url
156
158
  else
157
- URI("#{@site.addr}/#{Puppet::Util.uri_encode(normalize_path(path))}")
159
+ URI("#{@site.addr}/#{normalize_path(path)}")
158
160
  end
159
161
  end
160
162
 
@@ -67,11 +67,11 @@ class Puppet::Network::HTTP::Route
67
67
  end
68
68
 
69
69
  def matches?(request)
70
- Puppet.debug("Evaluating match for #{self.inspect}")
70
+ Puppet.debug { "Evaluating match for #{self.inspect}" }
71
71
  if match(request.routing_path)
72
72
  return true
73
73
  else
74
- Puppet.debug("Did not match path (#{request.routing_path.inspect})")
74
+ Puppet.debug { "Did not match path (#{request.routing_path.inspect})" }
75
75
  end
76
76
  return false
77
77
  end
@@ -266,7 +266,7 @@ class Puppet::Node::Environment
266
266
  # @param name [String] The module name
267
267
  # @return [Puppet::Module, nil] The module if found, else nil
268
268
  def module(name)
269
- modules.find {|mod| mod.name == name}
269
+ modules_by_name[name]
270
270
  end
271
271
 
272
272
  # Locate a module instance by the full forge name (EG authorname/module)
@@ -298,7 +298,7 @@ class Puppet::Node::Environment
298
298
  if @modules.nil?
299
299
  module_references = []
300
300
  project = Puppet.lookup(:bolt_project) { nil }
301
- seen_modules = if project
301
+ seen_modules = if project && project.load_as_module?
302
302
  module_references << project.to_h
303
303
  { project.name => true }
304
304
  else
@@ -327,6 +327,12 @@ class Puppet::Node::Environment
327
327
  @modules
328
328
  end
329
329
 
330
+ # @api private
331
+ def modules_by_name
332
+ @modules_by_name ||= Hash[modules.map { |mod| [mod.name, mod] }]
333
+ end
334
+ private :modules_by_name
335
+
330
336
  # Generate a warning if the given directory in a module path entry is named `lib`.
331
337
  #
332
338
  # @api private
@@ -335,9 +341,10 @@ class Puppet::Node::Environment
335
341
  # @param name [String] The directory name
336
342
  def warn_about_mistaken_path(path, name)
337
343
  if name == "lib"
338
- Puppet.debug("Warning: Found directory named 'lib' in module path ('#{path}/lib'); unless " +
339
- "you are expecting to load a module named 'lib', your module path may be set " +
340
- "incorrectly.")
344
+ Puppet.debug {
345
+ "Warning: Found directory named 'lib' in module path ('#{path}/lib'); unless you \
346
+ are expecting to load a module named 'lib', your module path may be set incorrectly."
347
+ }
341
348
  end
342
349
  end
343
350
 
@@ -116,8 +116,25 @@ class Puppet::Node::Facts
116
116
  @timestamp = Time.now
117
117
  end
118
118
 
119
+ def to_yaml
120
+ facts_to_display = Psych.parse_stream(YAML.dump(self))
121
+ quote_special_strings(facts_to_display)
122
+ end
123
+
119
124
  private
120
125
 
126
+ def quote_special_strings(fact_hash)
127
+ fact_hash.grep(Psych::Nodes::Scalar).each do |node|
128
+ next unless node.value =~ /:/
129
+
130
+ node.plain = false
131
+ node.quoted = true
132
+ node.style = Psych::Nodes::Scalar::DOUBLE_QUOTED
133
+ end
134
+
135
+ fact_hash.yaml
136
+ end
137
+
121
138
  def sanitize_fact(fact)
122
139
  if fact.is_a? Hash then
123
140
  ret = {}
@@ -49,6 +49,7 @@ module Pal
49
49
  # If given at the environment level, the facts given here are merged with higher priority.
50
50
  # @param variables [Hash] optional map of fully qualified variable name to value. If given at the environment level, the variables
51
51
  # given here are merged with higher priority.
52
+ # @param set_local_facts [Boolean] when true, the $facts, $server_facts, and $trusted variables are set for the scope.
52
53
  # @param block [Proc] the block performing operations on compiler
53
54
  # @return [Object] what the block returns
54
55
  # @yieldparam [Puppet::Pal::ScriptCompiler] compiler, a ScriptCompiler to perform operations on.
@@ -57,8 +58,9 @@ module Pal
57
58
  configured_by_env: false,
58
59
  manifest_file: nil,
59
60
  code_string: nil,
60
- facts: nil,
61
- variables: nil,
61
+ facts: {},
62
+ variables: {},
63
+ set_local_facts: true,
62
64
  &block
63
65
  )
64
66
  # TRANSLATORS: do not translate variable name strings in these assertions
@@ -91,7 +93,14 @@ module Pal
91
93
 
92
94
  # If manifest_file is nil, the #main method will use the env configured manifest
93
95
  # to do things in the block while a Script Compiler is in effect
94
- main(manifest_file, facts, variables, :script, &block)
96
+ main(
97
+ manifest: manifest_file,
98
+ facts: facts,
99
+ variables: variables,
100
+ internal_compiler_class: :script,
101
+ set_local_facts: set_local_facts,
102
+ &block
103
+ )
95
104
  ensure
96
105
  Puppet[:tasks] = previous_tasks_value
97
106
  Puppet[:code] = previous_code_value
@@ -155,8 +164,9 @@ module Pal
155
164
  configured_by_env: false,
156
165
  manifest_file: nil,
157
166
  code_string: nil,
158
- facts: nil,
159
- variables: nil,
167
+ facts: {},
168
+ variables: {},
169
+ target_variables: {},
160
170
  &block
161
171
  )
162
172
  # TRANSLATORS: do not translate variable name strings in these assertions
@@ -191,7 +201,15 @@ module Pal
191
201
 
192
202
  # If manifest_file is nil, the #main method will use the env configured manifest
193
203
  # to do things in the block while a Script Compiler is in effect
194
- main(manifest_file, facts, variables, :catalog, &block)
204
+ main(
205
+ manifest: manifest_file,
206
+ facts: facts,
207
+ variables: variables,
208
+ target_variables: target_variables,
209
+ internal_compiler_class: :catalog,
210
+ set_local_facts: false,
211
+ &block
212
+ )
195
213
  ensure
196
214
  # Clean up after ourselves
197
215
  Puppet[:tasks] = previous_tasks_value
@@ -379,7 +397,14 @@ module Pal
379
397
  # Picks up information from the puppet context and configures a script compiler which is given to
380
398
  # the provided block
381
399
  #
382
- def self.main(manifest, facts, variables, internal_compiler_class)
400
+ def self.main(
401
+ manifest: nil,
402
+ facts: {},
403
+ variables: {},
404
+ target_variables: {},
405
+ internal_compiler_class: nil,
406
+ set_local_facts: true
407
+ )
383
408
  # Configure the load path
384
409
  env = Puppet.lookup(:pal_env)
385
410
  env.each_plugin_directory do |dir|
@@ -395,14 +420,11 @@ module Pal
395
420
  pal_variables = Puppet.lookup(:pal_variables)
396
421
 
397
422
  overrides = {}
423
+
398
424
  unless facts.nil? || facts.empty?
399
425
  pal_facts = pal_facts.merge(facts)
400
426
  overrides[:pal_facts] = pal_facts
401
427
  end
402
- unless variables.nil? || variables.empty?
403
- pal_variables = pal_variables.merge(variables)
404
- overrides[:pal_variables] = pal_variables
405
- end
406
428
 
407
429
  prepare_node_facts(node, pal_facts)
408
430
 
@@ -434,15 +456,38 @@ module Pal
434
456
  overrides[:pal_catalog_compiler] = overrides[:pal_compiler] = pal_compiler
435
457
  end
436
458
 
459
+ # When scripting the trusted data are always local; default is to set them anyway
460
+ # When compiling for a catalog, the catalog compiler does this
461
+ if set_local_facts
462
+ compiler.topscope.set_trusted(node.trusted_data)
463
+
464
+ # Server facts are always about the local node's version etc.
465
+ compiler.topscope.set_server_facts(node.server_facts)
466
+
467
+ # Set $facts for the node running the script
468
+ facts_hash = node.facts.nil? ? {} : node.facts.values
469
+ compiler.topscope.set_facts(facts_hash)
470
+
471
+ # create the $settings:: variables
472
+ compiler.topscope.merge_settings(node.environment.name, false)
473
+ end
474
+
437
475
  # Make compiler available to Puppet#lookup and injection in functions
438
476
  # TODO: The compiler instances should be available under non PAL use as well!
439
477
  # TRANSLATORS: Do not translate, symbolic name
440
478
  Puppet.override(overrides, "PAL::with_#{internal_compiler_class}_compiler") do
441
479
  compiler.compile do | compiler_yield |
442
- # In case the varaibles passed to the compiler are PCore types defined in modules, they
480
+ # In case the variables passed to the compiler are PCore types defined in modules, they
443
481
  # need to be deserialized and added from within the this scope, so that loaders are
444
482
  # available during deserizlization.
445
- add_variables(compiler.topscope, Puppet::Pops::Serialization::FromDataConverter.convert(pal_variables))
483
+ pal_variables = Puppet::Pops::Serialization::FromDataConverter.convert(pal_variables)
484
+ variables = Puppet::Pops::Serialization::FromDataConverter.convert(variables)
485
+
486
+ # Merge together target variables and plan variables. This will also shadow any
487
+ # collisions with facts and emit a warning.
488
+ topscope_vars = pal_variables.merge(merge_vars(target_variables, variables, node.facts.values))
489
+
490
+ add_variables(compiler.topscope, topscope_vars)
446
491
  # wrap the internal compiler to prevent it from leaking in the PAL API
447
492
  if block_given?
448
493
  yield(pal_compiler)
@@ -462,6 +507,38 @@ module Pal
462
507
  end
463
508
  private_class_method :main
464
509
 
510
+ # Warn and remove variables that will be shadowed by facts of the same
511
+ # name, which are set in scope earlier.
512
+ def self.merge_vars(target_vars, vars, facts)
513
+ # First, shadow plan and target variables by facts of the same name
514
+ vars = shadow_vars(facts || {}, vars, 'fact', 'plan variable')
515
+ target_vars = shadow_vars(facts || {}, target_vars, 'fact', 'target variable')
516
+ # Then, shadow target variables by plan variables of the same name
517
+ target_vars = shadow_vars(vars, target_vars, 'plan variable', 'target variable')
518
+
519
+ target_vars.merge(vars)
520
+ end
521
+ private_class_method :merge_vars
522
+
523
+ def self.shadow_vars(vars, other_vars, vars_type, other_vars_type)
524
+ collisions, valid = other_vars.partition do |k, _|
525
+ vars.include?(k)
526
+ end
527
+
528
+ if collisions.any?
529
+ names = collisions.map { |k, _| "$#{k}" }.join(', ')
530
+ plural = collisions.length == 1 ? '' : 's'
531
+
532
+ Puppet.warning(
533
+ "#{other_vars_type.capitalize}#{plural} #{names} will be overridden by "\
534
+ "#{vars_type}#{plural} of the same name in the apply block"
535
+ )
536
+ end
537
+
538
+ valid.to_h
539
+ end
540
+ private_class_method :shadow_vars
541
+
465
542
  def self.create_internal_compiler(compiler_class_reference, node)
466
543
  case compiler_class_reference
467
544
  when :script
@@ -429,7 +429,7 @@ class Puppet::Parameter
429
429
  begin
430
430
  ret = unsafe_munge(value)
431
431
  rescue Puppet::Error => detail
432
- Puppet.debug "Reraising #{detail}"
432
+ Puppet.debug { "Reraising #{detail}" }
433
433
  raise
434
434
  rescue => detail
435
435
  raise Puppet::DevError, _("Munging failed for value %{value} in class %{class_name}: %{detail}") % { value: value.inspect, class_name: self.name, detail: detail }, detail.backtrace
@@ -17,17 +17,17 @@ class Puppet::Parser::AST::Leaf < Puppet::Parser::AST
17
17
  @value.to_s unless @value.nil?
18
18
  end
19
19
 
20
- def initialize(value: nil, **options)
20
+ def initialize(value: nil, file: nil, line: nil, pos: nil)
21
21
  @value = value
22
- super(**options)
22
+ super(file: file, line: line, pos: pos)
23
23
  end
24
24
  end
25
25
 
26
26
  # Host names, either fully qualified or just the short name, or even a regex
27
27
  #
28
28
  class Puppet::Parser::AST::HostName < Puppet::Parser::AST::Leaf
29
- def initialize(hash)
30
- super
29
+ def initialize(value: nil, file: nil, line: nil, pos: nil)
30
+ super(value: value, file: file, line: line, pos: pos)
31
31
 
32
32
  # Note that this is an AST::Regex, not a Regexp
33
33
  unless @value.is_a?(Regex)
@@ -50,8 +50,9 @@ class Puppet::Parser::AST::HostName < Puppet::Parser::AST::Leaf
50
50
  end
51
51
 
52
52
  class Puppet::Parser::AST::Regex < Puppet::Parser::AST::Leaf
53
- def initialize(hash)
54
- super
53
+ def initialize(value: nil, file: nil, line: nil, pos: nil)
54
+ super(value: value, file: file, line: line, pos: pos)
55
+
55
56
  # transform value from hash options unless it is already a regular expression
56
57
  @value = Regexp.new(@value) unless @value.is_a?(Regexp)
57
58
  end