puppet 6.13.0-x64-mingw32 → 6.18.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 (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
@@ -6,4 +6,22 @@ class Puppet::Indirector::Status::Rest < Puppet::Indirector::REST
6
6
  desc "Get puppet master's status via REST. Useful because it tests the health
7
7
  of both the web server and the indirector."
8
8
 
9
+ def find(request)
10
+ return super unless use_http_client?
11
+
12
+ session = Puppet.lookup(:http_session)
13
+ api = session.route_to(:puppet)
14
+ _, status = api.get_status(request.key)
15
+ status
16
+ rescue Puppet::HTTP::ResponseError => e
17
+ if e.response.code == 404
18
+ return nil unless request.options[:fail_on_404]
19
+
20
+ _, body = parse_response(e.response.nethttp)
21
+ msg = _("Find %{uri} resulted in 404 with the message: %{body}") % { uri: elide(e.response.url.path, 100), body: body }
22
+ raise Puppet::Error, msg
23
+ else
24
+ raise convert_to_http_error(e.response.nethttp)
25
+ end
26
+ end
9
27
  end
@@ -1,3 +1,5 @@
1
+ require 'puppet/concurrent/synchronized'
2
+
1
3
  module Puppet
2
4
  module Pops
3
5
  require 'puppet/pops/loaders'
@@ -22,6 +24,10 @@ module Puppet
22
24
  require 'puppet/pops/loader/predefined_loader'
23
25
  require 'puppet/pops/loader/generic_plan_instantiator'
24
26
  require 'puppet/pops/loader/puppet_plan_instantiator'
27
+
28
+ # The implementation of synchronized applies it to all subclasses so we
29
+ # want to add it to be base class after any subclasses are created
30
+ Loader.include Puppet::Concurrent::Synchronized
25
31
  end
26
32
  end
27
33
 
@@ -70,68 +70,68 @@ module Manager
70
70
  # @dsl type
71
71
  # @api public
72
72
  def newtype(name, options = {}, &block)
73
- # Handle backward compatibility
74
- unless options.is_a?(Hash)
75
- #TRANSLATORS 'Puppet::Type.newtype' should not be translated
76
- Puppet.warning(_("Puppet::Type.newtype(%{name}) now expects a hash as the second argument, not %{argument}") %
77
- { name: name, argument: options.inspect})
78
- end
79
-
80
- # First make sure we don't have a method sitting around
81
- name = name.intern
82
- newmethod = "new#{name}"
73
+ @manager_lock.synchronize do
74
+ # Handle backward compatibility
75
+ unless options.is_a?(Hash)
76
+ #TRANSLATORS 'Puppet::Type.newtype' should not be translated
77
+ Puppet.warning(_("Puppet::Type.newtype(%{name}) now expects a hash as the second argument, not %{argument}") %
78
+ { name: name, argument: options.inspect})
79
+ end
83
80
 
84
- # Used for method manipulation.
85
- selfobj = singleton_class
81
+ # First make sure we don't have a method sitting around
82
+ name = name.intern
83
+ newmethod = "new#{name}"
86
84
 
87
- @types ||= {}
85
+ # Used for method manipulation.
86
+ selfobj = singleton_class
88
87
 
89
- if @types.include?(name)
90
- if self.respond_to?(newmethod)
91
- # Remove the old newmethod
92
- selfobj.send(:remove_method,newmethod)
88
+ if @types.include?(name)
89
+ if self.respond_to?(newmethod)
90
+ # Remove the old newmethod
91
+ selfobj.send(:remove_method,newmethod)
92
+ end
93
93
  end
94
- end
95
-
96
- # Then create the class.
97
94
 
98
- klass = genclass(
99
- name,
100
- :parent => Puppet::Type,
101
- :overwrite => true,
102
- :hash => @types,
103
- :attributes => options,
104
- &block
105
- )
106
-
107
- # Now define a "new<type>" method for convenience.
108
- if self.respond_to? newmethod
109
- # Refuse to overwrite existing methods like 'newparam' or 'newtype'.
110
- #TRANSLATORS 'new%{method}' will become a method name, do not translate this string
111
- Puppet.warning(_("'new%{method}' method already exists; skipping") % { method: name.to_s })
112
- else
113
- selfobj.send(:define_method, newmethod) do |*args|
114
- klass.new(*args)
95
+ # Then create the class.
96
+
97
+ klass = genclass(
98
+ name,
99
+ :parent => Puppet::Type,
100
+ :overwrite => true,
101
+ :hash => @types,
102
+ :attributes => options,
103
+ &block
104
+ )
105
+
106
+ # Now define a "new<type>" method for convenience.
107
+ if self.respond_to? newmethod
108
+ # Refuse to overwrite existing methods like 'newparam' or 'newtype'.
109
+ #TRANSLATORS 'new%{method}' will become a method name, do not translate this string
110
+ Puppet.warning(_("'new%{method}' method already exists; skipping") % { method: name.to_s })
111
+ else
112
+ selfobj.send(:define_method, newmethod) do |*args|
113
+ klass.new(*args)
114
+ end
115
115
  end
116
- end
117
116
 
118
- # If they've got all the necessary methods defined and they haven't
119
- # already added the property, then do so now.
120
- klass.ensurable if klass.ensurable? and ! klass.validproperty?(:ensure)
117
+ # If they've got all the necessary methods defined and they haven't
118
+ # already added the property, then do so now.
119
+ klass.ensurable if klass.ensurable? and ! klass.validproperty?(:ensure)
121
120
 
122
- # Now set up autoload any providers that might exist for this type.
121
+ # Now set up autoload any providers that might exist for this type.
123
122
 
124
- klass.providerloader = Puppet::Util::Autoload.new(klass, "puppet/provider/#{klass.name}")
123
+ klass.providerloader = Puppet::Util::Autoload.new(klass, "puppet/provider/#{klass.name}")
125
124
 
126
- # We have to load everything so that we can figure out the default provider.
127
- klass.providerloader.loadall(Puppet.lookup(:current_environment))
128
- klass.providify unless klass.providers.empty?
125
+ # We have to load everything so that we can figure out the default provider.
126
+ klass.providerloader.loadall(Puppet.lookup(:current_environment))
127
+ klass.providify unless klass.providers.empty?
129
128
 
130
- loc = block_given? ? block.source_location : nil
131
- uri = loc.nil? ? nil : URI("#{Puppet::Util.path_to_uri(loc[0])}?line=#{loc[1]}")
132
- Puppet::Pops::Loaders.register_runtime3_type(name, uri)
129
+ loc = block_given? ? block.source_location : nil
130
+ uri = loc.nil? ? nil : URI("#{Puppet::Util.path_to_uri(loc[0])}?line=#{loc[1]}")
131
+ Puppet::Pops::Loaders.register_runtime3_type(name, uri)
133
132
 
134
- klass
133
+ klass
134
+ end
135
135
  end
136
136
 
137
137
  # Removes an existing type.
@@ -151,47 +151,47 @@ module Manager
151
151
  # @return [Puppet::Type, nil] the type or nil if the type was not defined and could not be loaded
152
152
  #
153
153
  def type(name)
154
- # Avoid loading if name obviously is not a type name
155
- if name.to_s.include?(':')
156
- return nil
157
- end
154
+ @manager_lock.synchronize do
155
+ # Avoid loading if name obviously is not a type name
156
+ if name.to_s.include?(':')
157
+ return nil
158
+ end
158
159
 
159
- @types ||= {}
160
+ # We are overwhelmingly symbols here, which usually match, so it is worth
161
+ # having this special-case to return quickly. Like, 25K symbols vs. 300
162
+ # strings in this method. --daniel 2012-07-17
163
+ return @types[name] if @types.include? name
160
164
 
161
- # We are overwhelmingly symbols here, which usually match, so it is worth
162
- # having this special-case to return quickly. Like, 25K symbols vs. 300
163
- # strings in this method. --daniel 2012-07-17
164
- return @types[name] if @types.include? name
165
+ # Try mangling the name, if it is a string.
166
+ if name.is_a? String
167
+ name = name.downcase.intern
168
+ return @types[name] if @types.include? name
169
+ end
170
+ # Try loading the type.
171
+ if typeloader.load(name, Puppet.lookup(:current_environment))
172
+ #TRANSLATORS 'puppet/type/%{name}' should not be translated
173
+ Puppet.warning(_("Loaded puppet/type/%{name} but no class was created") % { name: name }) unless @types.include? name
174
+ elsif !Puppet[:always_retry_plugins]
175
+ # PUP-5482 - Only look for a type once if plugin retry is disabled
176
+ @types[name] = nil
177
+ end
165
178
 
166
- # Try mangling the name, if it is a string.
167
- if name.is_a? String
168
- name = name.downcase.intern
169
- return @types[name] if @types.include? name
170
- end
171
- # Try loading the type.
172
- if typeloader.load(name, Puppet.lookup(:current_environment))
173
- #TRANSLATORS 'puppet/type/%{name}' should not be translated
174
- Puppet.warning(_("Loaded puppet/type/%{name} but no class was created") % { name: name }) unless @types.include? name
175
- elsif !Puppet[:always_retry_plugins]
176
- # PUP-5482 - Only look for a type once if plugin retry is disabled
177
- @types[name] = nil
179
+ # ...and I guess that is that, eh.
180
+ return @types[name]
178
181
  end
179
-
180
- # ...and I guess that is that, eh.
181
- return @types[name]
182
182
  end
183
183
 
184
184
  # Creates a loader for Puppet types.
185
185
  # Defaults to an instance of {Puppet::Util::Autoload} if no other auto loader has been set.
186
186
  # @return [Puppet::Util::Autoload] the loader to use.
187
187
  # @api private
188
- def typeloader
189
- unless defined?(@typeloader)
190
- @typeloader = Puppet::Util::Autoload.new(self, "puppet/type")
191
- end
188
+ def typeloader
189
+ unless defined?(@typeloader)
190
+ @typeloader = Puppet::Util::Autoload.new(self, "puppet/type")
191
+ end
192
192
 
193
- @typeloader
194
- end
193
+ @typeloader
194
+ end
195
195
  end
196
196
  end
197
197
 
@@ -107,8 +107,7 @@ class Puppet::Module
107
107
  define_method(type + '?') do
108
108
  type_subpath = subpath(location)
109
109
  unless Puppet::FileSystem.exist?(type_subpath)
110
- Puppet.debug("No #{type} found in subpath '#{type_subpath}' " +
111
- "(file / directory does not exist)")
110
+ Puppet.debug { "No #{type} found in subpath '#{type_subpath}' (file / directory does not exist)" }
112
111
  return false
113
112
  end
114
113
 
@@ -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)
@@ -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]
@@ -4,7 +4,7 @@
4
4
  class Puppet::Network::HTTP::BasePool
