puppet 6.14.0-x64-mingw32 → 6.19.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 (496) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -7
  3. data/Gemfile +4 -2
  4. data/Gemfile.lock +36 -34
  5. data/README.md +3 -4
  6. data/Rakefile +4 -12
  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/agent/locker.rb +0 -7
  11. data/lib/puppet/application/agent.rb +25 -9
  12. data/lib/puppet/application/apply.rb +18 -20
  13. data/lib/puppet/application/device.rb +1 -1
  14. data/lib/puppet/application/doc.rb +1 -1
  15. data/lib/puppet/application/filebucket.rb +5 -14
  16. data/lib/puppet/application/lookup.rb +16 -4
  17. data/lib/puppet/application/plugin.rb +1 -0
  18. data/lib/puppet/application/ssl.rb +3 -3
  19. data/lib/puppet/configurer.rb +68 -24
  20. data/lib/puppet/configurer/downloader.rb +31 -10
  21. data/lib/puppet/configurer/plugin_handler.rb +1 -1
  22. data/lib/puppet/confine.rb +2 -2
  23. data/lib/puppet/confine/any.rb +1 -1
  24. data/lib/puppet/context/trusted_information.rb +14 -8
  25. data/lib/puppet/daemon.rb +13 -27
  26. data/lib/puppet/defaults.rb +141 -41
  27. data/lib/puppet/environments.rb +55 -15
  28. data/lib/puppet/face/catalog.rb +1 -1
  29. data/lib/puppet/face/config.rb +46 -16
  30. data/lib/puppet/face/facts.rb +1 -1
  31. data/lib/puppet/face/help.rb +29 -3
  32. data/lib/puppet/face/module/search.rb +5 -0
  33. data/lib/puppet/face/node.rb +3 -3
  34. data/lib/puppet/face/node/clean.rb +2 -2
  35. data/lib/puppet/face/plugin.rb +2 -2
  36. data/lib/puppet/face/status.rb +1 -1
  37. data/lib/puppet/feature/base.rb +1 -1
  38. data/lib/puppet/file_bucket/dipper.rb +1 -1
  39. data/lib/puppet/file_serving/http_metadata.rb +14 -2
  40. data/lib/puppet/file_serving/metadata.rb +4 -1
  41. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  42. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  43. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  44. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  45. data/lib/puppet/file_system/file_impl.rb +17 -13
  46. data/lib/puppet/file_system/uniquefile.rb +12 -16
  47. data/lib/puppet/forge.rb +1 -1
  48. data/lib/puppet/forge/cache.rb +1 -1
  49. data/lib/puppet/forge/repository.rb +4 -7
  50. data/lib/puppet/functions/call.rb +1 -1
  51. data/lib/puppet/functions/filter.rb +1 -0
  52. data/lib/puppet/functions/lstrip.rb +4 -4
  53. data/lib/puppet/functions/new.rb +8 -3
  54. data/lib/puppet/functions/reduce.rb +2 -4
  55. data/lib/puppet/functions/reverse_each.rb +1 -1
  56. data/lib/puppet/functions/rstrip.rb +4 -4
  57. data/lib/puppet/functions/step.rb +1 -1
  58. data/lib/puppet/functions/strip.rb +4 -4
  59. data/lib/puppet/gettext/config.rb +5 -5
  60. data/lib/puppet/gettext/module_translations.rb +4 -4
  61. data/lib/puppet/http.rb +3 -0
  62. data/lib/puppet/http/client.rb +215 -60
  63. data/lib/puppet/http/external_client.rb +90 -0
  64. data/lib/puppet/http/redirector.rb +43 -7
  65. data/lib/puppet/http/resolver.rb +43 -3
  66. data/lib/puppet/http/resolver/server_list.rb +66 -24
  67. data/lib/puppet/http/resolver/settings.rb +21 -1
  68. data/lib/puppet/http/resolver/srv.rb +28 -2
  69. data/lib/puppet/http/response.rb +82 -1
  70. data/lib/puppet/http/retry_after_handler.rb +39 -0
  71. data/lib/puppet/http/service.rb +70 -2
  72. data/lib/puppet/http/service/ca.rb +71 -9
  73. data/lib/puppet/http/service/compiler.rb +214 -12
  74. data/lib/puppet/http/service/file_server.rb +106 -5
  75. data/lib/puppet/http/service/puppetserver.rb +39 -0
  76. data/lib/puppet/http/service/report.rb +36 -3
  77. data/lib/puppet/http/session.rb +60 -8
  78. data/lib/puppet/indirector.rb +1 -1
  79. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  80. data/lib/puppet/indirector/catalog/rest.rb +2 -1
  81. data/lib/puppet/indirector/exec.rb +1 -1
  82. data/lib/puppet/indirector/facts/facter.rb +3 -3
  83. data/lib/puppet/indirector/facts/rest.rb +2 -1
  84. data/lib/puppet/indirector/facts/yaml.rb +1 -1
  85. data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
  86. data/lib/puppet/indirector/file_content/http.rb +5 -0
  87. data/lib/puppet/indirector/file_content/rest.rb +1 -1
  88. data/lib/puppet/indirector/file_metadata/http.rb +28 -8
  89. data/lib/puppet/indirector/file_metadata/rest.rb +6 -4
  90. data/lib/puppet/indirector/hiera.rb +4 -0
  91. data/lib/puppet/indirector/indirection.rb +1 -1
  92. data/lib/puppet/indirector/json.rb +1 -1
  93. data/lib/puppet/indirector/msgpack.rb +1 -1
  94. data/lib/puppet/indirector/node/rest.rb +2 -1
  95. data/lib/puppet/indirector/report/processor.rb +2 -2
  96. data/lib/puppet/indirector/report/yaml.rb +23 -0
  97. data/lib/puppet/indirector/request.rb +5 -5
  98. data/lib/puppet/indirector/rest.rb +7 -1
  99. data/lib/puppet/indirector/status/rest.rb +2 -1
  100. data/lib/puppet/indirector/yaml.rb +1 -1
  101. data/lib/puppet/metatype/manager.rb +80 -80
  102. data/lib/puppet/module.rb +1 -2
  103. data/lib/puppet/network/format_support.rb +2 -2
  104. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  105. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  106. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  107. data/lib/puppet/network/http/base_pool.rb +6 -1
  108. data/lib/puppet/network/http/compression.rb +7 -0
  109. data/lib/puppet/network/http/connection.rb +2 -0
  110. data/lib/puppet/network/http/connection_adapter.rb +184 -0
  111. data/lib/puppet/network/http/nocache_pool.rb +1 -0
  112. data/lib/puppet/network/http/pool.rb +2 -4
  113. data/lib/puppet/network/http/route.rb +2 -2
  114. data/lib/puppet/network/http_pool.rb +2 -1
  115. data/lib/puppet/node/environment.rb +22 -5
  116. data/lib/puppet/node/facts.rb +17 -0
  117. data/lib/puppet/pal/catalog_compiler.rb +5 -0
  118. data/lib/puppet/pal/pal_impl.rb +30 -31
  119. data/lib/puppet/parameter.rb +1 -1
  120. data/lib/puppet/parser/ast/leaf.rb +5 -5
  121. data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
  122. data/lib/puppet/parser/compiler.rb +43 -33
  123. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  124. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  125. data/lib/puppet/parser/environment_compiler.rb +4 -1
  126. data/lib/puppet/parser/functions.rb +18 -9
  127. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  128. data/lib/puppet/parser/functions/filter.rb +1 -0
  129. data/lib/puppet/parser/resource.rb +3 -2
  130. data/lib/puppet/parser/resource/param.rb +6 -0
  131. data/lib/puppet/parser/type_loader.rb +2 -2
  132. data/lib/puppet/pops/adaptable.rb +7 -13
  133. data/lib/puppet/pops/adapters.rb +8 -4
  134. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  135. data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -5
  136. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  137. data/lib/puppet/pops/issues.rb +5 -0
  138. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  139. data/lib/puppet/pops/loaders.rb +24 -15
  140. data/lib/puppet/pops/lookup/context.rb +1 -1
  141. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  142. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  143. data/lib/puppet/pops/types/iterable.rb +34 -8
  144. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  145. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  146. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  147. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  148. data/lib/puppet/provider/file/windows.rb +1 -1
  149. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  150. data/lib/puppet/provider/package/aix.rb +17 -2
  151. data/lib/puppet/provider/package/apt.rb +98 -1
  152. data/lib/puppet/provider/package/aptitude.rb +1 -1
  153. data/lib/puppet/provider/package/dnfmodule.rb +61 -14
  154. data/lib/puppet/provider/package/dpkg.rb +1 -1
  155. data/lib/puppet/provider/package/gem.rb +45 -9
  156. data/lib/puppet/provider/package/pacman.rb +2 -5
  157. data/lib/puppet/provider/package/pip.rb +143 -48
  158. data/lib/puppet/provider/package/pip2.rb +17 -0
  159. data/lib/puppet/provider/package/pip3.rb +0 -2
  160. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  161. data/lib/puppet/provider/package/pkgng.rb +16 -4
  162. data/lib/puppet/provider/package/portage.rb +2 -2
  163. data/lib/puppet/provider/package/puppet_gem.rb +11 -2
  164. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  165. data/lib/puppet/provider/package/rpm.rb +6 -213
  166. data/lib/puppet/provider/package/yum.rb +101 -20
  167. data/lib/puppet/provider/package/zypper.rb +62 -1
  168. data/lib/puppet/provider/service/systemd.rb +22 -4
  169. data/lib/puppet/provider/service/windows.rb +23 -7
  170. data/lib/puppet/provider/user/aix.rb +1 -1
  171. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  172. data/lib/puppet/provider/user/useradd.rb +16 -5
  173. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  174. data/lib/puppet/reports/http.rb +15 -9
  175. data/lib/puppet/resource.rb +2 -1
  176. data/lib/puppet/resource/type.rb +10 -1
  177. data/lib/puppet/resource/type_collection.rb +20 -16
  178. data/lib/puppet/rest/route.rb +2 -2
  179. data/lib/puppet/runtime.rb +25 -2
  180. data/lib/puppet/settings.rb +20 -6
  181. data/lib/puppet/ssl.rb +1 -0
  182. data/lib/puppet/ssl/host.rb +4 -4
  183. data/lib/puppet/ssl/oids.rb +1 -0
  184. data/lib/puppet/ssl/ssl_context.rb +2 -2
  185. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  186. data/lib/puppet/ssl/state_machine.rb +79 -37
  187. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  188. data/lib/puppet/ssl/verifier_adapter.rb +9 -1
  189. data/lib/puppet/test/test_helper.rb +19 -14
  190. data/lib/puppet/transaction.rb +2 -2
  191. data/lib/puppet/transaction/persistence.rb +1 -1
  192. data/lib/puppet/transaction/report.rb +14 -10
  193. data/lib/puppet/trusted_external.rb +29 -1
  194. data/lib/puppet/type.rb +21 -8
  195. data/lib/puppet/type/file.rb +40 -15
  196. data/lib/puppet/type/file/checksum.rb +4 -4
  197. data/lib/puppet/type/file/source.rb +35 -13
  198. data/lib/puppet/type/filebucket.rb +1 -1
  199. data/lib/puppet/type/notify.rb +2 -2
  200. data/lib/puppet/type/package.rb +41 -3
  201. data/lib/puppet/type/service.rb +59 -8
  202. data/lib/puppet/type/user.rb +19 -29
  203. data/lib/puppet/util.rb +41 -3
  204. data/lib/puppet/util/at_fork.rb +1 -1
  205. data/lib/puppet/util/autoload.rb +13 -25
  206. data/lib/puppet/util/character_encoding.rb +9 -5
  207. data/lib/puppet/util/checksums.rb +19 -4
  208. data/lib/puppet/util/connection.rb +8 -8
  209. data/lib/puppet/util/execution.rb +2 -2
  210. data/lib/puppet/util/fileparsing.rb +2 -2
  211. data/lib/puppet/util/instance_loader.rb +14 -10
  212. data/lib/puppet/util/log/destinations.rb +1 -10
  213. data/lib/puppet/util/package/version/debian.rb +175 -0
  214. data/lib/puppet/util/package/version/gem.rb +15 -0
  215. data/lib/puppet/util/package/version/pip.rb +167 -0
  216. data/lib/puppet/util/package/version/range.rb +53 -0
  217. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  218. data/lib/puppet/util/package/version/range/gt.rb +14 -0
  219. data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
  220. data/lib/puppet/util/package/version/range/lt.rb +14 -0
  221. data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
  222. data/lib/puppet/util/package/version/range/min_max.rb +21 -0
  223. data/lib/puppet/util/package/version/range/simple.rb +11 -0
  224. data/lib/puppet/util/package/version/rpm.rb +73 -0
  225. data/lib/puppet/util/pidlock.rb +13 -7
  226. data/lib/puppet/util/platform.rb +5 -0
  227. data/lib/puppet/util/provider_features.rb +1 -1
  228. data/lib/puppet/util/reference.rb +1 -1
  229. data/lib/puppet/util/rpm_compare.rb +193 -0
  230. data/lib/puppet/util/run_mode.rb +5 -1
  231. data/lib/puppet/util/windows.rb +1 -0
  232. data/lib/puppet/util/windows/adsi.rb +2 -2
  233. data/lib/puppet/util/windows/api_types.rb +60 -33
  234. data/lib/puppet/util/windows/eventlog.rb +1 -6
  235. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  236. data/lib/puppet/util/windows/principal.rb +8 -6
  237. data/lib/puppet/util/windows/process.rb +15 -14
  238. data/lib/puppet/util/windows/registry.rb +11 -11
  239. data/lib/puppet/util/windows/security.rb +5 -4
  240. data/lib/puppet/util/windows/service.rb +43 -26
  241. data/lib/puppet/util/windows/sid.rb +3 -3
  242. data/lib/puppet/util/windows/user.rb +242 -8
  243. data/lib/puppet/version.rb +1 -1
  244. data/locales/puppet.pot +627 -507
  245. data/man/man5/puppet.conf.5 +93 -20
  246. data/man/man8/puppet-agent.8 +7 -4
  247. data/man/man8/puppet-apply.8 +1 -1
  248. data/man/man8/puppet-catalog.8 +1 -1
  249. data/man/man8/puppet-config.8 +6 -6
  250. data/man/man8/puppet-describe.8 +1 -1
  251. data/man/man8/puppet-device.8 +1 -1
  252. data/man/man8/puppet-doc.8 +1 -1
  253. data/man/man8/puppet-epp.8 +1 -1
  254. data/man/man8/puppet-facts.8 +1 -1
  255. data/man/man8/puppet-filebucket.8 +1 -1
  256. data/man/man8/puppet-generate.8 +1 -1
  257. data/man/man8/puppet-help.8 +6 -3
  258. data/man/man8/puppet-key.8 +1 -1
  259. data/man/man8/puppet-lookup.8 +2 -2
  260. data/man/man8/puppet-man.8 +1 -1
  261. data/man/man8/puppet-module.8 +4 -1
  262. data/man/man8/puppet-node.8 +4 -4
  263. data/man/man8/puppet-parser.8 +1 -1
  264. data/man/man8/puppet-plugin.8 +1 -1
  265. data/man/man8/puppet-report.8 +1 -1
  266. data/man/man8/puppet-resource.8 +1 -1
  267. data/man/man8/puppet-script.8 +1 -1
  268. data/man/man8/puppet-ssl.8 +1 -1
  269. data/man/man8/puppet-status.8 +2 -2
  270. data/man/man8/puppet.8 +2 -2
  271. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  272. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  273. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
  274. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
  275. data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
  276. data/spec/fixtures/ssl/unknown-ca.pem +59 -0
  277. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  278. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  279. data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
  280. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  281. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  282. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  283. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  284. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  285. data/spec/integration/application/agent_spec.rb +479 -0
  286. data/spec/integration/application/apply_spec.rb +279 -150
  287. data/spec/integration/application/config_spec.rb +74 -0
  288. data/spec/integration/application/doc_spec.rb +16 -6
  289. data/spec/integration/application/filebucket_spec.rb +239 -0
  290. data/spec/integration/application/help_spec.rb +42 -0
  291. data/spec/integration/application/lookup_spec.rb +13 -0
  292. data/spec/integration/application/module_spec.rb +68 -0
  293. data/spec/integration/application/plugin_spec.rb +123 -0
  294. data/spec/integration/configurer_spec.rb +14 -0
  295. data/spec/integration/data_binding_spec.rb +82 -0
  296. data/spec/integration/defaults_spec.rb +27 -3
  297. data/spec/integration/directory_environments_spec.rb +17 -17
  298. data/spec/integration/http/client_spec.rb +39 -40
  299. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  300. data/spec/integration/indirector/report/yaml.rb +83 -0
  301. data/spec/integration/network/http_pool_spec.rb +84 -19
  302. data/spec/integration/node/environment_spec.rb +15 -0
  303. data/spec/integration/parser/compiler_spec.rb +11 -0
  304. data/spec/integration/type/file_spec.rb +1 -1
  305. data/spec/integration/util/execution_spec.rb +22 -0
  306. data/spec/integration/util/windows/adsi_spec.rb +8 -3
  307. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  308. data/spec/integration/util/windows/process_spec.rb +26 -32
  309. data/spec/integration/util/windows/registry_spec.rb +7 -7
  310. data/spec/integration/util/windows/user_spec.rb +47 -5
  311. data/spec/integration/util_spec.rb +7 -33
  312. data/spec/lib/puppet/test_ca.rb +2 -2
  313. data/spec/lib/puppet_spec/https.rb +16 -7
  314. data/spec/lib/puppet_spec/matchers.rb +0 -80
  315. data/spec/lib/puppet_spec/puppetserver.rb +127 -0
  316. data/spec/shared_contexts/https.rb +29 -0
  317. data/spec/shared_contexts/types_setup.rb +2 -0
  318. data/spec/unit/agent_spec.rb +80 -26
  319. data/spec/unit/application/agent_spec.rb +12 -9
  320. data/spec/unit/application/device_spec.rb +2 -2
  321. data/spec/unit/application/doc_spec.rb +2 -2
  322. data/spec/unit/application/face_base_spec.rb +6 -4
  323. data/spec/unit/application/facts_spec.rb +41 -10
  324. data/spec/unit/application/filebucket_spec.rb +22 -2
  325. data/spec/unit/application/man_spec.rb +52 -0
  326. data/spec/unit/application/resource_spec.rb +3 -1
  327. data/spec/unit/application/ssl_spec.rb +15 -2
  328. data/spec/unit/application_spec.rb +9 -4
  329. data/spec/unit/configurer/downloader_spec.rb +10 -0
  330. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  331. data/spec/unit/configurer_spec.rb +87 -38
  332. data/spec/unit/confine_spec.rb +2 -1
  333. data/spec/unit/context/trusted_information_spec.rb +25 -2
  334. data/spec/unit/daemon_spec.rb +5 -64
  335. data/spec/unit/defaults_spec.rb +24 -1
  336. data/spec/unit/environments_spec.rb +107 -32
  337. data/spec/unit/face/config_spec.rb +59 -1
  338. data/spec/unit/face/module/search_spec.rb +17 -0
  339. data/spec/unit/face/node_spec.rb +2 -2
  340. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  341. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  342. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  343. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  344. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  345. data/spec/unit/file_system/uniquefile_spec.rb +29 -0
  346. data/spec/unit/file_system_spec.rb +11 -2
  347. data/spec/unit/http/client_spec.rb +173 -59
  348. data/spec/unit/http/external_client_spec.rb +201 -0
  349. data/spec/unit/http/resolver_spec.rb +44 -5
  350. data/spec/unit/http/response_spec.rb +6 -0
  351. data/spec/unit/http/service/ca_spec.rb +27 -5
  352. data/spec/unit/http/service/compiler_spec.rb +186 -9
  353. data/spec/unit/http/service/file_server_spec.rb +37 -6
  354. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  355. data/spec/unit/http/service/report_spec.rb +5 -4
  356. data/spec/unit/http/service_spec.rb +3 -4
  357. data/spec/unit/http/session_spec.rb +48 -12
  358. data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
  359. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  360. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  361. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  362. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
  363. data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
  364. data/spec/unit/indirector/file_metadata/rest_spec.rb +15 -14
  365. data/spec/unit/indirector/json_spec.rb +8 -8
  366. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  367. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  368. data/spec/unit/indirector/request_spec.rb +5 -5
  369. data/spec/unit/indirector/rest_spec.rb +14 -1
  370. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  371. data/spec/unit/indirector/yaml_spec.rb +7 -7
  372. data/spec/unit/interface_spec.rb +3 -3
  373. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  374. data/spec/unit/network/format_support_spec.rb +3 -2
  375. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  376. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  377. data/spec/unit/network/http/connection_spec.rb +552 -190
  378. data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
  379. data/spec/unit/network/http/pool_spec.rb +3 -3
  380. data/spec/unit/network/http_pool_spec.rb +63 -57
  381. data/spec/unit/network/http_spec.rb +1 -1
  382. data/spec/unit/node/environment_spec.rb +33 -0
  383. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  384. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  385. data/spec/unit/parser/scope_spec.rb +1 -1
  386. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  387. data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
  388. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  389. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  390. data/spec/unit/provider/exec_spec.rb +4 -3
  391. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  392. data/spec/unit/provider/package/aix_spec.rb +29 -0
  393. data/spec/unit/provider/package/apt_spec.rb +107 -0
  394. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  395. data/spec/unit/provider/package/dnfmodule_spec.rb +54 -15
  396. data/spec/unit/provider/package/dpkg_spec.rb +22 -7
  397. data/spec/unit/provider/package/gem_spec.rb +40 -0
  398. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  399. data/spec/unit/provider/package/pacman_spec.rb +6 -21
  400. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  401. data/spec/unit/provider/package/pip_spec.rb +68 -19
  402. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  403. data/spec/unit/provider/package/pkgng_spec.rb +38 -0
  404. data/spec/unit/provider/package/portage_spec.rb +5 -0
  405. data/spec/unit/provider/package/puppet_gem_spec.rb +12 -1
  406. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  407. data/spec/unit/provider/package/rpm_spec.rb +0 -212
  408. data/spec/unit/provider/package/yum_spec.rb +274 -1
  409. data/spec/unit/provider/package/zypper_spec.rb +98 -0
  410. data/spec/unit/provider/service/base_spec.rb +2 -4
  411. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  412. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  413. data/spec/unit/provider/service/debian_spec.rb +3 -5
  414. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  415. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  416. data/spec/unit/provider/service/init_spec.rb +46 -5
  417. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  418. data/spec/unit/provider/service/openbsd_spec.rb +9 -0
  419. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  420. data/spec/unit/provider/service/openwrt_spec.rb +2 -1
  421. data/spec/unit/provider/service/redhat_spec.rb +10 -1
  422. data/spec/unit/provider/service/runit_spec.rb +2 -1
  423. data/spec/unit/provider/service/smf_spec.rb +1 -1
  424. data/spec/unit/provider/service/src_spec.rb +3 -5
  425. data/spec/unit/provider/service/systemd_spec.rb +95 -18
  426. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  427. data/spec/unit/provider/service/windows_spec.rb +50 -14
  428. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  429. data/spec/unit/provider/user/useradd_spec.rb +30 -16
  430. data/spec/unit/provider/user/windows_adsi_spec.rb +85 -3
  431. data/spec/unit/puppet_pal_2pec.rb +11 -0
  432. data/spec/unit/puppet_pal_catalog_spec.rb +43 -0
  433. data/spec/unit/puppet_spec.rb +33 -0
  434. data/spec/unit/reports/http_spec.rb +70 -52
  435. data/spec/unit/reports/store_spec.rb +17 -13
  436. data/spec/unit/resource_spec.rb +3 -3
  437. data/spec/unit/rest/route_spec.rb +4 -4
  438. data/spec/unit/settings_spec.rb +44 -22
  439. data/spec/unit/ssl/host_spec.rb +4 -2
  440. data/spec/unit/ssl/oids_spec.rb +1 -0
  441. data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
  442. data/spec/unit/ssl/state_machine_spec.rb +90 -14
  443. data/spec/unit/test/test_helper_spec.rb +17 -0
  444. data/spec/unit/transaction/persistence_spec.rb +15 -0
  445. data/spec/unit/transaction/report_spec.rb +7 -1
  446. data/spec/unit/type/file/source_spec.rb +4 -4
  447. data/spec/unit/type/file_spec.rb +122 -96
  448. data/spec/unit/type/filebucket_spec.rb +1 -1
  449. data/spec/unit/type/service_spec.rb +218 -8
  450. data/spec/unit/type/user_spec.rb +32 -3
  451. data/spec/unit/type_spec.rb +50 -0
  452. data/spec/unit/util/at_fork_spec.rb +2 -2
  453. data/spec/unit/util/autoload_spec.rb +2 -1
  454. data/spec/unit/util/character_encoding_spec.rb +4 -4
  455. data/spec/unit/util/checksums_spec.rb +16 -0
  456. data/spec/unit/util/command_line_spec.rb +11 -6
  457. data/spec/unit/util/log/destinations_spec.rb +1 -29
  458. data/spec/unit/util/package/version/debian_spec.rb +83 -0
  459. data/spec/unit/util/package/version/pip_spec.rb +464 -0
  460. data/spec/unit/util/package/version/range_spec.rb +175 -0
  461. data/spec/unit/util/package/version/rpm_spec.rb +121 -0
  462. data/spec/unit/util/pidlock_spec.rb +83 -47
  463. data/spec/unit/util/rpm_compare_spec.rb +196 -0
  464. data/spec/unit/util/run_mode_spec.rb +6 -6
  465. data/spec/unit/util/windows/adsi_spec.rb +4 -4
  466. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  467. data/spec/unit/util/windows/service_spec.rb +4 -4
  468. data/spec/unit/util/windows/sid_spec.rb +2 -2
  469. data/spec/unit/util_spec.rb +3 -3
  470. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  471. data/tasks/generate_cert_fixtures.rake +15 -1
  472. data/tasks/manpages.rake +5 -35
  473. metadata +90 -51
  474. data/spec/integration/faces/config_spec.rb +0 -91
  475. data/spec/integration/faces/documentation_spec.rb +0 -57
  476. data/spec/integration/faces/plugin_spec.rb +0 -63
  477. data/spec/integration/file_bucket/file_spec.rb +0 -50
  478. data/spec/integration/file_serving/content_spec.rb +0 -7
  479. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  480. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  481. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  482. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  483. data/spec/integration/module_tool/forge_spec.rb +0 -64
  484. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  485. data/spec/integration/provider/service/init_spec.rb +0 -48
  486. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  487. data/spec/integration/provider/service/windows_spec.rb +0 -50
  488. data/spec/integration/reference/providers_spec.rb +0 -21
  489. data/spec/integration/reports_spec.rb +0 -13
  490. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  491. data/spec/integration/ssl/host_spec.rb +0 -72
  492. data/spec/integration/ssl/key_spec.rb +0 -99
  493. data/spec/integration/test/test_helper_spec.rb +0 -31
  494. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  495. data/spec/unit/face/man_spec.rb +0 -25
  496. data/spec/unit/man_spec.rb +0 -31
