puppet 6.19.0-x64-mingw32 → 7.3.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 (513) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -16
  3. data/Gemfile +3 -4
  4. data/Gemfile.lock +33 -28
  5. data/README.md +1 -1
  6. data/conf/fileserver.conf +5 -10
  7. data/ext/build_defaults.yaml +1 -1
  8. data/ext/osx/file_mapping.yaml +0 -5
  9. data/ext/project_data.yaml +2 -14
  10. data/ext/redhat/puppet.spec.erb +0 -1
  11. data/ext/windows/service/daemon.rb +6 -5
  12. data/install.rb +21 -17
  13. data/lib/puppet.rb +11 -20
  14. data/lib/puppet/application.rb +182 -104
  15. data/lib/puppet/application/agent.rb +1 -0
  16. data/lib/puppet/application/apply.rb +3 -2
  17. data/lib/puppet/application/device.rb +101 -104
  18. data/lib/puppet/application/filebucket.rb +15 -11
  19. data/lib/puppet/application/script.rb +1 -0
  20. data/lib/puppet/application/ssl.rb +1 -1
  21. data/lib/puppet/application_support.rb +7 -0
  22. data/lib/puppet/configurer.rb +44 -36
  23. data/lib/puppet/configurer/plugin_handler.rb +21 -19
  24. data/lib/puppet/defaults.rb +71 -170
  25. data/lib/puppet/environments.rb +44 -75
  26. data/lib/puppet/face/config.rb +10 -0
  27. data/lib/puppet/face/epp.rb +12 -2
  28. data/lib/puppet/face/facts.rb +80 -6
  29. data/lib/puppet/face/help.rb +1 -1
  30. data/lib/puppet/face/node/clean.rb +8 -0
  31. data/lib/puppet/face/plugin.rb +5 -8
  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/ffi/windows.rb +12 -0
  36. data/lib/puppet/ffi/windows/api_types.rb +311 -0
  37. data/lib/puppet/ffi/windows/constants.rb +404 -0
  38. data/lib/puppet/ffi/windows/functions.rb +628 -0
  39. data/lib/puppet/ffi/windows/structs.rb +338 -0
  40. data/lib/puppet/file_serving/configuration.rb +0 -5
  41. data/lib/puppet/file_serving/configuration/parser.rb +6 -32
  42. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  43. data/lib/puppet/file_serving/mount.rb +1 -2
  44. data/lib/puppet/forge/repository.rb +0 -1
  45. data/lib/puppet/functions/epp.rb +1 -0
  46. data/lib/puppet/functions/inline_epp.rb +1 -0
  47. data/lib/puppet/generate/models/type/type.rb +4 -1
  48. data/lib/puppet/http.rb +22 -13
  49. data/lib/puppet/http/client.rb +164 -114
  50. data/lib/puppet/{network/resolver.rb → http/dns.rb} +2 -2
  51. data/lib/puppet/http/errors.rb +16 -0
  52. data/lib/puppet/http/external_client.rb +5 -7
  53. data/lib/puppet/{network/http → http}/factory.rb +8 -11
  54. data/lib/puppet/{network/http → http}/pool.rb +61 -26
  55. data/lib/puppet/{network/http/session.rb → http/pool_entry.rb} +2 -3
  56. data/lib/puppet/http/proxy.rb +137 -0
  57. data/lib/puppet/http/redirector.rb +4 -12
  58. data/lib/puppet/http/resolver.rb +5 -15
  59. data/lib/puppet/http/resolver/server_list.rb +6 -10
  60. data/lib/puppet/http/resolver/settings.rb +4 -7
  61. data/lib/puppet/http/resolver/srv.rb +7 -11
  62. data/lib/puppet/http/response.rb +36 -54
  63. data/lib/puppet/http/response_converter.rb +24 -0
  64. data/lib/puppet/http/response_net_http.rb +42 -0
  65. data/lib/puppet/http/retry_after_handler.rb +4 -13
  66. data/lib/puppet/http/service.rb +12 -26
  67. data/lib/puppet/http/service/ca.rb +11 -22
  68. data/lib/puppet/http/service/compiler.rb +22 -69
  69. data/lib/puppet/http/service/file_server.rb +18 -27
  70. data/lib/puppet/http/service/puppetserver.rb +26 -12
  71. data/lib/puppet/http/service/report.rb +8 -10
  72. data/lib/puppet/http/session.rb +11 -20
  73. data/lib/puppet/{network/http → http}/site.rb +1 -2
  74. data/lib/puppet/indirector/catalog/rest.rb +2 -4
  75. data/lib/puppet/indirector/fact_search.rb +60 -0
  76. data/lib/puppet/indirector/facts/facter.rb +24 -3
  77. data/lib/puppet/indirector/facts/json.rb +27 -0
  78. data/lib/puppet/indirector/facts/rest.rb +3 -22
  79. data/lib/puppet/indirector/facts/yaml.rb +3 -58
  80. data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -9
  81. data/lib/puppet/indirector/file_content/rest.rb +2 -6
  82. data/lib/puppet/indirector/file_metadata/rest.rb +3 -9
  83. data/lib/puppet/indirector/file_server.rb +1 -8
  84. data/lib/puppet/indirector/generic_http.rb +0 -11
  85. data/lib/puppet/indirector/json.rb +5 -1
  86. data/lib/puppet/indirector/node/json.rb +8 -0
  87. data/lib/puppet/indirector/node/rest.rb +2 -4
  88. data/lib/puppet/indirector/report/json.rb +34 -0
  89. data/lib/puppet/indirector/report/rest.rb +3 -8
  90. data/lib/puppet/indirector/request.rb +0 -101
  91. data/lib/puppet/indirector/rest.rb +12 -263
  92. data/lib/puppet/module_tool/applications.rb +0 -1
  93. data/lib/puppet/module_tool/applications/installer.rb +48 -2
  94. data/lib/puppet/module_tool/errors/shared.rb +17 -2
  95. data/lib/puppet/network/authconfig.rb +2 -96
  96. data/lib/puppet/network/authorization.rb +13 -35
  97. data/lib/puppet/network/formats.rb +69 -1
  98. data/lib/puppet/network/http.rb +3 -3
  99. data/lib/puppet/network/http/api/indirected_routes.rb +2 -20
  100. data/lib/puppet/network/http/api/master/v3.rb +11 -13
  101. data/lib/puppet/network/http/connection.rb +247 -316
  102. data/lib/puppet/network/http/handler.rb +0 -1
  103. data/lib/puppet/network/http_pool.rb +16 -34
  104. data/lib/puppet/node.rb +1 -30
  105. data/lib/puppet/pal/json_catalog_encoder.rb +4 -0
  106. data/lib/puppet/pal/pal_impl.rb +73 -18
  107. data/lib/puppet/parser/ast/leaf.rb +3 -2
  108. data/lib/puppet/parser/ast/pops_bridge.rb +0 -38
  109. data/lib/puppet/parser/compiler.rb +0 -198
  110. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +14 -39
  111. data/lib/puppet/parser/resource.rb +0 -69
  112. data/lib/puppet/parser/templatewrapper.rb +1 -1
  113. data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
  114. data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -8
  115. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +3 -3
  116. data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
  117. data/lib/puppet/pops/issues.rb +0 -5
  118. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -8
  119. data/lib/puppet/pops/model/ast.pp +0 -42
  120. data/lib/puppet/pops/model/ast.rb +0 -290
  121. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  122. data/lib/puppet/pops/model/factory.rb +0 -45
  123. data/lib/puppet/pops/model/model_label_provider.rb +0 -5
  124. data/lib/puppet/pops/model/model_tree_dumper.rb +0 -22
  125. data/lib/puppet/pops/model/pn_transformer.rb +0 -16
  126. data/lib/puppet/pops/parser/egrammar.ra +0 -56
  127. data/lib/puppet/pops/parser/eparser.rb +1520 -1712
  128. data/lib/puppet/pops/parser/lexer2.rb +4 -4
  129. data/lib/puppet/pops/parser/parser_support.rb +0 -5
  130. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -24
  131. data/lib/puppet/pops/types/type_calculator.rb +0 -7
  132. data/lib/puppet/pops/types/type_parser.rb +0 -4
  133. data/lib/puppet/pops/types/types.rb +0 -1
  134. data/lib/puppet/pops/validation/checker4_0.rb +9 -37
  135. data/lib/puppet/pops/validation/tasks_checker.rb +0 -12
  136. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -2
  137. data/lib/puppet/provider.rb +0 -13
  138. data/lib/puppet/provider/nameservice.rb +0 -18
  139. data/lib/puppet/provider/package/apt.rb +4 -0
  140. data/lib/puppet/provider/package/dpkg.rb +0 -10
  141. data/lib/puppet/provider/package/gem.rb +23 -3
  142. data/lib/puppet/provider/package/pip.rb +0 -1
  143. data/lib/puppet/provider/package/pkg.rb +0 -4
  144. data/lib/puppet/provider/package/portage.rb +1 -1
  145. data/lib/puppet/provider/package/puppet_gem.rb +1 -4
  146. data/lib/puppet/provider/service/smf.rb +191 -73
  147. data/lib/puppet/provider/user/aix.rb +2 -2
  148. data/lib/puppet/provider/user/directoryservice.rb +0 -10
  149. data/lib/puppet/reference/configuration.rb +8 -5
  150. data/lib/puppet/reference/indirection.rb +1 -1
  151. data/lib/puppet/resource.rb +1 -89
  152. data/lib/puppet/resource/catalog.rb +1 -14
  153. data/lib/puppet/resource/type.rb +3 -119
  154. data/lib/puppet/resource/type_collection.rb +3 -48
  155. data/lib/puppet/runtime.rb +1 -2
  156. data/lib/puppet/settings.rb +88 -48
  157. data/lib/puppet/settings/alias_setting.rb +37 -0
  158. data/lib/puppet/settings/base_setting.rb +26 -2
  159. data/lib/puppet/settings/integer_setting.rb +17 -0
  160. data/lib/puppet/settings/port_setting.rb +15 -0
  161. data/lib/puppet/settings/priority_setting.rb +5 -4
  162. data/lib/puppet/ssl.rb +10 -6
  163. data/lib/puppet/ssl/base.rb +3 -5
  164. data/lib/puppet/ssl/certificate.rb +0 -6
  165. data/lib/puppet/ssl/certificate_request.rb +1 -12
  166. data/lib/puppet/ssl/certificate_signer.rb +6 -0
  167. data/lib/puppet/ssl/oids.rb +3 -1
  168. data/lib/puppet/ssl/ssl_provider.rb +17 -0
  169. data/lib/puppet/ssl/state_machine.rb +3 -1
  170. data/lib/puppet/ssl/verifier.rb +2 -0
  171. data/lib/puppet/test/test_helper.rb +1 -3
  172. data/lib/puppet/transaction.rb +1 -7
  173. data/lib/puppet/transaction/report.rb +2 -4
  174. data/lib/puppet/type.rb +0 -76
  175. data/lib/puppet/type/file.rb +5 -7
  176. data/lib/puppet/type/file/checksum.rb +1 -1
  177. data/lib/puppet/type/file/source.rb +1 -1
  178. data/lib/puppet/type/filebucket.rb +3 -3
  179. data/lib/puppet/type/package.rb +5 -13
  180. data/lib/puppet/type/user.rb +1 -1
  181. data/lib/puppet/util/autoload.rb +1 -8
  182. data/lib/puppet/util/execution.rb +0 -11
  183. data/lib/puppet/util/http_proxy.rb +2 -215
  184. data/lib/puppet/util/monkey_patches.rb +0 -46
  185. data/lib/puppet/util/posix.rb +54 -5
  186. data/lib/puppet/util/rdoc.rb +0 -7
  187. data/lib/puppet/util/retry_action.rb +1 -1
  188. data/lib/puppet/util/rubygems.rb +5 -1
  189. data/lib/puppet/util/run_mode.rb +9 -1
  190. data/lib/puppet/util/windows.rb +3 -8
  191. data/lib/puppet/util/windows/daemon.rb +360 -0
  192. data/lib/puppet/util/windows/error.rb +1 -0
  193. data/lib/puppet/util/windows/eventlog.rb +4 -9
  194. data/lib/puppet/util/windows/file.rb +8 -242
  195. data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
  196. data/lib/puppet/util/windows/process.rb +4 -226
  197. data/lib/puppet/util/windows/service.rb +9 -460
  198. data/lib/puppet/util/windows/string.rb +12 -13
  199. data/lib/puppet/util/yaml.rb +0 -22
  200. data/lib/puppet/vendor/require_vendored.rb +0 -1
  201. data/lib/puppet/version.rb +1 -1
  202. data/lib/puppet/x509.rb +5 -1
  203. data/lib/puppet/x509/cert_provider.rb +29 -1
  204. data/locales/puppet.pot +629 -1314
  205. data/man/man5/puppet.conf.5 +39 -99
  206. data/man/man8/puppet-agent.8 +2 -2
  207. data/man/man8/puppet-apply.8 +2 -2
  208. data/man/man8/puppet-catalog.8 +1 -1
  209. data/man/man8/puppet-config.8 +1 -1
  210. data/man/man8/puppet-describe.8 +1 -1
  211. data/man/man8/puppet-device.8 +2 -2
  212. data/man/man8/puppet-doc.8 +1 -1
  213. data/man/man8/puppet-epp.8 +1 -1
  214. data/man/man8/puppet-facts.8 +58 -9
  215. data/man/man8/puppet-filebucket.8 +6 -6
  216. data/man/man8/puppet-generate.8 +1 -1
  217. data/man/man8/puppet-help.8 +1 -1
  218. data/man/man8/puppet-lookup.8 +1 -1
  219. data/man/man8/puppet-module.8 +1 -58
  220. data/man/man8/puppet-node.8 +4 -1
  221. data/man/man8/puppet-parser.8 +1 -1
  222. data/man/man8/puppet-plugin.8 +1 -1
  223. data/man/man8/puppet-report.8 +4 -1
  224. data/man/man8/puppet-resource.8 +1 -1
  225. data/man/man8/puppet-script.8 +2 -2
  226. data/man/man8/puppet-ssl.8 +1 -1
  227. data/man/man8/puppet.8 +2 -2
  228. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
  229. data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
  230. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
  231. data/spec/integration/application/agent_spec.rb +151 -14
  232. data/spec/integration/application/apply_spec.rb +20 -1
  233. data/spec/integration/application/filebucket_spec.rb +16 -16
  234. data/spec/integration/application/help_spec.rb +2 -0
  235. data/spec/integration/application/plugin_spec.rb +23 -1
  236. data/spec/integration/defaults_spec.rb +7 -10
  237. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  238. data/spec/integration/indirector/file_content/file_server_spec.rb +0 -2
  239. data/spec/integration/indirector/file_metadata/file_server_spec.rb +0 -2
  240. data/spec/integration/network/http_pool_spec.rb +3 -21
  241. data/spec/integration/parser/catalog_spec.rb +0 -38
  242. data/spec/integration/parser/node_spec.rb +0 -9
  243. data/spec/integration/parser/pcore_resource_spec.rb +0 -37
  244. data/spec/integration/resource/type_collection_spec.rb +2 -6
  245. data/spec/integration/transaction_spec.rb +4 -9
  246. data/spec/integration/type/file_spec.rb +5 -4
  247. data/spec/integration/util/windows/adsi_spec.rb +3 -1
  248. data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
  249. data/spec/integration/util/windows/registry_spec.rb +0 -10
  250. data/spec/integration/util/windows/security_spec.rb +1 -1
  251. data/spec/lib/puppet_spec/puppetserver.rb +1 -1
  252. data/spec/lib/puppet_spec/settings.rb +7 -1
  253. data/spec/spec_helper.rb +3 -4
  254. data/spec/unit/agent_spec.rb +8 -8
  255. data/spec/unit/application/agent_spec.rb +0 -1
  256. data/spec/unit/application/config_spec.rb +224 -4
  257. data/spec/unit/application/facts_spec.rb +35 -0
  258. data/spec/unit/application/filebucket_spec.rb +41 -41
  259. data/spec/unit/application/ssl_spec.rb +2 -2
  260. data/spec/unit/application_spec.rb +51 -9
  261. data/spec/unit/certificate_factory_spec.rb +1 -1
  262. data/spec/unit/configurer/downloader_spec.rb +6 -2
  263. data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
  264. data/spec/unit/configurer_spec.rb +12 -9
  265. data/spec/unit/confine/feature_spec.rb +1 -1
  266. data/spec/unit/confine_spec.rb +8 -2
  267. data/spec/unit/context/trusted_information_spec.rb +2 -6
  268. data/spec/unit/defaults_spec.rb +26 -32
  269. data/spec/unit/environments_spec.rb +96 -22
  270. data/spec/unit/face/config_spec.rb +27 -32
  271. data/spec/unit/face/facts_spec.rb +4 -0
  272. data/spec/unit/face/node_spec.rb +14 -13
  273. data/spec/unit/face/plugin_spec.rb +73 -33
  274. data/spec/unit/file_bucket/file_spec.rb +1 -1
  275. data/spec/unit/file_serving/configuration/parser_spec.rb +22 -19
  276. data/spec/unit/file_serving/configuration_spec.rb +6 -12
  277. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  278. data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
  279. data/spec/unit/forge/module_release_spec.rb +2 -7
  280. data/spec/unit/functions/camelcase_spec.rb +1 -1
  281. data/spec/unit/functions/capitalize_spec.rb +1 -1
  282. data/spec/unit/functions/downcase_spec.rb +1 -1
  283. data/spec/unit/functions/inline_epp_spec.rb +26 -1
  284. data/spec/unit/functions/upcase_spec.rb +1 -1
  285. data/spec/unit/http/client_spec.rb +7 -8
  286. data/spec/unit/{network/resolver_spec.rb → http/dns_spec.rb} +3 -3
  287. data/spec/unit/http/external_client_spec.rb +4 -4
  288. data/spec/unit/{network/http → http}/factory_spec.rb +5 -11
  289. data/spec/unit/{network/http/session_spec.rb → http/pool_entry_spec.rb} +3 -3
  290. data/spec/unit/{network/http → http}/pool_spec.rb +12 -17
  291. data/spec/unit/{util/http_proxy_spec.rb → http/proxy_spec.rb} +2 -69
  292. data/spec/unit/http/resolver_spec.rb +13 -13
  293. data/spec/unit/http/service/compiler_spec.rb +49 -62
  294. data/spec/unit/http/service/file_server_spec.rb +3 -3
  295. data/spec/unit/http/service/puppetserver_spec.rb +34 -4
  296. data/spec/unit/http/service_spec.rb +1 -2
  297. data/spec/unit/http/session_spec.rb +16 -14
  298. data/spec/unit/{network/http → http}/site_spec.rb +3 -3
  299. data/spec/unit/indirector/face_spec.rb +0 -1
  300. data/spec/unit/indirector/facts/facter_spec.rb +104 -1
  301. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  302. data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
  303. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
  304. data/spec/unit/indirector/file_content/rest_spec.rb +0 -4
  305. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -4
  306. data/spec/unit/indirector/file_server_spec.rb +1 -15
  307. data/spec/unit/indirector/indirection_spec.rb +8 -12
  308. data/spec/unit/indirector/node/json_spec.rb +33 -0
  309. data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
  310. data/spec/unit/indirector/report/rest_spec.rb +2 -17
  311. data/spec/unit/indirector/report/yaml_spec.rb +72 -8
  312. data/spec/unit/indirector/request_spec.rb +0 -264
  313. data/spec/unit/indirector/rest_spec.rb +98 -752
  314. data/spec/unit/indirector_spec.rb +2 -2
  315. data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
  316. data/spec/unit/network/authconfig_spec.rb +2 -132
  317. data/spec/unit/network/authorization_spec.rb +2 -55
  318. data/spec/unit/network/formats_spec.rb +45 -4
  319. data/spec/unit/network/http/api/indirected_routes_spec.rb +1 -101
  320. data/spec/unit/network/http/api/master/v3_spec.rb +28 -7
  321. data/spec/unit/network/http/api_spec.rb +10 -0
  322. data/spec/unit/network/http/connection_spec.rb +19 -41
  323. data/spec/unit/network/http/handler_spec.rb +0 -6
  324. data/spec/unit/network/http_pool_spec.rb +0 -4
  325. data/spec/unit/node/environment_spec.rb +33 -21
  326. data/spec/unit/node_spec.rb +2 -54
  327. data/spec/unit/parser/compiler_spec.rb +3 -19
  328. data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
  329. data/spec/unit/parser/resource_spec.rb +14 -8
  330. data/spec/unit/parser/templatewrapper_spec.rb +4 -3
  331. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
  332. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +4 -7
  333. data/spec/unit/pops/loaders/loaders_spec.rb +6 -21
  334. data/spec/unit/pops/parser/parse_application_spec.rb +4 -22
  335. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +0 -1
  336. data/spec/unit/pops/parser/parse_capabilities_spec.rb +8 -21
  337. data/spec/unit/pops/parser/parse_site_spec.rb +20 -24
  338. data/spec/unit/pops/resource/resource_type_impl_spec.rb +0 -71
  339. data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
  340. data/spec/unit/pops/types/type_calculator_spec.rb +6 -6
  341. data/spec/unit/pops/types/type_factory_spec.rb +1 -1
  342. data/spec/unit/pops/validator/validator_spec.rb +61 -46
  343. data/spec/unit/pops/visitor_spec.rb +1 -1
  344. data/spec/unit/property_spec.rb +1 -0
  345. data/spec/unit/provider/nameservice_spec.rb +66 -122
  346. data/spec/unit/provider/package/apt_spec.rb +4 -8
  347. data/spec/unit/provider/package/base_spec.rb +6 -5
  348. data/spec/unit/provider/package/dpkg_spec.rb +0 -48
  349. data/spec/unit/provider/package/gem_spec.rb +32 -0
  350. data/spec/unit/provider/package/pacman_spec.rb +18 -12
  351. data/spec/unit/provider/package/pip_spec.rb +6 -11
  352. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
  353. data/spec/unit/provider/package/puppet_gem_spec.rb +3 -2
  354. data/spec/unit/provider/service/smf_spec.rb +401 -165
  355. data/spec/unit/provider/service/windows_spec.rb +0 -1
  356. data/spec/unit/provider/user/aix_spec.rb +5 -0
  357. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  358. data/spec/unit/provider/user/pw_spec.rb +2 -0
  359. data/spec/unit/provider/user/useradd_spec.rb +1 -0
  360. data/spec/unit/provider_spec.rb +6 -20
  361. data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
  362. data/spec/unit/resource/type_collection_spec.rb +2 -22
  363. data/spec/unit/resource/type_spec.rb +1 -1
  364. data/spec/unit/resource_spec.rb +11 -66
  365. data/spec/unit/settings/http_extra_headers_spec.rb +2 -4
  366. data/spec/unit/settings/integer_setting_spec.rb +42 -0
  367. data/spec/unit/settings/port_setting_spec.rb +31 -0
  368. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  369. data/spec/unit/settings_spec.rb +560 -228
  370. data/spec/unit/ssl/base_spec.rb +36 -4
  371. data/spec/unit/ssl/certificate_request_spec.rb +15 -45
  372. data/spec/unit/ssl/certificate_spec.rb +2 -11
  373. data/spec/unit/ssl/ssl_provider_spec.rb +14 -8
  374. data/spec/unit/ssl/state_machine_spec.rb +0 -1
  375. data/spec/unit/ssl/verifier_spec.rb +0 -21
  376. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
  377. data/spec/unit/transaction/event_manager_spec.rb +14 -11
  378. data/spec/unit/transaction/report_spec.rb +0 -2
  379. data/spec/unit/transaction/resource_harness_spec.rb +2 -2
  380. data/spec/unit/transaction_spec.rb +57 -82
  381. data/spec/unit/type/file/checksum_spec.rb +6 -6
  382. data/spec/unit/type/file/content_spec.rb +1 -2
  383. data/spec/unit/type/file/ensure_spec.rb +1 -1
  384. data/spec/unit/type/file/mode_spec.rb +1 -1
  385. data/spec/unit/type/file/selinux_spec.rb +0 -2
  386. data/spec/unit/type/file/source_spec.rb +0 -1
  387. data/spec/unit/type/file_spec.rb +12 -12
  388. data/spec/unit/type/group_spec.rb +13 -6
  389. data/spec/unit/type/package_spec.rb +1 -1
  390. data/spec/unit/type/resources_spec.rb +7 -7
  391. data/spec/unit/type/service_spec.rb +1 -1
  392. data/spec/unit/type/tidy_spec.rb +0 -1
  393. data/spec/unit/type_spec.rb +22 -2
  394. data/spec/unit/util/at_fork_spec.rb +2 -2
  395. data/spec/unit/util/autoload_spec.rb +5 -1
  396. data/spec/unit/util/backups_spec.rb +1 -4
  397. data/spec/unit/util/execution_spec.rb +15 -40
  398. data/spec/unit/util/inifile_spec.rb +6 -14
  399. data/spec/unit/util/log_spec.rb +8 -7
  400. data/spec/unit/util/logging_spec.rb +3 -3
  401. data/spec/unit/util/monkey_patches_spec.rb +0 -6
  402. data/spec/unit/util/posix_spec.rb +363 -15
  403. data/spec/unit/util/rubygems_spec.rb +2 -2
  404. data/spec/unit/util/run_mode_spec.rb +21 -121
  405. data/spec/unit/util/selinux_spec.rb +76 -52
  406. data/spec/unit/util/storage_spec.rb +3 -1
  407. data/spec/unit/util/suidmanager_spec.rb +44 -41
  408. data/spec/unit/util/windows/string_spec.rb +1 -3
  409. data/spec/unit/util/yaml_spec.rb +0 -54
  410. data/spec/unit/util_spec.rb +13 -24
  411. metadata +66 -226
  412. data/conf/auth.conf +0 -150
  413. data/lib/puppet/application/cert.rb +0 -76
  414. data/lib/puppet/application/key.rb +0 -4
  415. data/lib/puppet/application/man.rb +0 -4
  416. data/lib/puppet/application/status.rb +0 -4
  417. data/lib/puppet/face/key.rb +0 -16
  418. data/lib/puppet/face/man.rb +0 -145
  419. data/lib/puppet/face/module/build.rb +0 -14
  420. data/lib/puppet/face/module/generate.rb +0 -14
  421. data/lib/puppet/face/module/search.rb +0 -103
  422. data/lib/puppet/face/status.rb +0 -51
  423. data/lib/puppet/indirector/certificate/file.rb +0 -9
  424. data/lib/puppet/indirector/certificate/rest.rb +0 -18
  425. data/lib/puppet/indirector/certificate_request/file.rb +0 -9
  426. data/lib/puppet/indirector/certificate_request/memory.rb +0 -7
  427. data/lib/puppet/indirector/certificate_request/rest.rb +0 -11
  428. data/lib/puppet/indirector/file_content/http.rb +0 -22
  429. data/lib/puppet/indirector/key/file.rb +0 -46
  430. data/lib/puppet/indirector/key/memory.rb +0 -7
  431. data/lib/puppet/indirector/ssl_file.rb +0 -162
  432. data/lib/puppet/indirector/status.rb +0 -3
  433. data/lib/puppet/indirector/status/local.rb +0 -12
  434. data/lib/puppet/indirector/status/rest.rb +0 -27
  435. data/lib/puppet/module_tool/applications/searcher.rb +0 -29
  436. data/lib/puppet/network/auth_config_parser.rb +0 -90
  437. data/lib/puppet/network/authstore.rb +0 -283
  438. data/lib/puppet/network/http/api/master/v3/authorization.rb +0 -18
  439. data/lib/puppet/network/http/api/master/v3/environment.rb +0 -88
  440. data/lib/puppet/network/http/base_pool.rb +0 -36
  441. data/lib/puppet/network/http/compression.rb +0 -127
  442. data/lib/puppet/network/http/connection_adapter.rb +0 -184
  443. data/lib/puppet/network/http/nocache_pool.rb +0 -28
  444. data/lib/puppet/network/rest_controller.rb +0 -2
  445. data/lib/puppet/network/rights.rb +0 -210
  446. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -66
  447. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -22
  448. data/lib/puppet/parser/environment_compiler.rb +0 -202
  449. data/lib/puppet/pops/types/enumeration.rb +0 -16
  450. data/lib/puppet/resource/capability_finder.rb +0 -154
  451. data/lib/puppet/rest/errors.rb +0 -15
  452. data/lib/puppet/rest/response.rb +0 -35
  453. data/lib/puppet/rest/route.rb +0 -85
  454. data/lib/puppet/rest/routes.rb +0 -135
  455. data/lib/puppet/ssl/host.rb +0 -505
  456. data/lib/puppet/ssl/key.rb +0 -61
  457. data/lib/puppet/ssl/validator.rb +0 -61
  458. data/lib/puppet/ssl/validator/default_validator.rb +0 -209
  459. data/lib/puppet/ssl/validator/no_validator.rb +0 -22
  460. data/lib/puppet/ssl/verifier_adapter.rb +0 -58
  461. data/lib/puppet/status.rb +0 -40
  462. data/lib/puppet/util/connection.rb +0 -88
  463. data/lib/puppet/util/ssl.rb +0 -83
  464. data/lib/puppet/util/windows/api_types.rb +0 -309
  465. data/lib/puppet/util/windows/monkey_patches/dir.rb +0 -40
  466. data/lib/puppet/vendor/load_pathspec.rb +0 -1
  467. data/lib/puppet/vendor/pathspec/CHANGELOG.md +0 -2
  468. data/lib/puppet/vendor/pathspec/LICENSE +0 -201
  469. data/lib/puppet/vendor/pathspec/PUPPET_README.md +0 -6
  470. data/lib/puppet/vendor/pathspec/README.md +0 -53
  471. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +0 -122
  472. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +0 -275
  473. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +0 -17
  474. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +0 -14
  475. data/man/man8/puppet-key.8 +0 -126
  476. data/man/man8/puppet-man.8 +0 -76
  477. data/man/man8/puppet-status.8 +0 -108
  478. data/spec/integration/application/config_spec.rb +0 -74
  479. data/spec/integration/network/authconfig_spec.rb +0 -256
  480. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +0 -11
  481. data/spec/unit/application/man_spec.rb +0 -52
  482. data/spec/unit/capability_spec.rb +0 -414
  483. data/spec/unit/face/catalog_spec.rb +0 -6
  484. data/spec/unit/face/key_spec.rb +0 -9
  485. data/spec/unit/face/module/search_spec.rb +0 -231
  486. data/spec/unit/face/module_spec.rb +0 -3
  487. data/spec/unit/face/status_spec.rb +0 -9
  488. data/spec/unit/indirector/certificate/file_spec.rb +0 -14
  489. data/spec/unit/indirector/certificate/rest_spec.rb +0 -61
  490. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -14
  491. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -25
  492. data/spec/unit/indirector/key/file_spec.rb +0 -79
  493. data/spec/unit/indirector/ssl_file_spec.rb +0 -305
  494. data/spec/unit/indirector/status/local_spec.rb +0 -10
  495. data/spec/unit/indirector/status/rest_spec.rb +0 -50
  496. data/spec/unit/module_tool/applications/searcher_spec.rb +0 -38
  497. data/spec/unit/network/auth_config_parser_spec.rb +0 -115
  498. data/spec/unit/network/authstore_spec.rb +0 -422
  499. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +0 -57
  500. data/spec/unit/network/http/api/master/v3/environment_spec.rb +0 -185
  501. data/spec/unit/network/http/compression_spec.rb +0 -240
  502. data/spec/unit/network/http/nocache_pool_spec.rb +0 -64
  503. data/spec/unit/network/http_spec.rb +0 -9
  504. data/spec/unit/network/rights_spec.rb +0 -439
  505. data/spec/unit/parser/environment_compiler_spec.rb +0 -730
  506. data/spec/unit/pops/types/enumeration_spec.rb +0 -51
  507. data/spec/unit/resource/capability_finder_spec.rb +0 -143
  508. data/spec/unit/rest/route_spec.rb +0 -132
  509. data/spec/unit/ssl/host_spec.rb +0 -650
  510. data/spec/unit/ssl/key_spec.rb +0 -173
  511. data/spec/unit/ssl/validator_spec.rb +0 -278
  512. data/spec/unit/status_spec.rb +0 -45
  513. data/spec/unit/util/ssl_spec.rb +0 -91