5
5
  def start(site, verifier, http)
6
6
  Puppet.debug("Starting connection for #{site}")
7
- if verifier
7
+ if site.use_ssl?
8
8
  verifier.setup_connection(http)
9
9
  begin
10
10
  http.start
@@ -26,6 +26,11 @@ class Puppet::Network::HTTP::BasePool
26
26
  socket = buffered_io.io
27
27
  return unless socket
28
28
 
29
- Puppet.debug("Using #{socket.ssl_version} with cipher #{socket.cipher.first}")
29
+ cipher = if Puppet::Util::Platform.jruby?
30
+ socket.cipher
31
+ else
32
+ socket.cipher.first
33
+ end
34
+ Puppet.debug("Using #{socket.ssl_version} with cipher #{cipher}")
30
35
  end
31
36
  end
@@ -20,9 +20,11 @@ module Puppet::Network::HTTP::Compression
20
20
  def uncompress_body(response)
21
21
  case response['content-encoding']
22
22
  when 'gzip'
23
+ Puppet.deprecation_warning(_('Puppet::Network::HTTP::Compression::Active#uncompress_body is deprecated.'))
23
24
  # ZLib::GzipReader has an associated encoding, by default Encoding.default_external
24
25
  return Zlib::GzipReader.new(StringIO.new(response.body), :encoding => Encoding::BINARY).read