@@ -1,8 +1,30 @@
1
+ #
2
+ # @api private
3
+ #
4
+ # Handle HTTP redirects
5
+ #
1
6
  class Puppet::HTTP::Redirector
7
+ #
8
+ # @api private
9
+ #
10
+ # Create a new redirect handler
11
+ #
12
+ # @param [Integer] redirect_limit maximum number of redirects allowed
13
+ #
2
14
  def initialize(redirect_limit)
3
15
  @redirect_limit = redirect_limit
4
16
  end
5
17
 
18
+ #
19
+ # @api private
20
+ #
21
+ # Determine of the HTTP response code indicates a redirect
22
+ #
23
+ # @param [Net::HTTP] request request that received the response
24
+ # @param [Puppet::HTTP::Response] response
25
+ #
26
+ # @return [Boolean] true if the response code is 301, 302, or 307.
27
+ #
6
28
  def redirect?(request, response)
7
29
  # Net::HTTPRedirection is not used because historically puppet
8
30
  # has only handled these, and we're not a browser
@@ -14,17 +36,23 @@ class Puppet::HTTP::Redirector
14
36
  end
15
37
  end
16
38
 
39
+ #
40
+ # @api private
41
+ #
42
+ # Implement the HTTP request redirection
43
+ #
44
+ # @param [Net::HTTP] request request that has been redirected
45
+ # @param [Puppet::HTTP::Response] response
46
+ # @param [Integer] redirects the current number of redirects
47
+ #
48
+ # @return [Net::HTTP] A new request based on the original request, but with
49
+ # the redirected location
50
+ #
17
51
  def redirect_to(request, response, redirects)