@@ -49,7 +49,10 @@ module Puppet
49
49
  ]
50
50
  end]
51
51
  @isomorphic = type.isomorphic?
52
- @capability = type.is_capability?
52
+ # continue to emit capability as false when rendering the ERB
53
+ # template, so that pcore modules generated prior to puppet7 can be
54
+ # read by puppet7 and vice-versa.
55
+ @capability = false
53
56
  end
54
57
 
55
58
  def render(template)
@@ -1,23 +1,25 @@
1
1
  module Puppet
2
- module Network
3
- module HTTP
4
- require 'puppet/network/http/site'
5
- require 'puppet/network/http/session'
6
- require 'puppet/network/http/factory'
7
- require 'puppet/network/http/base_pool'
8
- require 'puppet/network/http/nocache_pool'
9
- require 'puppet/network/http/pool'
10
- require 'puppet/network/resolver'
11
- end
12
- end
13
-
14
- # @api private
2
+ # Contains an HTTP client for making network requests to puppet and other
3
+ # HTTP servers.
4
+ #
5
+ # @see Puppet::HTTP::Client
6
+ # @see Puppet::HTTP::HTTPError
7
+ # @see Puppet::HTTP::Response
8
+ # @api public
15
9
  module HTTP
16
10
  ACCEPT_ENCODING = "gzip;q=1.0,deflate;q=0.6,identity;q=0.3".freeze