25
26
  when 'deflate'
27
+ Puppet.deprecation_warning(_('Puppet::Network::HTTP::Compression::Active#uncompress_body is deprecated.'))
26
28
  return Zlib::Inflate.new.inflate(response.body)
27
29
  when nil, 'identity'
28
30
  return response.body
@@ -32,6 +34,7 @@ module Puppet::Network::HTTP::Compression
32
34
  end
33
35
 
34
36
  def uncompress(response)
37
+ Puppet.deprecation_warning(_('Puppet::Network::HTTP::Compression::Active#uncompress is deprecated.'))
35
38
  raise Net::HTTPError.new("No block passed", response) unless block_given?
36
39
 
37
40
  case response['content-encoding']
@@ -71,6 +74,7 @@ module Puppet::Network::HTTP::Compression
71
74
  end
72
75
 
73
76
  def uncompress(chunk)
77
+ Puppet.deprecation_warning(_('Puppet::Network::HTTP::Compression::ZlibAdapter#uncompress is deprecated.'))
74
78
  out = @uncompressor.inflate(chunk)
75
79
  @first = false
76
80
  return out
@@ -97,6 +101,7 @@ module Puppet::Network::HTTP::Compression
97
101
 
98
102
  module None
99
103
  def uncompress_body(response)
104
+ Puppet.deprecation_warning(_('Puppet::Network::HTTP::Compression::None#uncompress_body is deprecated.'))
100
105
  response.body