18
52
  raise Puppet::HTTP::TooManyRedirects.new(request.uri) if redirects >= @redirect_limit
19
53
 
20
54
  location = parse_location(response)
21
- if location.relative?
22
- url = request.uri.dup
23
- url.path = location.path
24
- else
25
- url = location.dup
26
- end
27
- url.query = request.uri.query
55
+ url = request.uri.merge(location)
28
56
 
29
57
  new_request = request.class.new(url)
30
58
  new_request.body = request.body
@@ -32,6 +60,14 @@ class Puppet::HTTP::Redirector
32
60
  new_request[header] = value
33
61
  end
34
62
 
63
+ # mimic private Net::HTTP#addr_port
64
+ new_request['Host'] = if (location.scheme == 'https' && location.port == 443) ||
65
+ (location.scheme == 'http' && location.port == 80)
66
+ location.host
67
+ else
68
+ "#{location.host}:#{location.port}"
69
+ end
70
+
35
71
  new_request
36
72
  end
37
73
 
@@ -1,18 +1,58 @@
1
+ #
2
+ # @api private
3
+ #
4
+ # Resolver base class. Each resolver represents a different strategy for
5
+ # resolving a service name into a list of candidate servers and ports.
6
+ #
7
+ # @abstract Subclass and override {#resolve} to create a new resolver.
8
+ #
1
9
  class Puppet::HTTP::Resolver
