puppet 6.12.0-x64-mingw32 → 6.17.0-x64-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 (412) 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 +39 -36
  6. data/README.md +18 -25
  7. data/ext/project_data.yaml +1 -1
  8. data/ext/windows/service/daemon.rb +3 -3
  9. data/lib/puppet.rb +52 -13
  10. data/lib/puppet/agent.rb +20 -14
  11. data/lib/puppet/application/agent.rb +26 -17
  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/plugin.rb +1 -0
  16. data/lib/puppet/application/resource.rb +1 -1
  17. data/lib/puppet/application/ssl.rb +4 -4
  18. data/lib/puppet/configurer.rb +65 -69
  19. data/lib/puppet/configurer/plugin_handler.rb +10 -1
  20. data/lib/puppet/confine.rb +1 -1
  21. data/lib/puppet/context/trusted_information.rb +14 -8
  22. data/lib/puppet/daemon.rb +13 -27
  23. data/lib/puppet/defaults.rb +154 -58
  24. data/lib/puppet/environments.rb +27 -20
  25. data/lib/puppet/face/facts.rb +8 -5
  26. data/lib/puppet/face/help.rb +29 -3
  27. data/lib/puppet/face/module/search.rb +5 -0
  28. data/lib/puppet/face/plugin.rb +2 -2
  29. data/lib/puppet/file_serving/http_metadata.rb +14 -2
  30. data/lib/puppet/file_serving/metadata.rb +4 -1
  31. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  32. data/lib/puppet/file_system/file_impl.rb +14 -10
  33. data/lib/puppet/file_system/memory_file.rb +6 -0
  34. data/lib/puppet/file_system/memory_impl.rb +13 -0
  35. data/lib/puppet/file_system/uniquefile.rb +12 -16
  36. data/lib/puppet/file_system/windows.rb +7 -10
  37. data/lib/puppet/forge.rb +1 -1
  38. data/lib/puppet/forge/cache.rb +1 -1
  39. data/lib/puppet/forge/repository.rb +4 -7
  40. data/lib/puppet/functions/call.rb +1 -1
  41. data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
  42. data/lib/puppet/functions/filter.rb +1 -0
  43. data/lib/puppet/functions/reduce.rb +2 -4
  44. data/lib/puppet/http.rb +5 -0
  45. data/lib/puppet/http/client.rb +293 -73
  46. data/lib/puppet/http/errors.rb +2 -0
  47. data/lib/puppet/http/external_client.rb +90 -0
  48. data/lib/puppet/http/redirector.rb +43 -7
  49. data/lib/puppet/http/resolver.rb +46 -3
  50. data/lib/puppet/http/resolver/server_list.rb +76 -16
  51. data/lib/puppet/http/resolver/settings.rb +23 -3
  52. data/lib/puppet/http/resolver/srv.rb +29 -3
  53. data/lib/puppet/http/response.rb +87 -1
  54. data/lib/puppet/http/retry_after_handler.rb +39 -0
  55. data/lib/puppet/http/service.rb +151 -7
  56. data/lib/puppet/http/service/ca.rb +76 -14
  57. data/lib/puppet/http/service/compiler.rb +319 -0
  58. data/lib/puppet/http/service/file_server.rb +206 -0
  59. data/lib/puppet/http/service/report.rb +49 -23
  60. data/lib/puppet/http/session.rb +103 -7
  61. data/lib/puppet/indirector.rb +1 -1
  62. data/lib/puppet/indirector/catalog/compiler.rb +10 -0
  63. data/lib/puppet/indirector/catalog/rest.rb +34 -0
  64. data/lib/puppet/indirector/facts/rest.rb +42 -0
  65. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  66. data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
  67. data/lib/puppet/indirector/file_content/http.rb +5 -0
  68. data/lib/puppet/indirector/file_content/rest.rb +30 -0
  69. data/lib/puppet/indirector/file_metadata/http.rb +27 -8
  70. data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
  71. data/lib/puppet/indirector/json.rb +1 -1
  72. data/lib/puppet/indirector/msgpack.rb +1 -1
  73. data/lib/puppet/indirector/node/rest.rb +24 -0
  74. data/lib/puppet/indirector/report/rest.rb +19 -0
  75. data/lib/puppet/indirector/report/yaml.rb +23 -0
  76. data/lib/puppet/indirector/request.rb +1 -1
  77. data/lib/puppet/indirector/rest.rb +12 -0
  78. data/lib/puppet/indirector/status/rest.rb +18 -0
  79. data/lib/puppet/loaders.rb +6 -0
  80. data/lib/puppet/metatype/manager.rb +80 -80
  81. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  82. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  83. data/lib/puppet/network/http/base_pool.rb +7 -2
  84. data/lib/puppet/network/http/compression.rb +7 -0
  85. data/lib/puppet/network/http/connection.rb +6 -0
  86. data/lib/puppet/network/http/connection_adapter.rb +184 -0
  87. data/lib/puppet/network/http/nocache_pool.rb +2 -0
  88. data/lib/puppet/network/http/pool.rb +13 -6
  89. data/lib/puppet/network/http_pool.rb +2 -1
  90. data/lib/puppet/node/environment.rb +11 -1
  91. data/lib/puppet/pal/catalog_compiler.rb +5 -0
  92. data/lib/puppet/pal/pal_impl.rb +4 -29
  93. data/lib/puppet/parser/ast/leaf.rb +5 -5
  94. data/lib/puppet/parser/ast/pops_bridge.rb +6 -15
  95. data/lib/puppet/parser/compiler.rb +43 -33
  96. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  97. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  98. data/lib/puppet/parser/environment_compiler.rb +4 -1
  99. data/lib/puppet/parser/functions.rb +18 -13
  100. data/lib/puppet/parser/functions/filter.rb +1 -0
  101. data/lib/puppet/parser/resource.rb +3 -2
  102. data/lib/puppet/parser/resource/param.rb +6 -0
  103. data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
  104. data/lib/puppet/pops/evaluator/evaluator_impl.rb +6 -6
  105. data/lib/puppet/pops/issues.rb +5 -0
  106. data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +12 -3
  107. data/lib/puppet/pops/loaders.rb +7 -5
  108. data/lib/puppet/pops/parser/evaluating_parser.rb +5 -7
  109. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  110. data/lib/puppet/pops/types/p_object_type_extension.rb +10 -0
  111. data/lib/puppet/pops/types/type_calculator.rb +24 -0
  112. data/lib/puppet/pops/validation/checker4_0.rb +11 -1
  113. data/lib/puppet/pops/validation/tasks_checker.rb +5 -1
  114. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  115. data/lib/puppet/provider/aix_object.rb +4 -2
  116. data/lib/puppet/provider/group/aix.rb +1 -0
  117. data/lib/puppet/provider/group/groupadd.rb +57 -24
  118. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  119. data/lib/puppet/provider/package/aix.rb +17 -2
  120. data/lib/puppet/provider/package/apt.rb +78 -4
  121. data/lib/puppet/provider/package/aptitude.rb +1 -1
  122. data/lib/puppet/provider/package/dnfmodule.rb +69 -15
  123. data/lib/puppet/provider/package/dpkg.rb +14 -7
  124. data/lib/puppet/provider/package/fink.rb +20 -3
  125. data/lib/puppet/provider/package/gem.rb +41 -7
  126. data/lib/puppet/provider/package/openbsd.rb +13 -1
  127. data/lib/puppet/provider/package/pacman.rb +2 -5
  128. data/lib/puppet/provider/package/pip.rb +143 -48
  129. data/lib/puppet/provider/package/pip3.rb +0 -2
  130. data/lib/puppet/provider/package/pkg.rb +18 -5
  131. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  132. data/lib/puppet/provider/package/pkgng.rb +16 -4
  133. data/lib/puppet/provider/package/portage.rb +2 -2
  134. data/lib/puppet/provider/package/puppet_gem.rb +6 -2
  135. data/lib/puppet/provider/package/rpm.rb +6 -213
  136. data/lib/puppet/provider/package/yum.rb +109 -25
  137. data/lib/puppet/provider/package/zypper.rb +59 -1
  138. data/lib/puppet/provider/service/systemd.rb +22 -4
  139. data/lib/puppet/provider/service/windows.rb +23 -7
  140. data/lib/puppet/provider/user/aix.rb +1 -0
  141. data/lib/puppet/provider/user/directoryservice.rb +30 -5
  142. data/lib/puppet/provider/user/useradd.rb +22 -12
  143. data/lib/puppet/reports/http.rb +15 -9
  144. data/lib/puppet/reports/store.rb +1 -1
  145. data/lib/puppet/resource.rb +2 -1
  146. data/lib/puppet/resource/type.rb +8 -0
  147. data/lib/puppet/resource/type_collection.rb +20 -16
  148. data/lib/puppet/runtime.rb +31 -1
  149. data/lib/puppet/settings.rb +4 -0
  150. data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
  151. data/lib/puppet/ssl.rb +1 -0
  152. data/lib/puppet/ssl/certificate.rb +2 -1
  153. data/lib/puppet/ssl/host.rb +4 -4
  154. data/lib/puppet/ssl/oids.rb +1 -0
  155. data/lib/puppet/ssl/ssl_context.rb +2 -2
  156. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  157. data/lib/puppet/ssl/state_machine.rb +81 -35
  158. data/lib/puppet/ssl/verifier_adapter.rb +9 -1
  159. data/lib/puppet/test/test_helper.rb +15 -11
  160. data/lib/puppet/transaction/report.rb +2 -2
  161. data/lib/puppet/transaction/resource_harness.rb +1 -1
  162. data/lib/puppet/trusted_external.rb +29 -1
  163. data/lib/puppet/type.rb +18 -6
  164. data/lib/puppet/type/file.rb +51 -13
  165. data/lib/puppet/type/file/checksum.rb +4 -4
  166. data/lib/puppet/type/file/source.rb +51 -60
  167. data/lib/puppet/type/group.rb +2 -2
  168. data/lib/puppet/type/package.rb +102 -10
  169. data/lib/puppet/type/service.rb +55 -8
  170. data/lib/puppet/type/user.rb +3 -28
  171. data/lib/puppet/util.rb +39 -15
  172. data/lib/puppet/util/at_fork.rb +1 -1
  173. data/lib/puppet/util/autoload.rb +4 -18
  174. data/lib/puppet/util/checksums.rb +19 -4
  175. data/lib/puppet/util/fileparsing.rb +2 -2
  176. data/lib/puppet/util/instance_loader.rb +14 -10
  177. data/lib/puppet/util/log/destinations.rb +2 -11
  178. data/lib/puppet/util/package/version/debian.rb +175 -0
  179. data/lib/puppet/util/package/version/gem.rb +15 -0
  180. data/lib/puppet/util/package/version/pip.rb +167 -0
  181. data/lib/puppet/util/package/version/range.rb +53 -0
  182. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  183. data/lib/puppet/util/package/version/range/gt.rb +14 -0
  184. data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
  185. data/lib/puppet/util/package/version/range/lt.rb +14 -0
  186. data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
  187. data/lib/puppet/util/package/version/range/min_max.rb +21 -0
  188. data/lib/puppet/util/package/version/range/simple.rb +11 -0
  189. data/lib/puppet/util/package/version/rpm.rb +73 -0
  190. data/lib/puppet/util/pidlock.rb +36 -10
  191. data/lib/puppet/util/platform.rb +5 -0
  192. data/lib/puppet/util/plist.rb +6 -0
  193. data/lib/puppet/util/provider_features.rb +1 -1
  194. data/lib/puppet/util/reference.rb +1 -1
  195. data/lib/puppet/util/rpm_compare.rb +193 -0
  196. data/lib/puppet/util/storage.rb +0 -1
  197. data/lib/puppet/util/windows/adsi.rb +2 -2
  198. data/lib/puppet/util/windows/api_types.rb +45 -32
  199. data/lib/puppet/util/windows/eventlog.rb +1 -6
  200. data/lib/puppet/util/windows/principal.rb +8 -6
  201. data/lib/puppet/util/windows/process.rb +15 -14
  202. data/lib/puppet/util/windows/registry.rb +11 -11
  203. data/lib/puppet/util/windows/security.rb +1 -0
  204. data/lib/puppet/util/windows/service.rb +43 -26
  205. data/lib/puppet/util/windows/sid.rb +3 -3
  206. data/lib/puppet/util/windows/user.rb +23 -8
  207. data/lib/puppet/util/yaml.rb +1 -1
  208. data/lib/puppet/version.rb +1 -1
  209. data/locales/puppet.pot +707 -574
  210. data/man/man5/puppet.conf.5 +74 -14
  211. data/man/man8/puppet-agent.8 +7 -7
  212. data/man/man8/puppet-apply.8 +1 -1
  213. data/man/man8/puppet-catalog.8 +1 -1
  214. data/man/man8/puppet-config.8 +1 -1
  215. data/man/man8/puppet-describe.8 +1 -1
  216. data/man/man8/puppet-device.8 +2 -2
  217. data/man/man8/puppet-doc.8 +1 -1
  218. data/man/man8/puppet-epp.8 +1 -1
  219. data/man/man8/puppet-facts.8 +1 -1
  220. data/man/man8/puppet-filebucket.8 +17 -2
  221. data/man/man8/puppet-generate.8 +1 -1
  222. data/man/man8/puppet-help.8 +6 -3
  223. data/man/man8/puppet-key.8 +1 -1
  224. data/man/man8/puppet-lookup.8 +1 -1
  225. data/man/man8/puppet-man.8 +1 -1
  226. data/man/man8/puppet-module.8 +4 -1
  227. data/man/man8/puppet-node.8 +1 -1
  228. data/man/man8/puppet-parser.8 +1 -1
  229. data/man/man8/puppet-plugin.8 +1 -1
  230. data/man/man8/puppet-report.8 +1 -1
  231. data/man/man8/puppet-resource.8 +1 -1
  232. data/man/man8/puppet-script.8 +1 -1
  233. data/man/man8/puppet-ssl.8 +2 -2
  234. data/man/man8/puppet-status.8 +1 -1
  235. data/man/man8/puppet.8 +2 -2
  236. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
  237. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
  238. data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
  239. data/spec/fixtures/ssl/unknown-ca.pem +59 -0
  240. data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
  241. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  242. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  243. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  244. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  245. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +1 -102
  246. 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 -106
  247. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -106
  248. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -102
  249. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -98
  250. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -102
  251. 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 -102
  252. data/spec/integration/application/agent_spec.rb +483 -0
  253. data/spec/integration/application/apply_spec.rb +132 -3
  254. data/spec/integration/application/filebucket_spec.rb +190 -0
  255. data/spec/integration/application/plugin_spec.rb +73 -0
  256. data/spec/integration/configurer_spec.rb +26 -7
  257. data/spec/integration/defaults_spec.rb +1 -2
  258. data/spec/integration/http/client_spec.rb +47 -37
  259. data/spec/integration/indirector/facts/facter_spec.rb +4 -0
  260. data/spec/integration/indirector/report/yaml.rb +83 -0
  261. data/spec/integration/module_tool/forge_spec.rb +2 -15
  262. data/spec/integration/network/http_pool_spec.rb +93 -20
  263. data/spec/integration/node/environment_spec.rb +15 -0
  264. data/spec/integration/parser/compiler_spec.rb +11 -0
  265. data/spec/integration/type/file_spec.rb +1 -1
  266. data/spec/integration/util/windows/adsi_spec.rb +6 -1
  267. data/spec/integration/util/windows/registry_spec.rb +7 -7
  268. data/spec/integration/util/windows/user_spec.rb +40 -5
  269. data/spec/lib/puppet/test_ca.rb +2 -2
  270. data/spec/lib/puppet_spec/https.rb +16 -7
  271. data/spec/lib/puppet_spec/puppetserver.rb +119 -0
  272. data/spec/shared_contexts/https.rb +29 -0
  273. data/spec/unit/agent_spec.rb +80 -26
  274. data/spec/unit/application/agent_spec.rb +9 -5
  275. data/spec/unit/application/apply_spec.rb +2 -12
  276. data/spec/unit/application/describe_spec.rb +88 -50
  277. data/spec/unit/application/device_spec.rb +2 -2
  278. data/spec/unit/application/filebucket_spec.rb +22 -2
  279. data/spec/unit/application/resource_spec.rb +2 -2
  280. data/spec/unit/configurer/fact_handler_spec.rb +4 -8
  281. data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
  282. data/spec/unit/configurer_spec.rb +17 -18
  283. data/spec/unit/context/trusted_information_spec.rb +25 -2
  284. data/spec/unit/daemon_spec.rb +5 -64
  285. data/spec/unit/defaults_spec.rb +25 -2
  286. data/spec/unit/environments_spec.rb +65 -28
  287. data/spec/unit/face/facts_spec.rb +24 -20
  288. data/spec/unit/face/module/search_spec.rb +17 -0
  289. data/spec/unit/face/plugin_spec.rb +12 -10
  290. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  291. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  292. data/spec/unit/file_system/uniquefile_spec.rb +11 -0
  293. data/spec/unit/file_system_spec.rb +26 -2
  294. data/spec/unit/functions/lookup_spec.rb +13 -0
  295. data/spec/unit/http/client_spec.rb +327 -35
  296. data/spec/unit/http/external_client_spec.rb +201 -0
  297. data/spec/unit/http/resolver_spec.rb +34 -2
  298. data/spec/unit/http/response_spec.rb +75 -0
  299. data/spec/unit/http/service/ca_spec.rb +53 -11
  300. data/spec/unit/http/service/compiler_spec.rb +627 -0
  301. data/spec/unit/http/service/file_server_spec.rb +308 -0
  302. data/spec/unit/http/service/report_spec.rb +27 -9
  303. data/spec/unit/http/service_spec.rb +98 -5
  304. data/spec/unit/http/session_spec.rb +190 -7
  305. data/spec/unit/indirector/catalog/compiler_spec.rb +47 -29
  306. data/spec/unit/indirector/catalog/rest_spec.rb +59 -2
  307. data/spec/unit/indirector/facts/rest_spec.rb +79 -24
  308. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
  309. data/spec/unit/indirector/file_content/rest_spec.rb +53 -2
  310. data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
  311. data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -2
  312. data/spec/unit/indirector/node/rest_spec.rb +57 -2
  313. data/spec/unit/indirector/report/rest_spec.rb +58 -51
  314. data/spec/unit/indirector/request_spec.rb +1 -1
  315. data/spec/unit/indirector/resource/ral_spec.rb +7 -8
  316. data/spec/unit/indirector/rest_spec.rb +13 -0
  317. data/spec/unit/indirector/status/rest_spec.rb +43 -2
  318. data/spec/unit/interface_spec.rb +3 -3
  319. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  320. data/spec/unit/network/http/connection_spec.rb +559 -175
  321. data/spec/unit/network/http/nocache_pool_spec.rb +25 -3
  322. data/spec/unit/network/http/pool_spec.rb +89 -11
  323. data/spec/unit/network/http_pool_spec.rb +63 -57
  324. data/spec/unit/network/http_spec.rb +1 -1
  325. data/spec/unit/node/environment_spec.rb +16 -0
  326. data/spec/unit/node/facts_spec.rb +2 -1
  327. data/spec/unit/node_spec.rb +7 -4
  328. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  329. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  330. data/spec/unit/parser/scope_spec.rb +1 -1
  331. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  332. data/spec/unit/pops/loaders/loaders_spec.rb +1 -1
  333. data/spec/unit/pops/serialization/to_from_hr_spec.rb +6 -1
  334. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  335. data/spec/unit/pops/validator/validator_spec.rb +7 -2
  336. data/spec/unit/provider/aix_object_spec.rb +16 -2
  337. data/spec/unit/provider/group/groupadd_spec.rb +181 -56
  338. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  339. data/spec/unit/provider/package/aix_spec.rb +29 -0
  340. data/spec/unit/provider/package/apt_spec.rb +43 -2
  341. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  342. data/spec/unit/provider/package/dnfmodule_spec.rb +76 -15
  343. data/spec/unit/provider/package/dpkg_spec.rb +28 -6
  344. data/spec/unit/provider/package/gem_spec.rb +40 -0
  345. data/spec/unit/provider/package/openbsd_spec.rb +17 -0
  346. data/spec/unit/provider/package/pacman_spec.rb +6 -21
  347. data/spec/unit/provider/package/pip_spec.rb +68 -19
  348. data/spec/unit/provider/package/pkg_spec.rb +15 -1
  349. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  350. data/spec/unit/provider/package/pkgng_spec.rb +38 -0
  351. data/spec/unit/provider/package/portage_spec.rb +5 -0
  352. data/spec/unit/provider/package/puppet_gem_spec.rb +8 -0
  353. data/spec/unit/provider/package/rpm_spec.rb +0 -212
  354. data/spec/unit/provider/package/yum_spec.rb +292 -0
  355. data/spec/unit/provider/package/zypper_spec.rb +84 -0
  356. data/spec/unit/provider/service/init_spec.rb +1 -0
  357. data/spec/unit/provider/service/openbsd_spec.rb +9 -0
  358. data/spec/unit/provider/service/openwrt_spec.rb +1 -0
  359. data/spec/unit/provider/service/redhat_spec.rb +9 -0
  360. data/spec/unit/provider/service/systemd_spec.rb +92 -12
  361. data/spec/unit/provider/service/windows_spec.rb +22 -14
  362. data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
  363. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  364. data/spec/unit/provider/user/useradd_spec.rb +43 -24
  365. data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
  366. data/spec/unit/puppet_pal_2pec.rb +0 -26
  367. data/spec/unit/puppet_pal_catalog_spec.rb +46 -0
  368. data/spec/unit/puppet_spec.rb +47 -0
  369. data/spec/unit/reports/http_spec.rb +70 -52
  370. data/spec/unit/resource_spec.rb +3 -3
  371. data/spec/unit/settings/autosign_setting_spec.rb +1 -1
  372. data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
  373. data/spec/unit/ssl/certificate_spec.rb +7 -0
  374. data/spec/unit/ssl/host_spec.rb +4 -2
  375. data/spec/unit/ssl/oids_spec.rb +1 -0
  376. data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
  377. data/spec/unit/ssl/state_machine_spec.rb +99 -13
  378. data/spec/unit/test/test_helper_spec.rb +17 -0
  379. data/spec/unit/transaction/persistence_spec.rb +1 -10
  380. data/spec/unit/transaction/report_spec.rb +5 -1
  381. data/spec/unit/transaction_spec.rb +0 -2
  382. data/spec/unit/type/file/ensure_spec.rb +1 -2
  383. data/spec/unit/type/file/source_spec.rb +89 -38
  384. data/spec/unit/type/file_spec.rb +122 -96
  385. data/spec/unit/type/package_spec.rb +8 -0
  386. data/spec/unit/type/service_spec.rb +185 -8
  387. data/spec/unit/type/user_spec.rb +1 -2
  388. data/spec/unit/type_spec.rb +50 -0
  389. data/spec/unit/util/at_fork_spec.rb +3 -2
  390. data/spec/unit/util/autoload_spec.rb +2 -1
  391. data/spec/unit/util/checksums_spec.rb +16 -0
  392. data/spec/unit/util/log/destinations_spec.rb +1 -29
  393. data/spec/unit/util/package/version/debian_spec.rb +83 -0
  394. data/spec/unit/util/package/version/pip_spec.rb +464 -0
  395. data/spec/unit/util/package/version/range_spec.rb +175 -0
  396. data/spec/unit/util/package/version/rpm_spec.rb +121 -0
  397. data/spec/unit/util/pidlock_spec.rb +112 -42
  398. data/spec/unit/util/plist_spec.rb +20 -0
  399. data/spec/unit/util/rpm_compare_spec.rb +196 -0
  400. data/spec/unit/util/storage_spec.rb +1 -8
  401. data/spec/unit/util/windows/adsi_spec.rb +4 -4
  402. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  403. data/spec/unit/util/windows/service_spec.rb +4 -4
  404. data/spec/unit/util/windows/sid_spec.rb +2 -2
  405. data/spec/unit/util_spec.rb +3 -3
  406. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  407. data/tasks/generate_cert_fixtures.rake +15 -1
  408. data/tasks/manpages.rake +5 -35
  409. metadata +73 -12
  410. data/COMMITTERS.md +0 -244
  411. data/spec/integration/faces/plugin_spec.rb +0 -61
  412. data/spec/integration/test/test_helper_spec.rb +0 -31