101
106
  end
102
107
 
@@ -105,12 +110,14 @@ module Puppet::Network::HTTP::Compression
105
110
  end
106
111
 
107
112
  def uncompress(response)
113
+ Puppet.deprecation_warning(_('Puppet::Network::HTTP::Compression::None#uncompress is deprecated.'))
108
114
  yield IdentityAdapter.new
109
115
  end
110
116
  end
111
117
 
112
118
  class IdentityAdapter
113
119
  def uncompress(chunk)
120
+ Puppet.deprecation_warning(_('Puppet::Network::HTTP::Compression::IdentityAdapter#uncompress is deprecated.'))
114
121
  chunk
115
122
  end
116
123
 
@@ -343,6 +343,8 @@ module Puppet::Network::HTTP
343
343
  end
344
344
 
345
345
  def with_connection(site, &block)
346
+ Puppet.deprecation_warning(_('Puppet::Network::HTTP::Connection is deprecated. Please use Puppet::Network::HTTP::ConnectionAdapter instead.'))
347
+
346
348
  response = nil
347
349
  @pool.with_connection(site, @verifier) do |conn|
348
350
  response = yield conn
@@ -0,0 +1,184 @@
1
+ class Puppet::Network::HTTP::ConnectionAdapter < Puppet::Network::HTTP::Connection
2
+ def initialize(host, port, options = {})
3
+ super(host, port, options)
4
+
5
+ @client = Puppet.runtime[:http]
6
+ end
7
+
8
+ def get(path, headers = {}, options = {})
9
+ headers ||= {}
10
+ options[:ssl_context] ||= resolve_ssl_context
11
+ options[:redirect_limit] ||= @redirect_limit
12
+
13
+ with_error_handling do
14
+ resp = @client.get(to_url(path), headers: headers, options: options)
15
+ resp.nethttp
16
+ end
17
+ end
18
+
19
+ def post(path, data, headers = nil, options = {})
20
+ headers ||= {}
21
+ headers['Content-Type'] ||= "application/x-www-form-urlencoded"
22
+ data ||= ''
23
+ options[:ssl_context] ||= resolve_ssl_context
24
+ options[:redirect_limit] ||= @redirect_limit
25
+
26
+ with_error_handling do
27
+ resp = @client.post(to_url(path), data, headers: headers, options: options)
28
+ resp.nethttp
29
+ end
30
+ end
31
+
32
+ def head(path, headers = {}, options = {})
33
+ headers ||= {}
34
+ options[:ssl_context] ||= resolve_ssl_context
35
+ options[:redirect_limit] ||= @redirect_limit
36
+
37
+ with_error_handling do
38
+ resp = @client.head(to_url(path), headers: headers, options: options)
39
+ resp.nethttp
40
+ end
41
+ end
42
+
43
+ def delete(path, headers = {'Depth' => 'Infinity'}, options = {})
44
+ headers ||= {}
45
+ options[:ssl_context] ||= resolve_ssl_context
46
+ options[:redirect_limit] ||= @redirect_limit
47
+
48
+ with_error_handling do
49
+ resp = @client.delete(to_url(path), headers: headers, options: options)
50
+ resp.nethttp
51
+ end
52
+ end
53
+
54
+ def put(path, data, headers = nil, options = {})
55
+ headers ||= {}
56
+ headers['Content-Type'] ||= "application/x-www-form-urlencoded"
57
+ data ||= ''
58
+ options[:ssl_context] ||= resolve_ssl_context
59
+ options[:redirect_limit] ||= @redirect_limit
60
+
61
+ with_error_handling do
62
+ resp = @client.put(to_url(path), data, headers: headers, options: options)
63
+ resp.nethttp
64
+ end
65
+ end
66
+
67
+ def request_get(*args, &block)
68
+ path, headers = *args
69
+ headers ||= {}
70
+ options = {
71
+ ssl_context: resolve_ssl_context,
72
+ redirect_limit: @redirect_limit
73
+ }
74
+
75
+ resp = @client.get(to_url(path), headers: headers, options: options) do |response|
76
+ yield response.nethttp if block_given?
77
+ end
78
+ resp.nethttp
79
+ end
80
+
81
+ def request_head(*args, &block)
82
+ path, headers = *args
83
+ headers ||= {}
84
+ options = {
85
+ ssl_context: resolve_ssl_context,
86
+ redirect_limit: @redirect_limit
87
+ }
88
+
89
+ response = @client.head(to_url(path), headers: headers, options: options)
90
+ yield response.nethttp if block_given?
91
+ response.nethttp
92
+ end
93
+
94
+ def request_post(*args, &block)
95
+ path, data, headers = *args
96
+ headers ||= {}
97
+ headers['Content-Type'] ||= "application/x-www-form-urlencoded"
98
+ options = {
99
+ ssl_context: resolve_ssl_context,
100
+ redirect_limit: @redirect_limit
101
+ }
102
+
103
+ resp = @client.post(to_url(path), data, headers: headers, options: options) do |response|
104
+ yield response.nethttp if block_given?
105
+ end
106
+ resp.nethttp
107
+ end
108
+
109
+ private
110
+
111
+ # The old Connection class ignores the ssl_context on the Puppet stack,
112
+ # and always loads certs/keys based on what is currently in the filesystem.
113
+ # If the files are missing, it would attempt to bootstrap the certs/keys
114
+ # while in the process of making a network request, due to the call to
115
+ # Puppet.lookup(:ssl_host) in Puppet::SSL::Validator::DefaultValidator#setup_connection.
116
+ # This class doesn't preserve the boostrap behavior because that is handled
117
+ # outside of this class, and can only be triggered by running `puppet ssl` or
118
+ # `puppet agent`.
119
+ def resolve_ssl_context
120
+ # don't need an ssl context for http connections
121
+ return nil unless @site.use_ssl?
122
+
123
+ # if our verifier has an ssl_context, use that
124
+ ctx = @verifier.ssl_context
125
+ return ctx if ctx
126
+
127
+ # load available certs
128
+ cert = Puppet::X509::CertProvider.new
129
+ ssl = Puppet::SSL::SSLProvider.new
130
+ begin
131
+ password = cert.load_private_key_password
132
+ ssl.load_context(certname: Puppet[:certname], password: password)
133
+ rescue Puppet::SSL::SSLError => e
134
+ Puppet.log_exception(e)
135
+
136
+ # if we don't have cacerts, then create a root context that doesn't
137
+ # trust anything. The old code used to fallback to VERIFY_NONE,
138
+ # which we don't want to emulate.
139
+ ssl.create_root_context(cacerts: [])
140
+ end
141
+ end
142
+
143
+ def to_url(path)
144
+ if path =~ /^https?:\/\//
145
+ # The old Connection class accepts a URL as the request path, and sends
146
+ # it in "absolute-form" in the request line, e.g. GET https://puppet:8140/.
147
+ # See https://httpwg.org/specs/rfc7230.html#absolute-form. It just so happens
148
+ # to work because HTTP 1.1 servers are required to accept absolute-form even
149
+ # though clients are only supposed to send them to proxies, so the proxy knows
150
+ # what upstream server to CONNECT to. This method creates a URL using the
151
+ # scheme/host/port that the connection was created with, and appends the path
152
+ # and query portions of the absolute-form. The resulting request will use "origin-form"
153
+ # as it should have done all along.
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
158
+ else
159
+ URI("#{@site.addr}/#{normalize_path(path)}")
160
+ end
161
+ end
162
+
163
+ def normalize_path(path)
164
+ if path[0] == '/'
165
+ path[1..-1]
166
+ else
167
+ path
168
+ end
169
+ end
170
+
171
+ def with_error_handling(&block)
172
+ yield
173
+ rescue Puppet::HTTP::TooManyRedirects => e
174
+ raise Puppet::Network::HTTP::RedirectionLimitExceededException.new(_("Too many HTTP redirections for %{host}:%{port}") % { host: @host, port: @port }, e)
175
+ rescue Puppet::HTTP::HTTPError => e
176
+ Puppet.log_exception(e, e.message)
177
+ case e.cause
178
+ when Net::OpenTimeout, Net::ReadTimeout, Net::HTTPError, EOFError
179
+ raise e.cause
180
+ else
181
+ raise e
182
+ end
183
+ end
184
+ end