10
+ #
11
+ # @api private
12
+ #
13
+ # Create a new resolver
14
+ #
15
+ # @param [Puppet::HTTP::Client] client
16
+ #
2
17
  def initialize(client)
3
18
  @client = client
4
19
  end
5
20
 
6
- def resolve(session, name, ssl_context: nil)
21
+ #
22
+ # @api private
23
+ #
24
+ # Return a working server/port for the resolver. This is the base
25
+ # implementation and is meant to be a placeholder.
26
+ #
27
+ # @param [Puppet::HTTP::Session] session
28
+ # @param [Symbol] name the service to resolve
29
+ # @param [Puppet::SSL::SSLContext] ssl_context (nil) optional ssl context to
30
+ # use when creating a connection
31
+ # @param [Proc] canceled_handler (nil) optional callback allowing a resolver
32
+ # to cancel resolution.
33
+ #
34
+ # @raise [NotImplementedError] this base class is not implemented
35
+ #
36
+ def resolve(session, name, ssl_context: nil, canceled_handler: nil)
7
37
  raise NotImplementedError
8
38
  end
9
39
 
40
+ #
41
+ # @api private
42
+ #
43
+ # Check a given connection to establish if it can be relied on for future use
44
+ #
45
+ # @param [Puppet::HTTP::Session] session
46
+ # @param [Puppet::HTTP::Service] service
47
+ # @param [Puppet::SSL::SSLContext] ssl_context
48
+ #
49
+ # @return [Boolean] Returns true if a connection is successful, false otherwise
50
+ #
10
51
  def check_connection?(session, service, ssl_context: nil)