17
11
  HEADER_PUPPET_VERSION = "X-Puppet-Version".freeze
18
12
 
19
13
  require 'puppet/http/errors'
14
+ require 'puppet/http/site'
15
+ require 'puppet/http/pool_entry'
16
+ require 'puppet/http/proxy'
17
+ require 'puppet/http/factory'
18
+ require 'puppet/http/pool'
19
+ require 'puppet/http/dns'
20
20
  require 'puppet/http/response'
21
+ require 'puppet/http/response_converter'
22
+ require 'puppet/http/response_net_http'
21
23
  require 'puppet/http/service'
22
24
  require 'puppet/http/service/ca'
23
25
  require 'puppet/http/service/compiler'
@@ -34,4 +36,11 @@ module Puppet
34
36
  require 'puppet/http/retry_after_handler'
35
37
  require 'puppet/http/external_client'
36
38
  end
39
+
40
+ # Legacy HTTP API
41
+ module Network
42
+ module HTTP
43
+ require 'puppet/network/http_pool'
44
+ end
45
+ end
37
46
  end
@@ -1,23 +1,96 @@
1
+ # The HTTP client provides methods for making `GET`, `POST`, etc requests to
2
+ # HTTP(S) servers. It also provides methods for resolving Puppetserver REST
3
+ # service endpoints using SRV records and settings (such as `server_list`,
4
+ # `server`, `ca_server`, etc). Once a service endpoint has been resolved, there
5
+ # are methods for making REST requests (such as getting a node, sending facts,
6
+ # etc).
1
7
  #