@@ -3,6 +3,7 @@
3
3
  # @api private
4
4
  class Puppet::Network::HTTP::NoCachePool < Puppet::Network::HTTP::BasePool
5
5
  def initialize(factory = Puppet::Network::HTTP::Factory.new)
6
+ Puppet.deprecation_warning(_('Puppet::Network::HTTP::NoCachePool is deprecated.'))
6
7
  @factory = factory
7
8
  end
8
9
 
@@ -15,6 +16,7 @@ class Puppet::Network::HTTP::NoCachePool < Puppet::Network::HTTP::BasePool
15
16
  begin
16
17
  yield http
17
18
  ensure
19
+ return unless http.started?
18
20
  Puppet.debug("Closing connection for #{site}")
19
21
  http.finish
20
22
  end
@@ -9,11 +9,9 @@
9
9
  # @api private
10
10
  #
11
11
  class Puppet::Network::HTTP::Pool < Puppet::Network::HTTP::BasePool
12
- FIFTEEN_SECONDS = 15
12
+ attr_reader :factory, :keepalive_timeout
13
13
 
14
- attr_reader :factory
15
-
16
- def initialize(keepalive_timeout = FIFTEEN_SECONDS)
14
+ def initialize(keepalive_timeout)
17
15
  @pool = {}