11
52
  service.connect(ssl_context: ssl_context)
12
53
  return true
13
54
  rescue Puppet::HTTP::ConnectionError => e
14
- session.add_exception(e)
15
- Puppet.debug("Connection to #{service.url} failed, trying next route: #{e.message}")
55
+ Puppet.log_exception(e, "Connection to #{service.url} failed, trying next route: #{e.message}")
16
56
  return false
17
57
  end
18
58
  end
@@ -1,4 +1,22 @@
1
+ #
2
+ # @api private
3
+ #
4
+ # Use the server_list setting to resolve a service. This resolver is only used
5
+ # if server_list is set either on the command line or in the configuration file.
6
+ #
1
7
  class Puppet::HTTP::Resolver::ServerList < Puppet::HTTP::Resolver
8
+ #
9
+ # @api private
10
+ #
11
+ # @param [Puppet::HTTP::Client] client
12
+ # @param [Array<String>] server_list_setting array of servers set via the
13
+ # configuration or the command line
14
+ # @param [Integer] default_port if a port is not set for a server in
15
+ # server_list, use this port
16
+ # @param [Array<Symbol>] services array of services that server_list can be
17
+ # used to resolve. If a service is not included in this array, this resolver
18
+ # will return nil.
19
+ #
2
20
  def initialize(client, server_list_setting:, default_port:, services: )