2
- # @api private
8
+ # The client uses persistent HTTP connections by default unless the `Connection:
9
+ # close` header is specified and supports streaming response bodies.
3
10
  #
4
- # The client contains a pool of persistent HTTP connections and creates HTTP
5
- # sessions.
11
+ # By default the client only trusts the Puppet CA for HTTPS connections. However,
12
+ # if the `include_system_store` request option is set to true, then Puppet will
13
+ # trust certificates in the puppet-agent CA bundle.
6
14
  #
15
+ # @example To access the HTTP client:
16
+ # client = Puppet.runtime[:http]
17
+ #
18
+ # @example To make an HTTP GET request:
19
+ # response = client.get(URI("http://www.example.com"))
20
+ #
21
+ # @example To make an HTTPS GET request, trusting the puppet CA and certs in Puppet's CA bundle:
22
+ # response = client.get(URI("https://www.example.com"), include_system_store: true)
23
+ #
24
+ # @example To use a URL containing special characters, such as spaces:
25
+ # response = client.get(URI(Puppet::Util.uri_encode("https://www.example.com/path to file")))
26
+ #
27
+ # @example To pass query parameters:
28
+ # response = client.get(URI("https://www.example.com"), query: {'q' => 'puppet'})
29
+ #
30
+ # @example To pass custom headers:
31
+ # response = client.get(URI("https://www.example.com"), headers: {'Accept-Content' => 'application/json'})
32
+ #
33
+ # @example To check if the response is successful (2xx):
34
+ # response = client.get(URI("http://www.example.com"))
35
+ # puts response.success?
36
+ #
37
+ # @example To get the response code and reason:
38
+ # response = client.get(URI("http://www.example.com"))
39
+ # unless response.success?
40
+ # puts "HTTP #{response.code} #{response.reason}"
41
+ # end
42
+ #
43
+ # @example To read response headers:
44
+ # response = client.get(URI("http://www.example.com"))
45
+ # puts response['Content-Type']
46
+ #
47
+ # @example To stream the response body:
48
+ # client.get(URI("http://www.example.com")) do |response|
49
+ # if response.success?
50
+ # response.read_body do |data|
51
+ # puts data
52
+ # end
53
+ # end
54
+ # end
55
+ #
56
+ # @example To handle exceptions:
57
+ # begin
58
+ # client.get(URI("https://www.example.com"))
59
+ # rescue Puppet::HTTP::ResponseError => e
60
+ # puts "HTTP #{e.response.code} #{e.response.reason}"
61
+ # rescue Puppet::HTTP::ConnectionError => e
62
+ # puts "Connection error #{e.message}"
63
+ # rescue Puppet::SSL::SSLError => e
64
+ # puts "SSL error #{e.message}"
65
+ # rescue Puppet::HTTP::HTTPError => e
66
+ # puts "General HTTP error #{e.message}"
67
+ # end
68
+ #
69
+ # @example To route to the `:puppet` service:
70
+ # session = client.create_session
71
+ # service = session.route_to(:puppet)
72
+ #
73
+ # @example To make a node request:
74
+ # node = service.get_node(Puppet[:certname], environment: 'production')
75
+ #
76
+ # @example To submit facts:
77
+ # facts = Puppet::Indirection::Facts.indirection.find(Puppet[:certname])
78
+ # service.put_facts(Puppet[:certname], environment: 'production', facts: facts)
79
+ #
80
+ # @example To submit a report to the `:report` service:
81
+ # report = Puppet::Transaction::Report.new
82
+ # service = session.route_to(:report)
83
+ # service.put_report(Puppet[:certname], report, environment: 'production')
84
+ #
85
+ # @api public
7
86
  class Puppet::HTTP::Client