18
16
  @factory = Puppet::Network::HTTP::Factory.new
19
17
  @keepalive_timeout = keepalive_timeout
@@ -33,7 +31,7 @@ class Puppet::Network::HTTP::Pool < Puppet::Network::HTTP::BasePool
33
31
  reuse = false
34
32
  raise detail
35
33
  ensure
36
- if reuse
34
+ if reuse && http.started?
37
35
  release(site, verifier, http)
38
36
  else
39
37
  close_connection(site, http)
@@ -56,13 +54,17 @@ class Puppet::Network::HTTP::Pool < Puppet::Network::HTTP::BasePool
56
54
  end
57
55
 
58
56
  # Safely close a persistent connection.
57
+ # Don't try to close a connection that's already closed.
59
58
  #
60
59
  # @api private
61
60
  def close_connection(site, http)
61
+ return false unless http.started?
62
62
  Puppet.debug("Closing connection for #{site}")
63
63
  http.finish
64
+ true
64
65
  rescue => detail
65
66
  Puppet.log_exception(detail, _("Failed to close connection for %{site}: %{detail}") % { site: site, detail: detail })
67
+ nil
66
68
  end
67
69
 
68
70
  # Borrow and take ownership of a persistent connection. If a new
@@ -71,9 +73,14 @@ class Puppet::Network::HTTP::Pool < Puppet::Network::HTTP::BasePool
71
73
  # @api private