3
21
  @client = client
4
22
  @server_list_setting = server_list_setting
@@ -6,33 +24,57 @@ class Puppet::HTTP::Resolver::ServerList < Puppet::HTTP::Resolver
6
24
  @services = services
7
25
  end
8
26
 
9
- def resolve(session, name, ssl_context: nil)
10
- if @services.include?(name)
11
- @server_list_setting.value.each do |server|
12
- host = server[0]
13
- port = server[1] || @default_port
14
- uri = URI("https://#{host}:#{port}/status/v1/simple/master")
15
- if get_success?(uri, session, ssl_context: ssl_context)
16
- return Puppet::HTTP::Service.create_service(@client, session, name, host, port)
17
- end
27
+ #
28
+ # @api private
29
+ #
30
+ # Walk the server_list to find a server and port that will connect successfully.
31
+ #
32
+ # @param [Puppet::HTTP::Session] session <description>
33
+ # @param [Symbol] name the name of the service being resolved
34
+ # @param [Puppet::SSL::SSLContext] ssl_context
35
+ # @param [Proc] canceled_handler (nil) optional callback allowing a resolver
36
+ # to cancel resolution.
37
+ #
38
+ # @return [nil] return nil if the service to be resolved does not support
39
+ # server_list
40
+ # @return [Puppet::HTTP::Service] a validated service to use for future HTTP
41
+ # requests
42
+ #
43
+ # @raise [Puppet::Error] raise if none of the servers defined in server_list
44
+ # are available
45
+ #
46
+ def resolve(session, name, ssl_context: nil, canceled_handler: nil)
47
+ # If we're configured to use an explicit service host, e.g. report_server
48
+ # then don't use server_list to resolve the `:report` service.
49
+ return nil unless @services.include?(name)
50
+
51
+ # If we resolved the URL already, use its host & port for the service
52
+ if @resolved_url
53
+ return Puppet::HTTP::Service.create_service(@client, session, name, @resolved_url.host, @resolved_url.port)
54
+ end
55
+
56
+ # Return the first simple service status endpoint we can connect to
57
+ @server_list_setting.value.each do |server|
58
+ host = server[0]
59
+ port = server[1] || @default_port
60
+
61
+ service = Puppet::HTTP::Service.create_service(@client, session, :puppetserver, host, port)
62
+ begin
63
+ service.get_simple_status(ssl_context: ssl_context)
64
+ @resolved_url = service.url
65
+ return Puppet::HTTP::Service.create_service(@client, session, name, @resolved_url.host, @resolved_url.port)
66
+ rescue Puppet::HTTP::ResponseError => detail
67
+ Puppet.log_exception(detail, _("Puppet server %{host}:%{port} is unavailable: %{code} %{reason}") %
68
+ { host: service.url.host, port: service.url.port, code: detail.response.code, reason: detail.response.reason })
69
+ rescue Puppet::HTTP::HTTPError => detail
70
+ Puppet.log_exception(detail, _("Unable to connect to server from server_list setting: %{detail}") % {detail: detail})
18
71
  end