8
87
 
9
- # @api private
10
- # @return [Puppet::Network::HTTP::Pool] the pool instance associated with
11
- # this client
12
88
  attr_reader :pool
13
89
 
90
+ # Create a new http client instance. Use `Puppet.runtime[:http]` to get
91
+ # the current client instead of creating an instance of this class.
14
92
  #
15
- # @api private
16
- #
17
- # Create a new http client instance. The client contains a pool of persistent
18
- # HTTP connections and creates HTTP sessions.
19
- #
20
- # @param [Puppet::Network::HTTP::Pool] pool pool of persistent Net::HTTP
93
+ # @param [Puppet::HTTP::Pool] pool pool of persistent Net::HTTP
21
94
  # connections
22
95
  # @param [Puppet::SSL::SSLContext] ssl_context ssl context to be used for
23
96
  # connections
@@ -28,7 +101,7 @@ class Puppet::HTTP::Client
28
101
  # @param [Integer] retry_limit number of HTTP reties allowed in a given
29
102
  # request
30
103
  #
31
- def initialize(pool: Puppet::Network::HTTP::Pool.new(Puppet[:http_keepalive_timeout]), ssl_context: nil, system_ssl_context: nil, redirect_limit: 10, retry_limit: 100)
104
+ def initialize(pool: Puppet::HTTP::Pool.new(Puppet[:http_keepalive_timeout]), ssl_context: nil, system_ssl_context: nil, redirect_limit: 10, retry_limit: 100)
32
105
  @pool = pool