72
74
  def borrow(site, verifier)
73
75
  @pool[site] = active_sessions(site)
74
- index = @pool[site].index { |session| verifier.reusable?(session.verifier) }
76
+ index = @pool[site].index do |session|
77
+ (verifier.nil? && session.verifier.nil?) ||
78
+ (!verifier.nil? && verifier.reusable?(session.verifier))
79
+ end
75
80
  session = index ? @pool[site].delete_at(index) : nil
76
81
  if session
82
+ @pool.delete(site) if @pool[site].empty?
83
+
77
84
  Puppet.debug("Using cached connection for #{site}")
78
85
  session.connection
79
86
  else
@@ -1,4 +1,5 @@
1
1
  require 'puppet/network/http/connection'
2
+ require 'puppet/network/http/connection_adapter'
2
3
  require 'puppet/util/platform'
3
4
 
4
5
  module Puppet::Network; end
@@ -12,7 +13,7 @@ module Puppet::Network; end
12
13
  #
13
14
  module Puppet::Network::HttpPool
14
15
 
15
- @http_client_class = Puppet::Network::HTTP::Connection
16
+ @http_client_class = Puppet::Network::HTTP::ConnectionAdapter
16
17
 
17
18
  def self.http_client_class
18
19
  @http_client_class
@@ -162,6 +162,10 @@ class Puppet::Node::Environment
162
162
  # @api private