19
- raise Puppet::Error, _("Could not select a functional puppet master from server_list: '%{server_list}'") % { server_list: @server_list_setting.print(@server_list_setting.value) }
20
- else
21
- return nil
22
72
  end
23
- end
24
73
 
25
- def get_success?(uri, session, ssl_context: nil)
26
- response = @client.get(uri, ssl_context: ssl_context)
27
- return true if response.success?
74
+ # don't fallback to other resolvers
75
+ canceled_handler.call(true) if canceled_handler
28
76
 
29
- Puppet.debug(_("Puppet server %{host}:%{port} is unavailable: %{code} %{reason}") %
30
- { host: uri.host, port: uri.port, code: response.code, reason: response.reason })
31
- return false
32
- rescue => detail
33
- session.add_exception(detail)
34
- #TRANSLATORS 'server_list' is the name of a setting and should not be translated
35
- Puppet.debug _("Unable to connect to server from server_list setting: %{detail}") % {detail: detail}
36
- return false
77
+ # not found
78
+ nil
37
79
  end
38
80
  end
@@ -1,5 +1,25 @@
1
+ #
2
+ # @api private
3
+ #
4
+ # Resolve a service using settings. This is the default resolver if none of the
5
+ # other resolvers find a functional connection.
6
+ #
1
7
  class Puppet::HTTP::Resolver::Settings < Puppet::HTTP::Resolver
2
- def resolve(session, name, ssl_context: nil)
8
+ #
9
+ # @api private
10
+ #
11
+ # Resolve a service using the default server and port settings for this service.
12
+ #
13
+ # @param [Puppet::HTTP::Session] session
14
+ # @param [Symbol] name the name of the service to be resolved
15
+ # @param [Puppet::SSL::SSLContext] ssl_context
16
+ # @param [Proc] canceled_handler (nil) optional callback allowing a resolver
17
+ # to cancel resolution.
18
+ #
19
+ # @return [Puppet::HTTP::Service] if the service successfully connects,
20
+ # return it. Otherwise, return nil.
21
+ #
22
+ def resolve(session, name, ssl_context: nil, canceled_handler: nil)
3
23
  service = Puppet::HTTP::Service.create_service(@client, session, name)
4
24
  check_connection?(session, service, ssl_context: ssl_context) ? service : nil
5
25
  end
@@ -1,11 +1,37 @@
1
+ #
2
+ # @api private
3
+ #
4
+ # Resolve a service using SRV
5
+ #
1
6
  class Puppet::HTTP::Resolver::SRV < Puppet::HTTP::Resolver
7
+ #
8
+ # @api private
9
+ #
10
+ # @param [Puppet::HTTP::Client] client
11
+ # @param [String] domain srv domain
12
+ # @param [Resolv::DNS] dns
13
+ #
2
14
  def initialize(client, domain:, dns: Resolv::DNS.new)
3
15
  @client = client
4
16
  @srv_domain = domain
5
17
  @delegate = Puppet::Network::Resolver.new(dns)
6
18
  end
7
19
 
8
- def resolve(session, name, ssl_context: nil)
20
+ #
21
+ # @api private
22
+ #
23
+ # Walk the available srv records and return the first that successfully connects
24
+ #
25
+ # @param [Puppet::HTTP::Session] session
26
+ # @param [Symbol] name the service being resolved
27
+ # @param [Puppet::SSL::SSLContext] ssl_context
28
+ # @param [Proc] canceled_handler (nil) optional callback allowing a resolver
29
+ # to cancel resolution.
30
+ #
31
+ # @return [Puppet::HTTP::Service] if an available service is found, return
32
+ # it. Return nil otherwise.
33
+ #
34
+ def resolve(session, name, ssl_context: nil, canceled_handler: nil)
9
35
  # Here we pass our HTTP service name as the DNS SRV service name
10
36
  # This is fine for :ca, but note that :puppet and :file are handled