33
106
  @default_headers = {
34
107
  'X-Puppet-Version' => Puppet.version,
@@ -40,22 +113,19 @@ class Puppet::HTTP::Client
40
113
  @retry_after_handler = Puppet::HTTP::RetryAfterHandler.new(retry_limit, Puppet[:runinterval])
41
114
  end
42
115
 
43
- #
44
- # @api private
45
- #
46
116
  # Create a new HTTP session. A session is the object through which services
47
117
  # may be connected to and accessed.
48
118
  #
49
119
  # @return [Puppet::HTTP::Session] the newly created HTTP session
50
120
  #
121
+ # @api public
51
122
  def create_session
52
123
  Puppet::HTTP::Session.new(self, build_resolvers)
53
124
  end
54
125
 
55
- #
56
- # @api private
57
- #
58
- # Open a connection to the given URI
126
+ # Open a connection to the given URI. It is typically not necessary to call
127
+ # this method as the client will create connections as needed when a request
128
+ # is made.
59
129
  #
60
130
  # @param [URI] uri the connection destination
61
131
  # @param [Hash] options
@@ -63,16 +133,12 @@ class Puppet::HTTP::Client
63
133
  # be used for connections
64
134
  # @option options [Boolean] :include_system_store (false) if we should include
65
135
  # the system store for connection
66
- #
67
- # @yield [Net::HTTP] If a block is given, yields an active http connection
68
- # from the pool
69
- #
70
136
  def connect(uri, options: {}, &block)
71
137
  start = Time.now
72
138
  verifier = nil
73
139
  connected = false
74
140
 
75
- site = Puppet::Network::HTTP::Site.from_uri(uri)
141
+ site = Puppet::HTTP::Site.from_uri(uri)
76
142
  if site.use_ssl?
77
143
  ssl_context = options.fetch(:ssl_context, nil)
78
144
  include_system_store = options.fetch(:include_system_store, false)
@@ -101,88 +167,73 @@ class Puppet::HTTP::Client
101
167
  {uri: uri, elapsed: elapsed(start), message: e.message}, e, connected)