163
163
  attr_accessor :loaders
164
164
 
165
+ # Lock for compilation that needs exclusive access to the environment
166
+ # @api private
167
+ attr_reader :lock
168
+
165
169
  # Checks to make sure that this environment did not have a manifest set in
166
170
  # its original environment.conf if Puppet is configured with
167
171
  # +disable_per_environment_manifest+ set true. If it did, the environment's
@@ -293,7 +297,13 @@ class Puppet::Node::Environment
293
297
  def modules
294
298
  if @modules.nil?
295
299
  module_references = []
296
- seen_modules = {}
300
+ project = Puppet.lookup(:bolt_project) { nil }
301
+ seen_modules = if project
302
+ module_references << project.to_h
303
+ { project.name => true }
304
+ else
305
+ {}
306
+ end
297
307
  modulepath.each do |path|
298
308
  Dir.entries(path).each do |name|
299
309
  next unless Puppet::Module.is_module_directory?(name, path)
@@ -97,6 +97,11 @@ module Pal
97
97
  internal_compiler.evaluate_additions
98
98
  end
99
99
 
100
+ # Attempts to evaluate AST for node defnintions https://puppet.com/docs/puppet/latest/lang_node_definitions.html
101
+ # if there are any.
102
+ def evaluate_ast_node
103
+ internal_compiler.evaluate_ast_node
104
+ end
100
105
  end