11
37
  # specially in `each_srv_record`.
@@ -14,6 +40,6 @@ class Puppet::HTTP::Resolver::SRV < Puppet::HTTP::Resolver
14
40
  return service if check_connection?(session, service, ssl_context: ssl_context)
15
41
  end
16
42
 
17
- return nil
43
+ nil
18
44
  end
19
45
  end
@@ -1,37 +1,118 @@
1
+ #
2
+ # @api private
3
+ #
4
+ # Represents the response returned from the server from an HTTP request
5
+ #
1
6
  class Puppet::HTTP::Response
2
- attr_reader :nethttp, :url
7
+ # @api private
8
+ # @return [Net::HTTP] the Net::HTTP response
9
+ attr_reader :nethttp
3
10
 
11
+ # @api private
12
+ # @return [URI] the response uri
13
+ attr_reader :url
14
+
15
+ #
16
+ # @api private
17
+ #
18
+ # Object to represent the response returned from an HTTP request
19
+ #
20
+ # @param [Net::HTTP] nethttp the request response
21
+ # @param [URI] url
22
+ #
4
23
  def initialize(nethttp, url)
5
24
  @nethttp = nethttp
6
25
  @url = url
7
26
  end
8
27
 
28
+ #
29
+ # @api private
30
+ #
31
+ # Extract the response code
32
+ #
33
+ # @return [Integer] Response code for the request
34
+ #
9
35
  def code
10
36
  @nethttp.code.to_i
11
37
  end
12
38
 
39
+ #
40
+ # @api private
41
+ #
42
+ # Extract the response message
43
+ #
44
+ # @return [String] Response message for the request
45
+ #
13
46
  def reason
14
47
  @nethttp.message
15
48
  end
16
49
 
50
+ #
51
+ # @api private
52
+ #
53
+ # Returns the entire response body. Can be used instead of
54
+ # Puppet::HTTP::Response.read_body, but both methods cannot be used for the
55
+ # same response.
56
+ #
57
+ # @return [String] Response body for the request
58
+ #
17
59
  def body
18
60
  @nethttp.body
19
61
  end
20
62
 
63
+ #
64
+ # @api private
65
+ #
66
+ # Streams the response body to the caller in chunks. Can be used instead of
67
+ # Puppet::HTTP::Response.body, but both methods cannot be used for the same
68
+ # response.
69
+ #
70
+ # @yield [String] Streams the response body in chunks
71
+ #
72
+ # @raise [ArgumentError] raise if a block is not given
73
+ #
21
74
  def read_body(&block)
22
75
  raise ArgumentError, "A block is required" unless block_given?
23
76
 
24
77
  @nethttp.read_body(&block)
25
78
  end
26
79
 
80
+ #
81
+ # @api private
82
+ #
83
+ # Check if the request received a response of success
84
+ #
85
+ # @return [Boolean] Returns true if the response indicates success
86
+ #
27
87
  def success?
28
88
  @nethttp.is_a?(Net::HTTPSuccess)
29
89
  end
30
90
 
91
+ # @api private
92
+ #
93
+ # Get a header case-insensitively.
94
+ # @param [String] name The header name
95
+ # @return [String] The header value
96
+ #
31
97
  def [](name)
32
98
  @nethttp[name]
33
99
  end
34
100
 
101
+ # @api private
102
+ #
103
+ # Yield each header name and value. Returns an enumerator if no block is given.
104
+ #
105
+ # @yieldparam [String] header name
106
+ # @yieldparam [String] header value
107
+ #
108
+ def each_header(&block)
109
+ @nethttp.each_header(&block)
110
+ end
111
+
112
+ # @api private
113
+ #
114
+ # Drain the response body.
115
+ #
35
116
  def drain
36
117
  body
37
118
  true
@@ -1,12 +1,37 @@
1
1
  require 'date'
2
2
  require 'time'
3
3
 
4
+ #
5
+ # @api private
6
+ #
7
+ # Parse information relating to responses containing a Retry-After headers
8
+ #
4
9
  class Puppet::HTTP::RetryAfterHandler
10
+ #
11
+ # @api private
12
+ #
13
+ # Create a handler to allow the system to sleep between HTTP requests
14
+ #
15
+ # @param [Integer] retry_limit number of retries allowed
16
+ # @param [Integer] max_sleep maximum sleep time allowed
17
+ #
5
18
  def initialize(retry_limit, max_sleep)
6
19
  @retry_limit = retry_limit
7
20
  @max_sleep = max_sleep
8
21
  end
9
22
 
23
+ #
24
+ # @api private
25
+ #
26
+ # Does the response from the server tell us to wait until we attempt the next
27
+ # retry?
28
+ #
29
+ # @param [Net::HTTP] request
30
+ # @param [Puppet::HTTP::Response] response
31
+ #
32
+ # @return [Boolean] Return true if the response code is 429 or 503, return
33
+ # false otherwise
34
+ #
10
35
  def retry_after?(request, response)
11
36
  case response.code
12
37
  when 429, 503
@@ -16,6 +41,20 @@ class Puppet::HTTP::RetryAfterHandler
16
41
  end
17
42
  end
18
43
 
44
+ #
45
+ # @api private
46
+ #
47
+ # The amount of time to wait before attempting a retry
48
+ #
49
+ # @param [Net::HTTP] request
50
+ # @param [Puppet::HTTP::Response] response
51
+ # @param [Integer] retries number of retries attempted so far
52
+ #
53
+ # @return [Integer] the amount of time to wait
54
+ #
55
+ # @raise [Puppet::HTTP::TooManyRetryAfters] raise if we have hit our retry
56
+ # limit
57
+ #
19
58
  def retry_after_interval(request, response, retries)
20
59
  raise Puppet::HTTP::TooManyRetryAfters.new(request.uri) if retries >= @retry_limit
21
60