102
168
  end
103
169
 
104
- #
105
- # @api private
106
- #
170
+ # These options apply to all HTTP request methods
171
+ #
172
+ # @!macro [new] request_options
173
+ # @param [Hash] options HTTP request options. Options not recognized by the
174
+ # HTTP implementation will be ignored.
175
+ # @option options [Puppet::SSL::SSLContext] :ssl_context (nil) ssl context to
176
+ # be used for connections
177
+ # @option options [Boolean] :include_system_store (false) if we should include
178
+ # the system store for connection
179
+ # @option options [Integer] :redirect_limit (10) The maximum number of HTTP
180
+ # redirections to allow for this request.
181
+ # @option options [Hash] :basic_auth A map of `:username` => `String` and
182
+ # `:password` => `String`
183
+ # @option options [String] :metric_id The metric id used to track metrics
184
+ # on requests.
185
+
107
186
  # Submits a GET HTTP request to the given url
108
187
  #
109
188
  # @param [URI] url the location to submit the http request
110
189
  # @param [Hash] headers merged with the default headers defined by the client
111
190
  # @param [Hash] params encoded and set as the url query
112
- # @param [Hash] options passed through to the request execution
113
- # @option options [Puppet::SSL::SSLContext] :ssl_context (nil) ssl context to
114
- # be used for connections
115
- # @option options [Boolean] :include_system_store (false) if we should include
116
- # the system store for connection
117
- # @param options [Integer] :redirect_limit number of HTTP redirections to allow
118
- # for this request.
191
+ # @!macro request_options
119
192
  #
120
193
  # @yield [Puppet::HTTP::Response] if a block is given yields the response
121
194
  #
122
- # @return [String] if a block is not given, returns the response body
195
+ # @return [Puppet::HTTP::Response] the response
123
196
  #
197
+ # @api public
124
198
  def get(url, headers: {}, params: {}, options: {}, &block)
125
199
  url = encode_query(url, params)
126
200
 
127
201
  request = Net::HTTP::Get.new(url, @default_headers.merge(headers))
128
202
 
129
- execute_streaming(request, options: options) do |response|
130
- if block_given?
131
- yield response
132
- else
133
- response.body
134
- end
135
- end
203
+ execute_streaming(request, options: options, &block)
136
204
  end
137
205
 
138
- #
139
- # @api private
140
- #
141
206
  # Submits a HEAD HTTP request to the given url
142
207
  #
143
208
  # @param [URI] url the location to submit the http request
144
209
  # @param [Hash] headers merged with the default headers defined by the client
145
210
  # @param [Hash] params encoded and set as the url query
146
- # @param [Hash] options passed through to the request execution
147
- # @option options [Puppet::SSL::SSLContext] :ssl_context (nil) ssl context to
148
- # be used for connections
149
- # @option options [Boolean] :include_system_store (false) if we should include
150
- # the system store for connection
151
- # @param options [Integer] :redirect_limit number of HTTP redirections to allow
152
- # for this request.
211
+ # @!macro request_options
153
212
  #
154
- # @return [String] the body of the request response
213
+ # @return [Puppet::HTTP::Response] the response
155
214
  #
215
+ # @api public
156
216
  def head(url, headers: {}, params: {}, options: {})
157
217
  url = encode_query(url, params)
158
218
 
159
219
  request = Net::HTTP::Head.new(url, @default_headers.merge(headers))
160
220
 
161
- execute_streaming(request, options: options) do |response|
162
- response.body
163
- end
221
+ execute_streaming(request, options: options)
164
222
  end
165
223
 
166
- #
167
- # @api private
168
- #
169
224
  # Submits a PUT HTTP request to the given url
170
225
  #
171
226
  # @param [URI] url the location to submit the http request
172
227
  # @param [String] body the body of the PUT request
173
- # @param [Hash] headers merged with the default headers defined by the client
228
+ # @param [Hash] headers merged with the default headers defined by the client. The
229
+ # `Content-Type` header is required and should correspond to the type of data passed
230
+ # as the `body` argument.
174
231
  # @param [Hash] params encoded and set as the url query
175
- # @param [Hash] options passed through to the request execution
176
- # @option options [String] :content_type the type of the body content
177
- # @option options [Puppet::SSL::SSLContext] :ssl_context (nil) ssl context to
178
- # be used for connections
179
- # @option options [Boolean] :include_system_store (false) if we should include
180
- # the system store for connection
181
- # @param options [Integer] :redirect_limit number of HTTP redirections to allow
182
- # for this request.
232
+ # @!macro request_options
183
233
  #