101
106
 
102
107
  end
@@ -422,37 +422,8 @@ module Pal
422
422
  # TRANSLATORS, the string "For puppet PAL" is not user facing
423
423
  Puppet.override({:current_environment => apply_environment}, "For puppet PAL") do
424
424
  begin
425
- # support the following features when evaluating puppet code
426
- # * $facts with facts from host running the script
427
- # * $settings with 'settings::*' namespace populated, and '$settings::all_local' hash
428
- # * $trusted as setup when using puppet apply
429
- # * an environment
430
- #
431
-
432
- # fixup trusted information
433
425
  node.sanitize()
434
-
435
426
  compiler = create_internal_compiler(internal_compiler_class, node)
436
- # compiler = Puppet::Parser::ScriptCompiler.new(node.environment, node.name)
437
- topscope = compiler.topscope
438
-
439
- # When scripting the trusted data are always local, but set them anyway
440
- # When compiling for a catalog, the catalog compiler does this
441
- unless internal_compiler_class == :catalog
442
- topscope.set_trusted(node.trusted_data)
443
-
444
- # Server facts are always about the local node's version etc.
445
- topscope.set_server_facts(node.server_facts)
446
-
447
- # Set $facts for the node running the script
448
- facts_hash = node.facts.nil? ? {} : node.facts.values
449
- topscope.set_facts(facts_hash)
450
-
451
- # create the $settings:: variables
452
- topscope.merge_settings(node.environment.name, false)
453
- end
454
-
455
- add_variables(topscope, pal_variables)
456
427
 
457
428
  case internal_compiler_class
458
429
  when :script
@@ -468,6 +439,10 @@ module Pal
468
439
  # TRANSLATORS: Do not translate, symbolic name
469
440
  Puppet.override(overrides, "PAL::with_#{internal_compiler_class}_compiler") do
470
441
  compiler.compile do | compiler_yield |
442
+ # In case the varaibles passed to the compiler are PCore types defined in modules, they
443
+ # need to be deserialized and added from within the this scope, so that loaders are
444
+ # available during deserizlization.
445
+ add_variables(compiler.topscope, Puppet::Pops::Serialization::FromDataConverter.convert(pal_variables))
471
446
  # wrap the internal compiler to prevent it from leaking in the PAL API
472
447
  if block_given?
473
448
  yield(pal_compiler)
@@ -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)
@@ -51,7 +51,7 @@ end
51
51
 
52
52
  class Puppet::Parser::AST::Regex < Puppet::Parser::AST::Leaf
53
53
  def initialize(hash)
54
- super
54
+ super(**hash)
55
55
  # transform value from hash options unless it is already a regular expression
56
56
  @value = Regexp.new(@value) unless @value.is_a?(Regexp)
57
57
  end
@@ -13,12 +13,6 @@ class Puppet::Parser::AST::PopsBridge
13
13
  # expression.
14
14
  #
15
15
  class Expression < Puppet::Parser::AST::Leaf
16
-
17
- def initialize args
18
- super
19
- @@evaluator ||= Puppet::Pops::Parser::EvaluatingParser.new()
20
- end
21
-
22
16
  def to_s
23
17
  Puppet::Pops::Model::ModelTreeDumper.new.dump(@value)
24
18
  end
@@ -29,8 +23,9 @@ class Puppet::Parser::AST::PopsBridge
29
23
  end
30
24
 
31
25
  def evaluate(scope)
32
- object = @@evaluator.evaluate(scope, @value)
33
- @@evaluator.convert_to_3x(object, scope)
26
+ evaluator = Puppet::Pops::Parser::EvaluatingParser.singleton
27
+ object = evaluator.evaluate(scope, @value)
28
+ evaluator.convert_to_3x(object, scope)
34
29
  end
35
30
 
36
31
  # Adapts to 3x where top level constructs needs to have each to iterate over children. Short circuit this
@@ -62,10 +57,6 @@ class Puppet::Parser::AST::PopsBridge
62
57
  end
63
58
 
64
59
  class ExpressionSupportingReturn < Expression
65
- def initialize args
66
- super
67
- end
68
-
69
60
  def evaluate(scope)
70
61
  return catch(:return) do
71
62
  return catch(:next) do
@@ -87,7 +78,6 @@ class Puppet::Parser::AST::PopsBridge
87
78
  @program_model = program_model
88
79
  @context = context
89
80
  @ast_transformer ||= Puppet::Pops::Model::AstTransformer.new(@context[:file])
90
- @@evaluator ||= Puppet::Pops::Parser::EvaluatingParser.new()
91
81
  end
92
82
 
93
83
  # This is the 3x API, the 3x AST searches through all code to find the instructions that can be instantiated.
@@ -122,7 +112,7 @@ class Puppet::Parser::AST::PopsBridge
122
112
  end
123
113
 
124
114
  def evaluate(scope)
125
- @@evaluator.evaluate(scope, program_model)
115
+ Puppet::Pops::Parser::EvaluatingParser.singleton.evaluate(scope, program_model)
126
116
  end
127
117
 
128
118
  # Adapts to 3x where top level constructs needs to have each to iterate over children. Short circuit this
@@ -178,8 +168,9 @@ class Puppet::Parser::AST::PopsBridge
178
168
  #
179
169
  scope = obtain_scope
180
170
  if scope
171
+ evaluator = Puppet::Pops::Parser::EvaluatingParser.singleton
181
172
  typed_parameters.each do |p|
182
- result[p.name] = @@evaluator.evaluate(scope, p.type_expr)
173
+ result[p.name] = evaluator.evaluate(scope, p.type_expr)
183
174
  end
184
175
  end
185
176
  result
@@ -348,6 +348,34 @@ class Puppet::Parser::Compiler
348
348
  end
349
349
  end
350
350
 
351
+
352
+ # If ast nodes are enabled, then see if we can find and evaluate one.
353
+ #
354
+ # @api private
355
+ def evaluate_ast_node
356
+ krt = environment.known_resource_types
357
+ return unless krt.nodes? #ast_nodes?
358
+
359
+ # Now see if we can find the node.
360
+ astnode = nil
361
+ @node.names.each do |name|
362
+ astnode = krt.node(name.to_s.downcase)
363
+ break if astnode
364
+ end
365
+
366
+ unless (astnode ||= krt.node("default"))
367
+ raise Puppet::ParseError, _("Could not find node statement with name 'default' or '%{names}'") % { names: node.names.join(", ") }
368
+ end
369
+
370
+ # Create a resource to model this node, and then add it to the list
371
+ # of resources.
372
+ resource = astnode.ensure_in_catalog(topscope)
373
+
374
+ resource.evaluate
375
+
376
+ @node_scope = topscope.class_scope(astnode)
377
+ end
378
+
351
379
  # Evaluates each specified class in turn. If there are any classes that
352
380
  # can't be found, an error is raised. This method really just creates resource objects
353
381
  # that point back to the classes, and then the resources are themselves
@@ -420,7 +448,7 @@ class Puppet::Parser::Compiler
420
448
  # using the top scope.
421
449
  def newscope(parent, options = {})
422
450
  parent ||= topscope
423
- scope = Puppet::Parser::Scope.new(self, options)
451
+ scope = Puppet::Parser::Scope.new(self, **options)
424
452
  scope.parent = parent
425
453
  scope
426
454
  end
@@ -486,31 +514,6 @@ class Puppet::Parser::Compiler
486
514
  krt.capability_mappings.clear # No longer needed
487
515
  end
488
516
 