184
- # @return [String] the body of the request response
234
+ # @return [Puppet::HTTP::Response] the response
185
235
  #
236
+ # @api public
186
237
  def put(url, body, headers: {}, params: {}, options: {})
187
238
  raise ArgumentError, "'put' requires a string 'body' argument" unless body.is_a?(String)
188
239
  url = encode_query(url, params)
@@ -193,31 +244,24 @@ class Puppet::HTTP::Client
193
244
 
194
245
  raise ArgumentError, "'put' requires a 'content-type' header" unless request['Content-Type']
195
246
 
196
- execute_streaming(request, options: options) do |response|
197
- response.body
198
- end
247
+ execute_streaming(request, options: options)
199
248
  end
200
249
 
201
- #
202
- # @api private
203
- #
204
250
  # Submits a POST HTTP request to the given url
205
251
  #
206
252
  # @param [URI] url the location to submit the http request
207
253
  # @param [String] body the body of the POST request
208
- # @param [Hash] headers merged with the default headers defined by the client
254
+ # @param [Hash] headers merged with the default headers defined by the client. The
255
+ # `Content-Type` header is required and should correspond to the type of data passed
256
+ # as the `body` argument.
209
257
  # @param [Hash] params encoded and set as the url query
210
- # @param [Hash] options passed through to the request execution
211
- # @option options [String] :content_type the type of the body content
212
- # @option options [Puppet::SSL::SSLContext] :ssl_context (nil) ssl context to
213
- # be used for connections
214
- # @option options [Boolean] :include_system_store (false) if we should include
215
- # the system store for connection
216
- # @param options [Integer] :redirect_limit number of HTTP redirections to allow
217
- # for this request.
258
+ # @!macro request_options
218
259
  #
219
- # @return [String] the body of the request response
260
+ # @yield [Puppet::HTTP::Response] if a block is given yields the response
261
+ #
262
+ # @return [Puppet::HTTP::Response] the response
220
263
  #
264
+ # @api public
221
265
  def post(url, body, headers: {}, params: {}, options: {}, &block)
222
266
  raise ArgumentError, "'post' requires a string 'body' argument" unless body.is_a?(String)
223
267
  url = encode_query(url, params)
@@ -228,48 +272,32 @@ class Puppet::HTTP::Client
228
272
 
229
273
  raise ArgumentError, "'post' requires a 'content-type' header" unless request['Content-Type']
230
274
 
231
- execute_streaming(request, options: options) do |response|
232
- if block_given?
233
- yield response
234
- else
235
- response.body
236
- end
237
- end
275
+ execute_streaming(request, options: options, &block)
238
276
  end
239
277
 
240
- #
241
- # @api private
242
- #
243
- # Submits a DELETE HTTP request to the given url
278
+ # Submits a DELETE HTTP request to the given url.
244
279
  #
245
280
  # @param [URI] url the location to submit the http request
246
281
  # @param [Hash] headers merged with the default headers defined by the client
247
282
  # @param [Hash] params encoded and set as the url query
248
- # @param [Hash] options options hash passed through to the request execution
249
- # @option options [Puppet::SSL::SSLContext] :ssl_context (nil) ssl context to
250
- # be used for connections
251
- # @option options [Boolean] :include_system_store (false) if we should include
252
- # the system store for connection
253
- # @param options [Integer] :redirect_limit number of HTTP redirections to allow
254
- # for this request.
283
+ # @!macro request_options
255
284
  #
256
- # @return [String] the body of the request response
285
+ # @return [Puppet::HTTP::Response] the response
257
286
  #
287
+ # @api public
258
288
  def delete(url, headers: {}, params: {}, options: {})
259
289
  url = encode_query(url, params)
260
290
 
261
291
  request = Net::HTTP::Delete.new(url, @default_headers.merge(headers))
262
292
 
263
- execute_streaming(request, options: options) do |response|
264
- response.body
265
- end
293
+ execute_streaming(request, options: options)
266
294
  end
267
295
 
296
+ # Close persistent connections in the pool.
268
297
  #
269
- # @api private
270
- #
271
- # Close persistent connections in the pool
298
+ # @return [void]
272
299
  #
300
+ # @api public
273
301
  def close
274
302
  @pool.close
275
303
  end
@@ -286,6 +314,21 @@ class Puppet::HTTP::Client
286
314
 
287
315
  private
288
316
 
317
+ # Connect or borrow a connection from the pool to the host and port associated
318
+ # with the request's URL. Then execute the HTTP request, retrying and
319
+ # following redirects as needed, and return the HTTP response. The response
320
+ # body will always be fully drained/consumed when this method returns.
321
+ #
322
+ # If a block is provided, then the response will be yielded to the caller,
323
+ # allowing the response body to be streamed.
324
+ #
325
+ # If the request/response did not result in an exception and the caller did
326
+ # not ask for the connection to be closed (via Connection: close), then the
327
+ # connection will be returned to the pool.
328
+ #
329
+ # @yieldparam [Puppet::HTTP::Response] response The final response, after
330
+ # following redirects and retrying
331
+ # @return [Puppet::HTTP::Response]
289
332
  def execute_streaming(request, options: {}, &block)
290
333
  redirector = Puppet::HTTP::Redirector.new(options.fetch(:redirect_limit, @default_redirect_limit))
291
334
 
@@ -307,7 +350,7 @@ class Puppet::HTTP::Client
307
350
 
308
351
  # don't call return within the `request` block
309
352
  http.request(request) do |nethttp|
310
- response = Puppet::HTTP::Response.new(nethttp, request.uri)
353
+ response = Puppet::HTTP::ResponseNetHTTP.new(request.uri, nethttp)
311
354
  begin
312
355
  Puppet.debug("HTTP #{request.method.upcase} #{request.uri} returned #{response.code} #{response.reason}")
313
356
 
@@ -320,7 +363,7 @@ class Puppet::HTTP::Client
320
363
  retries += 1
321
364
  if interval
322
365
  if http.started?
323
- Puppet.debug("Closing connection for #{Puppet::Network::HTTP::Site.from_uri(request.uri)}")
366
+ Puppet.debug("Closing connection for #{Puppet::HTTP::Site.from_uri(request.uri)}")
324
367
  http.finish
325
368
  end
326
369
  Puppet.warning(_("Sleeping for %{interval} seconds before retrying the request") % { interval: interval })
@@ -329,8 +372,15 @@ class Puppet::HTTP::Client
329
372
  end
330
373
  end
331
374
 
332
- yield response
375
+ if block_given?
376
+ yield response
377
+ else
378
+ response.body
379
+ end
333
380
  ensure
381
+ # we need to make sure the response body is fully consumed before
382
+ # the connection is put back in the pool, otherwise the response
383
+ # for one request could leak into a future response.
334
384
  response.drain
335
385
  end
336
386