489
- # If ast nodes are enabled, then see if we can find and evaluate one.
490
- def evaluate_ast_node
491
- krt = environment.known_resource_types
492
- return unless krt.nodes? #ast_nodes?
493
-
494
- # Now see if we can find the node.
495
- astnode = nil
496
- @node.names.each do |name|
497
- astnode = krt.node(name.to_s.downcase)
498
- break if astnode
499
- end
500
-
501
- unless (astnode ||= krt.node("default"))
502
- raise Puppet::ParseError, _("Could not find node statement with name 'default' or '%{names}'") % { names: node.names.join(", ") }
503
- end
504
-
505
- # Create a resource to model this node, and then add it to the list
506
- # of resources.
507
- resource = astnode.ensure_in_catalog(topscope)
508
-
509
- resource.evaluate
510
-
511
- @node_scope = topscope.class_scope(astnode)
512
- end
513
-
514
517
  # Evaluate our collections and return true if anything returned an object.
515
518
  # The 'true' is used to continue a loop, so it's important.
516
519
  def evaluate_collections
@@ -777,13 +780,7 @@ class Puppet::Parser::Compiler
777
780
  SETTINGS = 'settings'.freeze
778
781
 
779
782
  def create_settings_scope
780
- resource_types = environment.known_resource_types
781
- settings_type = resource_types.hostclass(SETTINGS)
782
- if settings_type.nil?
783
- settings_type = Puppet::Resource::Type.new(:hostclass, SETTINGS)
784
- resource_types.add(settings_type)
785
- end
786
-
783
+ settings_type = create_settings_type
787
784
  settings_resource = Puppet::Parser::Resource.new('class', SETTINGS, :scope => @topscope)
788
785
 
789
786
  @catalog.add_resource(settings_resource)
@@ -794,6 +791,19 @@ class Puppet::Parser::Compiler
794
791
  scope.merge_settings(environment.name)
795
792
  end
796
793
 
794
+ def create_settings_type
795
+ environment.lock.synchronize do
796
+ resource_types = environment.known_resource_types
797
+ settings_type = resource_types.hostclass(SETTINGS)
798
+ if settings_type.nil?
799
+ settings_type = Puppet::Resource::Type.new(:hostclass, SETTINGS)
800
+ resource_types.add(settings_type)
801
+ end
802
+
803
+ settings_type
804
+ end
805
+ end
806
+
797
807
  # Return an array of all of the unevaluated resources. These will be definitions,
798
808
  # which need to get evaluated into native resources.
799
809
  def unevaluated_resources
@@ -1,6 +1,8 @@
1
1
  class Puppet::Parser::Compiler
2
2
  # Validator that asserts that all capability resources that are referenced by 'consume' or 'require' has
3
3
  # been exported by some other resource in the environment
4
+ #
5
+ # @deprecated application orchestration will be removed in puppet 7
4
6
  class CatalogValidator::EnvironmentRelationshipValidator < CatalogValidator
5
7
 
6
8
  def validate
@@ -1,5 +1,7 @@
1
1
  class Puppet::Parser::Compiler
2
2
  # Validator that asserts that only application components can appear inside a site.
3
+ #
4
+ # @deprecated application orchestration will be removed in puppet 7
3
5
  class CatalogValidator::SiteValidator < CatalogValidator
4
6
  def self.validation_stage?(stage)
5
7
  PRE_FINISH.equal?(stage)
@@ -1,5 +1,6 @@
1
1
  require 'puppet/parser/compiler'
2
2
 
3
+ # @deprecated application orchestration will be removed in puppet 7
3
4
  class Puppet::Parser::EnvironmentCompiler < Puppet::Parser::Compiler
4
5
  def self.compile(env, code_id=nil)
5
6
  begin
@@ -16,7 +17,7 @@ class Puppet::Parser::EnvironmentCompiler < Puppet::Parser::Compiler
16
17
  end
17
18
 
18
19
  def initialize(node, options = {})
19
- super
20
+ super(node, **options)
20
21
  @overridden_functions = {}
21
22
  end
22
23
 
@@ -54,6 +55,8 @@ class Puppet::Parser::EnvironmentCompiler < Puppet::Parser::Compiler
54
55
  end
55
56
 
56
57
  def compile
58
+ Puppet.deprecation_warning("Application orchestration is deprecated. See https://puppet.com/docs/puppet/5.5/deprecated_language.html")
59
+
57
60
  add_function_overrides
58
61
  begin
59
62
  Puppet.override(@context_overrides, _("For compiling environment catalog %{env}") % { env: environment.name }) do
@@ -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
@@ -78,28 +79,32 @@ module Puppet::Parser::Functions
78
79
  attr_accessor :module
79
80
  end
80
81
 
82
+ @environment_module_lock = Puppet::Concurrent::Lock.new
83
+
81
84
  # Get the module that functions are mixed into corresponding to an
82
85
  # environment
83
86
  #
84
87
  # @api private
85
88
  def self.environment_module(env)
86
- AnonymousModuleAdapter.adapt(env) do |a|
87
- a.module ||= Module.new do
88
- @metadata = {}
89
+ @environment_module_lock.synchronize do
90
+ AnonymousModuleAdapter.adapt(env) do |a|
91
+ a.module ||= Module.new do
92
+ @metadata = {}
89
93
 
90
- def self.all_function_info
91
- @metadata
92
- end
94
+ def self.all_function_info
95
+ @metadata
96
+ end
93
97
 
94
- def self.get_function_info(name)
95
- @metadata[name]
96
- end
98
+ def self.get_function_info(name)
99
+ @metadata[name]
100
+ end
97
101
 
98
- def self.add_function_info(name, info)
99
- @metadata[name] = info
102
+ def self.add_function_info(name, info)
103
+ @metadata[name] = info
104
+ end
100
105
  end
101
- end
102
- end.module
106
+ end.module
107
+ end
103
108
  end
104
109
 
105
110
  # Create a new Puppet DSL function.