puppet 6.17.0-x86-mingw32 → 7.1.0-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (622) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -16
  3. data/Gemfile +3 -4
  4. data/Gemfile.lock +32 -30
  5. data/README.md +2 -3
  6. data/Rakefile +4 -12
  7. data/conf/fileserver.conf +5 -10
  8. data/ext/build_defaults.yaml +1 -1
  9. data/ext/osx/file_mapping.yaml +0 -5
  10. data/ext/project_data.yaml +2 -14
  11. data/ext/redhat/puppet.spec.erb +0 -1
  12. data/ext/windows/service/daemon.rb +6 -5
  13. data/install.rb +21 -17
  14. data/lib/puppet.rb +11 -20
  15. data/lib/puppet/agent/locker.rb +0 -7
  16. data/lib/puppet/application.rb +172 -98
  17. data/lib/puppet/application/agent.rb +8 -3
  18. data/lib/puppet/application/apply.rb +18 -20
  19. data/lib/puppet/application/device.rb +100 -104
  20. data/lib/puppet/application/doc.rb +1 -1
  21. data/lib/puppet/application/filebucket.rb +15 -11
  22. data/lib/puppet/application/lookup.rb +16 -4
  23. data/lib/puppet/application/ssl.rb +1 -1
  24. data/lib/puppet/application_support.rb +7 -0
  25. data/lib/puppet/configurer.rb +46 -19
  26. data/lib/puppet/configurer/downloader.rb +31 -10
  27. data/lib/puppet/configurer/plugin_handler.rb +21 -19
  28. data/lib/puppet/confine.rb +1 -1
  29. data/lib/puppet/confine/any.rb +1 -1
  30. data/lib/puppet/defaults.rb +116 -162
  31. data/lib/puppet/environments.rb +72 -62
  32. data/lib/puppet/face/catalog.rb +1 -1
  33. data/lib/puppet/face/config.rb +56 -16
  34. data/lib/puppet/face/epp.rb +12 -2
  35. data/lib/puppet/face/facts.rb +66 -6
  36. data/lib/puppet/face/help.rb +1 -1
  37. data/lib/puppet/face/node.rb +3 -3
  38. data/lib/puppet/face/node/clean.rb +10 -2
  39. data/lib/puppet/face/plugin.rb +5 -8
  40. data/lib/puppet/feature/base.rb +1 -1
  41. data/lib/puppet/ffi/posix.rb +10 -0
  42. data/lib/puppet/ffi/posix/constants.rb +14 -0
  43. data/lib/puppet/ffi/posix/functions.rb +24 -0
  44. data/lib/puppet/ffi/windows.rb +12 -0
  45. data/lib/puppet/ffi/windows/api_types.rb +311 -0
  46. data/lib/puppet/ffi/windows/constants.rb +404 -0
  47. data/lib/puppet/ffi/windows/functions.rb +628 -0
  48. data/lib/puppet/ffi/windows/structs.rb +338 -0
  49. data/lib/puppet/file_bucket/dipper.rb +1 -1
  50. data/lib/puppet/file_serving/configuration.rb +0 -5
  51. data/lib/puppet/file_serving/configuration/parser.rb +3 -32
  52. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  53. data/lib/puppet/file_serving/mount.rb +1 -2
  54. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  55. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  56. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  57. data/lib/puppet/file_system/file_impl.rb +3 -3
  58. data/lib/puppet/forge/repository.rb +0 -1
  59. data/lib/puppet/functions/epp.rb +1 -0
  60. data/lib/puppet/functions/inline_epp.rb +1 -0
  61. data/lib/puppet/functions/lstrip.rb +4 -4
  62. data/lib/puppet/functions/new.rb +8 -3
  63. data/lib/puppet/functions/reverse_each.rb +1 -1
  64. data/lib/puppet/functions/rstrip.rb +4 -4
  65. data/lib/puppet/functions/step.rb +1 -1
  66. data/lib/puppet/functions/strip.rb +4 -4
  67. data/lib/puppet/generate/models/type/type.rb +4 -1
  68. data/lib/puppet/gettext/config.rb +5 -5
  69. data/lib/puppet/gettext/module_translations.rb +4 -4
  70. data/lib/puppet/http.rb +23 -13
  71. data/lib/puppet/http/client.rb +165 -115
  72. data/lib/puppet/{network/resolver.rb → http/dns.rb} +2 -2
  73. data/lib/puppet/http/errors.rb +16 -0
  74. data/lib/puppet/http/external_client.rb +5 -7
  75. data/lib/puppet/{network/http → http}/factory.rb +8 -11
  76. data/lib/puppet/{network/http → http}/pool.rb +61 -26
  77. data/lib/puppet/{network/http/session.rb → http/pool_entry.rb} +2 -3
  78. data/lib/puppet/http/proxy.rb +137 -0
  79. data/lib/puppet/http/redirector.rb +4 -12
  80. data/lib/puppet/http/resolver.rb +10 -23
  81. data/lib/puppet/http/resolver/server_list.rb +23 -45
  82. data/lib/puppet/http/resolver/settings.rb +7 -10
  83. data/lib/puppet/http/resolver/srv.rb +11 -15
  84. data/lib/puppet/http/response.rb +36 -54
  85. data/lib/puppet/http/response_converter.rb +24 -0
  86. data/lib/puppet/http/response_net_http.rb +42 -0
  87. data/lib/puppet/http/retry_after_handler.rb +4 -13
  88. data/lib/puppet/http/service.rb +15 -27
  89. data/lib/puppet/http/service/ca.rb +11 -22
  90. data/lib/puppet/http/service/compiler.rb +23 -70
  91. data/lib/puppet/http/service/file_server.rb +19 -28
  92. data/lib/puppet/http/service/puppetserver.rb +53 -0
  93. data/lib/puppet/http/service/report.rb +8 -10
  94. data/lib/puppet/http/session.rb +16 -24
  95. data/lib/puppet/{network/http → http}/site.rb +1 -2
  96. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  97. data/lib/puppet/indirector/catalog/rest.rb +2 -4
  98. data/lib/puppet/indirector/exec.rb +1 -1
  99. data/lib/puppet/indirector/fact_search.rb +60 -0
  100. data/lib/puppet/indirector/facts/facter.rb +27 -6
  101. data/lib/puppet/indirector/facts/json.rb +27 -0
  102. data/lib/puppet/indirector/facts/rest.rb +3 -22
  103. data/lib/puppet/indirector/facts/yaml.rb +4 -59
  104. data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -9
  105. data/lib/puppet/indirector/file_content/rest.rb +2 -6
  106. data/lib/puppet/indirector/file_metadata/http.rb +1 -0
  107. data/lib/puppet/indirector/file_metadata/rest.rb +3 -9
  108. data/lib/puppet/indirector/file_server.rb +1 -8
  109. data/lib/puppet/indirector/generic_http.rb +0 -11
  110. data/lib/puppet/indirector/hiera.rb +4 -0
  111. data/lib/puppet/indirector/indirection.rb +1 -1
  112. data/lib/puppet/indirector/json.rb +5 -1
  113. data/lib/puppet/indirector/msgpack.rb +1 -1
  114. data/lib/puppet/indirector/node/json.rb +8 -0
  115. data/lib/puppet/indirector/node/rest.rb +2 -4
  116. data/lib/puppet/indirector/report/json.rb +34 -0
  117. data/lib/puppet/indirector/report/processor.rb +2 -2
  118. data/lib/puppet/indirector/report/rest.rb +3 -8
  119. data/lib/puppet/indirector/request.rb +1 -102
  120. data/lib/puppet/indirector/rest.rb +12 -263
  121. data/lib/puppet/indirector/yaml.rb +1 -1
  122. data/lib/puppet/module.rb +1 -2
  123. data/lib/puppet/module_tool/applications.rb +0 -1
  124. data/lib/puppet/network/authconfig.rb +2 -96
  125. data/lib/puppet/network/authorization.rb +13 -35
  126. data/lib/puppet/network/format_support.rb +2 -2
  127. data/lib/puppet/network/formats.rb +2 -1
  128. data/lib/puppet/network/http.rb +3 -3
  129. data/lib/puppet/network/http/api/indirected_routes.rb +2 -20
  130. data/lib/puppet/network/http/api/master/v3.rb +11 -13
  131. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  132. data/lib/puppet/network/http/connection.rb +247 -316
  133. data/lib/puppet/network/http/handler.rb +0 -1
  134. data/lib/puppet/network/http/route.rb +2 -2
  135. data/lib/puppet/network/http_pool.rb +16 -34
  136. data/lib/puppet/node.rb +1 -30
  137. data/lib/puppet/node/environment.rb +12 -5
  138. data/lib/puppet/node/facts.rb +17 -0
  139. data/lib/puppet/pal/json_catalog_encoder.rb +4 -0
  140. data/lib/puppet/pal/pal_impl.rb +93 -14
  141. data/lib/puppet/parameter.rb +1 -1
  142. data/lib/puppet/parser/ast/pops_bridge.rb +0 -38
  143. data/lib/puppet/parser/compiler.rb +0 -198
  144. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +14 -39
  145. data/lib/puppet/parser/functions.rb +21 -17
  146. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  147. data/lib/puppet/parser/resource.rb +0 -69
  148. data/lib/puppet/parser/templatewrapper.rb +1 -1
  149. data/lib/puppet/parser/type_loader.rb +2 -2
  150. data/lib/puppet/pops/adaptable.rb +7 -13
  151. data/lib/puppet/pops/adapters.rb +8 -4
  152. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  153. data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -8
  154. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  155. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +3 -3
  156. data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
  157. data/lib/puppet/pops/issues.rb +0 -5
  158. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -8
  159. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  160. data/lib/puppet/pops/loaders.rb +18 -11
  161. data/lib/puppet/pops/lookup/context.rb +1 -1
  162. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  163. data/lib/puppet/pops/model/ast.pp +0 -42
  164. data/lib/puppet/pops/model/ast.rb +0 -290
  165. data/lib/puppet/pops/model/factory.rb +0 -45
  166. data/lib/puppet/pops/model/model_label_provider.rb +0 -5
  167. data/lib/puppet/pops/model/model_tree_dumper.rb +0 -22
  168. data/lib/puppet/pops/model/pn_transformer.rb +0 -16
  169. data/lib/puppet/pops/parser/egrammar.ra +0 -56
  170. data/lib/puppet/pops/parser/eparser.rb +1520 -1712
  171. data/lib/puppet/pops/parser/lexer2.rb +4 -4
  172. data/lib/puppet/pops/parser/parser_support.rb +0 -5
  173. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -24
  174. data/lib/puppet/pops/types/iterable.rb +34 -8
  175. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  176. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  177. data/lib/puppet/pops/types/type_calculator.rb +0 -7
  178. data/lib/puppet/pops/types/type_parser.rb +0 -4
  179. data/lib/puppet/pops/types/types.rb +0 -1
  180. data/lib/puppet/pops/validation/checker4_0.rb +28 -52
  181. data/lib/puppet/pops/validation/tasks_checker.rb +0 -12
  182. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -2
  183. data/lib/puppet/provider.rb +0 -13
  184. data/lib/puppet/provider/file/windows.rb +1 -1
  185. data/lib/puppet/provider/nameservice.rb +0 -18
  186. data/lib/puppet/provider/package/apt.rb +34 -0
  187. data/lib/puppet/provider/package/dpkg.rb +1 -11
  188. data/lib/puppet/provider/package/gem.rb +27 -5
  189. data/lib/puppet/provider/package/pip.rb +0 -1
  190. data/lib/puppet/provider/package/pip2.rb +17 -0
  191. data/lib/puppet/provider/package/pkg.rb +0 -4
  192. data/lib/puppet/provider/package/portage.rb +1 -1
  193. data/lib/puppet/provider/package/puppet_gem.rb +6 -4
  194. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  195. data/lib/puppet/provider/package/yum.rb +1 -0
  196. data/lib/puppet/provider/package/zypper.rb +3 -0
  197. data/lib/puppet/provider/service/smf.rb +191 -73
  198. data/lib/puppet/provider/user/aix.rb +3 -3
  199. data/lib/puppet/provider/user/directoryservice.rb +0 -10
  200. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  201. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  202. data/lib/puppet/reference/configuration.rb +2 -0
  203. data/lib/puppet/reference/indirection.rb +1 -1
  204. data/lib/puppet/resource.rb +1 -89
  205. data/lib/puppet/resource/catalog.rb +1 -14
  206. data/lib/puppet/resource/type.rb +5 -120
  207. data/lib/puppet/resource/type_collection.rb +3 -48
  208. data/lib/puppet/runtime.rb +1 -2
  209. data/lib/puppet/settings.rb +84 -35
  210. data/lib/puppet/settings/base_setting.rb +26 -2
  211. data/lib/puppet/settings/integer_setting.rb +17 -0
  212. data/lib/puppet/settings/port_setting.rb +15 -0
  213. data/lib/puppet/settings/priority_setting.rb +5 -4
  214. data/lib/puppet/ssl.rb +10 -6
  215. data/lib/puppet/ssl/base.rb +3 -5
  216. data/lib/puppet/ssl/certificate.rb +0 -6
  217. data/lib/puppet/ssl/certificate_request.rb +1 -12
  218. data/lib/puppet/ssl/certificate_signer.rb +6 -0
  219. data/lib/puppet/ssl/oids.rb +3 -1
  220. data/lib/puppet/ssl/ssl_provider.rb +17 -0
  221. data/lib/puppet/ssl/state_machine.rb +3 -1
  222. data/lib/puppet/ssl/verifier.rb +2 -0
  223. data/lib/puppet/test/test_helper.rb +11 -6
  224. data/lib/puppet/transaction.rb +3 -9
  225. data/lib/puppet/transaction/persistence.rb +1 -1
  226. data/lib/puppet/transaction/report.rb +10 -8
  227. data/lib/puppet/trusted_external.rb +2 -2
  228. data/lib/puppet/type.rb +4 -79
  229. data/lib/puppet/type/file.rb +7 -9
  230. data/lib/puppet/type/file/checksum.rb +1 -1
  231. data/lib/puppet/type/file/source.rb +29 -9
  232. data/lib/puppet/type/filebucket.rb +4 -4
  233. data/lib/puppet/type/notify.rb +2 -2
  234. data/lib/puppet/type/package.rb +5 -13
  235. data/lib/puppet/type/service.rb +4 -0
  236. data/lib/puppet/type/user.rb +19 -4
  237. data/lib/puppet/util.rb +26 -12
  238. data/lib/puppet/util/autoload.rb +9 -7
  239. data/lib/puppet/util/character_encoding.rb +9 -5
  240. data/lib/puppet/util/execution.rb +2 -13
  241. data/lib/puppet/util/http_proxy.rb +2 -215
  242. data/lib/puppet/util/monkey_patches.rb +0 -46
  243. data/lib/puppet/util/posix.rb +53 -4
  244. data/lib/puppet/util/rdoc.rb +0 -7
  245. data/lib/puppet/util/retry_action.rb +1 -1
  246. data/lib/puppet/util/rubygems.rb +5 -1
  247. data/lib/puppet/util/run_mode.rb +14 -2
  248. data/lib/puppet/util/windows.rb +3 -7
  249. data/lib/puppet/util/windows/daemon.rb +360 -0
  250. data/lib/puppet/util/windows/error.rb +1 -0
  251. data/lib/puppet/util/windows/eventlog.rb +4 -9
  252. data/lib/puppet/util/windows/file.rb +8 -242
  253. data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
  254. data/lib/puppet/util/windows/process.rb +4 -226
  255. data/lib/puppet/util/windows/security.rb +4 -4
  256. data/lib/puppet/util/windows/service.rb +9 -460
  257. data/lib/puppet/util/windows/string.rb +12 -13
  258. data/lib/puppet/util/windows/user.rb +219 -0
  259. data/lib/puppet/util/yaml.rb +0 -22
  260. data/lib/puppet/vendor/require_vendored.rb +0 -1
  261. data/lib/puppet/version.rb +1 -1
  262. data/lib/puppet/x509.rb +5 -1
  263. data/lib/puppet/x509/cert_provider.rb +29 -1
  264. data/locales/puppet.pot +656 -1351
  265. data/man/man5/puppet.conf.5 +72 -97
  266. data/man/man8/puppet-agent.8 +6 -3
  267. data/man/man8/puppet-apply.8 +1 -1
  268. data/man/man8/puppet-catalog.8 +1 -1
  269. data/man/man8/puppet-config.8 +6 -6
  270. data/man/man8/puppet-describe.8 +1 -1
  271. data/man/man8/puppet-device.8 +1 -1
  272. data/man/man8/puppet-doc.8 +1 -1
  273. data/man/man8/puppet-epp.8 +1 -1
  274. data/man/man8/puppet-facts.8 +55 -9
  275. data/man/man8/puppet-filebucket.8 +6 -6
  276. data/man/man8/puppet-generate.8 +1 -1
  277. data/man/man8/puppet-help.8 +1 -1
  278. data/man/man8/puppet-lookup.8 +2 -2
  279. data/man/man8/puppet-module.8 +1 -58
  280. data/man/man8/puppet-node.8 +7 -4
  281. data/man/man8/puppet-parser.8 +1 -1
  282. data/man/man8/puppet-plugin.8 +1 -1
  283. data/man/man8/puppet-report.8 +4 -1
  284. data/man/man8/puppet-resource.8 +1 -1
  285. data/man/man8/puppet-script.8 +1 -1
  286. data/man/man8/puppet-ssl.8 +1 -1
  287. data/man/man8/puppet.8 +2 -2
  288. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  289. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  290. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  291. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  292. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  293. data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
  294. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
  295. data/spec/integration/application/agent_spec.rb +70 -61
  296. data/spec/integration/application/apply_spec.rb +150 -150
  297. data/spec/integration/application/doc_spec.rb +16 -6
  298. data/spec/integration/application/filebucket_spec.rb +78 -29
  299. data/spec/integration/application/help_spec.rb +44 -0
  300. data/spec/integration/application/lookup_spec.rb +13 -0
  301. data/spec/integration/application/module_spec.rb +68 -0
  302. data/spec/integration/application/plugin_spec.rb +76 -4
  303. data/spec/integration/configurer_spec.rb +14 -0
  304. data/spec/integration/data_binding_spec.rb +82 -0
  305. data/spec/integration/defaults_spec.rb +32 -3
  306. data/spec/integration/directory_environments_spec.rb +17 -17
  307. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  308. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  309. data/spec/integration/network/http_pool_spec.rb +3 -21
  310. data/spec/integration/node/environment_spec.rb +1 -1
  311. data/spec/integration/parser/catalog_spec.rb +0 -38
  312. data/spec/integration/parser/node_spec.rb +0 -9
  313. data/spec/integration/parser/pcore_resource_spec.rb +0 -37
  314. data/spec/integration/type/file_spec.rb +5 -4
  315. data/spec/integration/util/execution_spec.rb +22 -0
  316. data/spec/integration/util/windows/adsi_spec.rb +2 -2
  317. data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
  318. data/spec/integration/util/windows/process_spec.rb +26 -32
  319. data/spec/integration/util/windows/security_spec.rb +1 -1
  320. data/spec/integration/util/windows/user_spec.rb +7 -0
  321. data/spec/integration/util_spec.rb +7 -33
  322. data/spec/lib/puppet_spec/matchers.rb +0 -80
  323. data/spec/lib/puppet_spec/puppetserver.rb +9 -1
  324. data/spec/lib/puppet_spec/settings.rb +7 -1
  325. data/spec/shared_contexts/types_setup.rb +2 -0
  326. data/spec/spec_helper.rb +2 -0
  327. data/spec/unit/agent_spec.rb +0 -2
  328. data/spec/unit/application/agent_spec.rb +3 -4
  329. data/spec/unit/application/config_spec.rb +224 -4
  330. data/spec/unit/application/doc_spec.rb +2 -2
  331. data/spec/unit/application/face_base_spec.rb +6 -4
  332. data/spec/unit/application/facts_spec.rb +74 -8
  333. data/spec/unit/application/filebucket_spec.rb +41 -39
  334. data/spec/unit/application/resource_spec.rb +3 -1
  335. data/spec/unit/application/ssl_spec.rb +17 -4
  336. data/spec/unit/application_spec.rb +43 -4
  337. data/spec/unit/certificate_factory_spec.rb +1 -1
  338. data/spec/unit/configurer/downloader_spec.rb +14 -0
  339. data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
  340. data/spec/unit/configurer_spec.rb +96 -44
  341. data/spec/unit/confine_spec.rb +2 -1
  342. data/spec/unit/context/trusted_information_spec.rb +2 -6
  343. data/spec/unit/defaults_spec.rb +26 -32
  344. data/spec/unit/environments_spec.rb +173 -32
  345. data/spec/unit/face/config_spec.rb +65 -12
  346. data/spec/unit/face/facts_spec.rb +4 -0
  347. data/spec/unit/face/node_spec.rb +16 -4
  348. data/spec/unit/face/plugin_spec.rb +73 -33
  349. data/spec/unit/file_bucket/file_spec.rb +1 -1
  350. data/spec/unit/file_serving/configuration/parser_spec.rb +14 -18
  351. data/spec/unit/file_serving/configuration_spec.rb +6 -12
  352. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  353. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  354. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  355. data/spec/unit/file_system/uniquefile_spec.rb +18 -0
  356. data/spec/unit/file_system_spec.rb +1 -2
  357. data/spec/unit/functions/camelcase_spec.rb +1 -1
  358. data/spec/unit/functions/capitalize_spec.rb +1 -1
  359. data/spec/unit/functions/downcase_spec.rb +1 -1
  360. data/spec/unit/functions/inline_epp_spec.rb +26 -1
  361. data/spec/unit/functions/upcase_spec.rb +1 -1
  362. data/spec/unit/http/client_spec.rb +7 -9
  363. data/spec/unit/{network/resolver_spec.rb → http/dns_spec.rb} +3 -3
  364. data/spec/unit/http/external_client_spec.rb +4 -4
  365. data/spec/unit/{network/http → http}/factory_spec.rb +5 -11
  366. data/spec/unit/{network/http/session_spec.rb → http/pool_entry_spec.rb} +3 -3
  367. data/spec/unit/{network/http → http}/pool_spec.rb +12 -17
  368. data/spec/unit/{util/http_proxy_spec.rb → http/proxy_spec.rb} +2 -69
  369. data/spec/unit/http/resolver_spec.rb +34 -15
  370. data/spec/unit/http/service/ca_spec.rb +2 -3
  371. data/spec/unit/http/service/compiler_spec.rb +51 -65
  372. data/spec/unit/http/service/file_server_spec.rb +5 -6
  373. data/spec/unit/http/service/puppetserver_spec.rb +112 -0
  374. data/spec/unit/http/service/report_spec.rb +2 -3
  375. data/spec/unit/http/service_spec.rb +1 -3
  376. data/spec/unit/http/session_spec.rb +24 -35
  377. data/spec/unit/{network/http → http}/site_spec.rb +3 -3
  378. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  379. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  380. data/spec/unit/indirector/facts/facter_spec.rb +97 -0
  381. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  382. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  383. data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
  384. data/spec/unit/indirector/file_content/rest_spec.rb +0 -4
  385. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -4
  386. data/spec/unit/indirector/file_server_spec.rb +1 -15
  387. data/spec/unit/indirector/json_spec.rb +8 -8
  388. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  389. data/spec/unit/indirector/node/json_spec.rb +33 -0
  390. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  391. data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
  392. data/spec/unit/indirector/report/rest_spec.rb +2 -17
  393. data/spec/unit/indirector/report/yaml_spec.rb +72 -8
  394. data/spec/unit/indirector/request_spec.rb +2 -266
  395. data/spec/unit/indirector/rest_spec.rb +98 -752
  396. data/spec/unit/indirector/yaml_spec.rb +7 -7
  397. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  398. data/spec/unit/network/authconfig_spec.rb +2 -132
  399. data/spec/unit/network/authorization_spec.rb +2 -55
  400. data/spec/unit/network/format_support_spec.rb +3 -2
  401. data/spec/unit/network/formats_spec.rb +4 -4
  402. data/spec/unit/network/http/api/indirected_routes_spec.rb +1 -97
  403. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  404. data/spec/unit/network/http/api/master/v3_spec.rb +28 -7
  405. data/spec/unit/network/http/api_spec.rb +10 -0
  406. data/spec/unit/network/http/connection_spec.rb +19 -41
  407. data/spec/unit/network/http/handler_spec.rb +0 -6
  408. data/spec/unit/network/http_pool_spec.rb +0 -4
  409. data/spec/unit/node/environment_spec.rb +51 -22
  410. data/spec/unit/node_spec.rb +2 -54
  411. data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
  412. data/spec/unit/parser/templatewrapper_spec.rb +4 -3
  413. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +4 -7
  414. data/spec/unit/pops/loaders/loaders_spec.rb +76 -21
  415. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  416. data/spec/unit/pops/parser/parse_application_spec.rb +4 -22
  417. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +0 -1
  418. data/spec/unit/pops/parser/parse_capabilities_spec.rb +8 -21
  419. data/spec/unit/pops/parser/parse_site_spec.rb +20 -24
  420. data/spec/unit/pops/resource/resource_type_impl_spec.rb +0 -71
  421. data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
  422. data/spec/unit/pops/types/type_calculator_spec.rb +6 -6
  423. data/spec/unit/pops/types/type_factory_spec.rb +1 -1
  424. data/spec/unit/pops/validator/validator_spec.rb +61 -46
  425. data/spec/unit/pops/visitor_spec.rb +1 -1
  426. data/spec/unit/provider/exec_spec.rb +4 -3
  427. data/spec/unit/provider/nameservice_spec.rb +0 -57
  428. data/spec/unit/provider/package/apt_spec.rb +77 -0
  429. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  430. data/spec/unit/provider/package/dpkg_spec.rb +22 -55
  431. data/spec/unit/provider/package/gem_spec.rb +32 -0
  432. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  433. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  434. data/spec/unit/provider/package/puppet_gem_spec.rb +6 -2
  435. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  436. data/spec/unit/provider/package/yum_spec.rb +31 -0
  437. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  438. data/spec/unit/provider/service/base_spec.rb +2 -4
  439. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  440. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  441. data/spec/unit/provider/service/debian_spec.rb +3 -5
  442. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  443. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  444. data/spec/unit/provider/service/init_spec.rb +45 -5
  445. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  446. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  447. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  448. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  449. data/spec/unit/provider/service/runit_spec.rb +2 -1
  450. data/spec/unit/provider/service/smf_spec.rb +402 -166
  451. data/spec/unit/provider/service/src_spec.rb +3 -5
  452. data/spec/unit/provider/service/systemd_spec.rb +3 -6
  453. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  454. data/spec/unit/provider/service/windows_spec.rb +28 -1
  455. data/spec/unit/provider/user/aix_spec.rb +5 -0
  456. data/spec/unit/provider/user/pw_spec.rb +2 -0
  457. data/spec/unit/provider/user/useradd_spec.rb +1 -0
  458. data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
  459. data/spec/unit/provider_spec.rb +0 -12
  460. data/spec/unit/puppet_pal_2pec.rb +40 -0
  461. data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
  462. data/spec/unit/reports/store_spec.rb +17 -13
  463. data/spec/unit/resource/type_collection_spec.rb +2 -22
  464. data/spec/unit/resource_spec.rb +0 -56
  465. data/spec/unit/settings/http_extra_headers_spec.rb +2 -4
  466. data/spec/unit/settings/integer_setting_spec.rb +42 -0
  467. data/spec/unit/settings/port_setting_spec.rb +31 -0
  468. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  469. data/spec/unit/settings_spec.rb +586 -239
  470. data/spec/unit/ssl/base_spec.rb +36 -3
  471. data/spec/unit/ssl/certificate_request_spec.rb +15 -45
  472. data/spec/unit/ssl/certificate_spec.rb +2 -11
  473. data/spec/unit/ssl/ssl_provider_spec.rb +11 -8
  474. data/spec/unit/ssl/state_machine_spec.rb +0 -1
  475. data/spec/unit/ssl/verifier_spec.rb +0 -21
  476. data/spec/unit/transaction/persistence_spec.rb +15 -0
  477. data/spec/unit/transaction/report_spec.rb +2 -2
  478. data/spec/unit/transaction/resource_harness_spec.rb +2 -2
  479. data/spec/unit/transaction_spec.rb +45 -79
  480. data/spec/unit/type/file/checksum_spec.rb +6 -6
  481. data/spec/unit/type/file/content_spec.rb +1 -1
  482. data/spec/unit/type/file/ensure_spec.rb +1 -1
  483. data/spec/unit/type/file/mode_spec.rb +1 -1
  484. data/spec/unit/type/file/source_spec.rb +1 -2
  485. data/spec/unit/type/file_spec.rb +12 -6
  486. data/spec/unit/type/filebucket_spec.rb +1 -1
  487. data/spec/unit/type/package_spec.rb +1 -1
  488. data/spec/unit/type/service_spec.rb +35 -2
  489. data/spec/unit/type/user_spec.rb +31 -2
  490. data/spec/unit/type_spec.rb +20 -0
  491. data/spec/unit/util/backups_spec.rb +0 -2
  492. data/spec/unit/util/character_encoding_spec.rb +4 -4
  493. data/spec/unit/util/command_line_spec.rb +11 -6
  494. data/spec/unit/util/execution_spec.rb +0 -29
  495. data/spec/unit/util/monkey_patches_spec.rb +0 -6
  496. data/spec/unit/util/posix_spec.rb +357 -15
  497. data/spec/unit/util/rubygems_spec.rb +2 -2
  498. data/spec/unit/util/run_mode_spec.rb +27 -127
  499. data/spec/unit/util/storage_spec.rb +3 -1
  500. data/spec/unit/util/windows/string_spec.rb +1 -3
  501. data/spec/unit/util/yaml_spec.rb +0 -54
  502. data/spec/unit/util_spec.rb +0 -18
  503. metadata +84 -261
  504. data/conf/auth.conf +0 -150
  505. data/lib/puppet/application/cert.rb +0 -76
  506. data/lib/puppet/application/key.rb +0 -4
  507. data/lib/puppet/application/man.rb +0 -4
  508. data/lib/puppet/application/status.rb +0 -4
  509. data/lib/puppet/face/key.rb +0 -16
  510. data/lib/puppet/face/man.rb +0 -145
  511. data/lib/puppet/face/module/build.rb +0 -14
  512. data/lib/puppet/face/module/generate.rb +0 -14
  513. data/lib/puppet/face/module/search.rb +0 -103
  514. data/lib/puppet/face/status.rb +0 -51
  515. data/lib/puppet/indirector/certificate/file.rb +0 -9
  516. data/lib/puppet/indirector/certificate/rest.rb +0 -18
  517. data/lib/puppet/indirector/certificate_request/file.rb +0 -9
  518. data/lib/puppet/indirector/certificate_request/memory.rb +0 -7
  519. data/lib/puppet/indirector/certificate_request/rest.rb +0 -11
  520. data/lib/puppet/indirector/file_content/http.rb +0 -22
  521. data/lib/puppet/indirector/key/file.rb +0 -46
  522. data/lib/puppet/indirector/key/memory.rb +0 -7
  523. data/lib/puppet/indirector/ssl_file.rb +0 -162
  524. data/lib/puppet/indirector/status.rb +0 -3
  525. data/lib/puppet/indirector/status/local.rb +0 -12
  526. data/lib/puppet/indirector/status/rest.rb +0 -27
  527. data/lib/puppet/module_tool/applications/searcher.rb +0 -29
  528. data/lib/puppet/network/auth_config_parser.rb +0 -90
  529. data/lib/puppet/network/authstore.rb +0 -283
  530. data/lib/puppet/network/http/api/master/v3/authorization.rb +0 -18
  531. data/lib/puppet/network/http/api/master/v3/environment.rb +0 -88
  532. data/lib/puppet/network/http/base_pool.rb +0 -36
  533. data/lib/puppet/network/http/compression.rb +0 -127
  534. data/lib/puppet/network/http/connection_adapter.rb +0 -184
  535. data/lib/puppet/network/http/nocache_pool.rb +0 -28
  536. data/lib/puppet/network/rest_controller.rb +0 -2
  537. data/lib/puppet/network/rights.rb +0 -210
  538. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -66
  539. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -22
  540. data/lib/puppet/parser/environment_compiler.rb +0 -202
  541. data/lib/puppet/pops/types/enumeration.rb +0 -16
  542. data/lib/puppet/resource/capability_finder.rb +0 -154
  543. data/lib/puppet/rest/errors.rb +0 -15
  544. data/lib/puppet/rest/response.rb +0 -35
  545. data/lib/puppet/rest/route.rb +0 -85
  546. data/lib/puppet/rest/routes.rb +0 -135
  547. data/lib/puppet/ssl/host.rb +0 -505
  548. data/lib/puppet/ssl/key.rb +0 -61
  549. data/lib/puppet/ssl/validator.rb +0 -61
  550. data/lib/puppet/ssl/validator/default_validator.rb +0 -209
  551. data/lib/puppet/ssl/validator/no_validator.rb +0 -22
  552. data/lib/puppet/ssl/verifier_adapter.rb +0 -58
  553. data/lib/puppet/status.rb +0 -40
  554. data/lib/puppet/util/connection.rb +0 -88
  555. data/lib/puppet/util/ssl.rb +0 -83
  556. data/lib/puppet/util/windows/api_types.rb +0 -295
  557. data/lib/puppet/vendor/load_pathspec.rb +0 -1
  558. data/lib/puppet/vendor/pathspec/CHANGELOG.md +0 -2
  559. data/lib/puppet/vendor/pathspec/LICENSE +0 -201
  560. data/lib/puppet/vendor/pathspec/PUPPET_README.md +0 -6
  561. data/lib/puppet/vendor/pathspec/README.md +0 -53
  562. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +0 -122
  563. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +0 -275
  564. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +0 -17
  565. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +0 -14
  566. data/man/man8/puppet-key.8 +0 -126
  567. data/man/man8/puppet-man.8 +0 -76
  568. data/man/man8/puppet-status.8 +0 -108
  569. data/spec/integration/faces/config_spec.rb +0 -91
  570. data/spec/integration/faces/documentation_spec.rb +0 -57
  571. data/spec/integration/file_bucket/file_spec.rb +0 -50
  572. data/spec/integration/file_serving/content_spec.rb +0 -7
  573. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  574. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  575. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  576. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  577. data/spec/integration/module_tool/forge_spec.rb +0 -51
  578. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  579. data/spec/integration/network/authconfig_spec.rb +0 -256
  580. data/spec/integration/provider/service/init_spec.rb +0 -48
  581. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  582. data/spec/integration/provider/service/windows_spec.rb +0 -50
  583. data/spec/integration/reference/providers_spec.rb +0 -21
  584. data/spec/integration/reports_spec.rb +0 -13
  585. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  586. data/spec/integration/ssl/host_spec.rb +0 -72
  587. data/spec/integration/ssl/key_spec.rb +0 -99
  588. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  589. data/spec/unit/capability_spec.rb +0 -414
  590. data/spec/unit/face/catalog_spec.rb +0 -6
  591. data/spec/unit/face/key_spec.rb +0 -9
  592. data/spec/unit/face/man_spec.rb +0 -25
  593. data/spec/unit/face/module/search_spec.rb +0 -231
  594. data/spec/unit/face/module_spec.rb +0 -3
  595. data/spec/unit/face/status_spec.rb +0 -9
  596. data/spec/unit/indirector/certificate/file_spec.rb +0 -14
  597. data/spec/unit/indirector/certificate/rest_spec.rb +0 -61
  598. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -14
  599. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -25
  600. data/spec/unit/indirector/key/file_spec.rb +0 -79
  601. data/spec/unit/indirector/ssl_file_spec.rb +0 -305
  602. data/spec/unit/indirector/status/local_spec.rb +0 -10
  603. data/spec/unit/indirector/status/rest_spec.rb +0 -50
  604. data/spec/unit/man_spec.rb +0 -31
  605. data/spec/unit/module_tool/applications/searcher_spec.rb +0 -38
  606. data/spec/unit/network/auth_config_parser_spec.rb +0 -115
  607. data/spec/unit/network/authstore_spec.rb +0 -422
  608. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +0 -57
  609. data/spec/unit/network/http/api/master/v3/environment_spec.rb +0 -185
  610. data/spec/unit/network/http/compression_spec.rb +0 -240
  611. data/spec/unit/network/http/nocache_pool_spec.rb +0 -64
  612. data/spec/unit/network/http_spec.rb +0 -9
  613. data/spec/unit/network/rights_spec.rb +0 -439
  614. data/spec/unit/parser/environment_compiler_spec.rb +0 -730
  615. data/spec/unit/pops/types/enumeration_spec.rb +0 -51
  616. data/spec/unit/resource/capability_finder_spec.rb +0 -143
  617. data/spec/unit/rest/route_spec.rb +0 -132
  618. data/spec/unit/ssl/host_spec.rb +0 -650
  619. data/spec/unit/ssl/key_spec.rb +0 -173
  620. data/spec/unit/ssl/validator_spec.rb +0 -278
  621. data/spec/unit/status_spec.rb +0 -45
  622. data/spec/unit/util/ssl_spec.rb +0 -91
@@ -1,26 +1,17 @@
1
- #
2
- # @api private
3
- #
4
1
  # Resolver base class. Each resolver represents a different strategy for
5
2
  # resolving a service name into a list of candidate servers and ports.
6
3
  #
7
4
  # @abstract Subclass and override {#resolve} to create a new resolver.
8
- #
5
+ # @api public
9
6
  class Puppet::HTTP::Resolver
10
7
  #
11
- # @api private
12
- #
13
- # Create a new resolver
8
+ # Create a new resolver.
14
9
  #
15
10
  # @param [Puppet::HTTP::Client] client
16
- #
17
11
  def initialize(client)
18
12
  @client = client
19
13
  end
20
14
 
21
- #
22
- # @api private
23
- #
24
15
  # Return a working server/port for the resolver. This is the base
25
16
  # implementation and is meant to be a placeholder.
26
17
  #
@@ -28,34 +19,30 @@ class Puppet::HTTP::Resolver
28
19
  # @param [Symbol] name the service to resolve
29
20
  # @param [Puppet::SSL::SSLContext] ssl_context (nil) optional ssl context to
30
21
  # use when creating a connection
31
- # @param [Proc] error_handler (nil) optional callback for each error
32
- # encountered while resolving a route.
22
+ # @param [Proc] canceled_handler (nil) optional callback allowing a resolver
23
+ # to cancel resolution.
33
24
  #
34
25
  # @raise [NotImplementedError] this base class is not implemented
35
26
  #
36
- def resolve(session, name, ssl_context: nil, error_handler: nil)
27
+ # @api public
28
+ def resolve(session, name, ssl_context: nil, canceled_handler: nil)
37
29
  raise NotImplementedError
38
30
  end
39
31
 
40
- #
41
- # @api private
42
- #
43
- # Check a given connection to establish if it can be relied on for future use
32
+ # Check a given connection to establish if it can be relied on for future use.
44
33
  #
45
34
  # @param [Puppet::HTTP::Session] session
46
35
  # @param [Puppet::HTTP::Service] service
47
36
  # @param [Puppet::SSL::SSLContext] ssl_context
48
- # @param [Proc] error_handler (nil) optional callback for each error
49
- # encountered while resolving a route.
50
37
  #
51
38
  # @return [Boolean] Returns true if a connection is successful, false otherwise
52
39
  #
53
- def check_connection?(session, service, ssl_context: nil, error_handler: nil)
40
+ # @api public
41
+ def check_connection?(session, service, ssl_context: nil)
54
42
  service.connect(ssl_context: ssl_context)
55
43
  return true
56
44
  rescue Puppet::HTTP::ConnectionError => e
57
- error_handler.call(e) if error_handler
58
- Puppet.debug("Connection to #{service.url} failed, trying next route: #{e.message}")
45
+ Puppet.log_exception(e, "Connection to #{service.url} failed, trying next route: #{e.message}")
59
46
  return false
60
47
  end
61
48
  end
@@ -1,12 +1,10 @@
1
- #
2
- # @api private
3
- #
4
1
  # Use the server_list setting to resolve a service. This resolver is only used
5
2
  # if server_list is set either on the command line or in the configuration file.
6
3
  #
4
+ # @api public
7
5
  class Puppet::HTTP::Resolver::ServerList < Puppet::HTTP::Resolver
8
- #
9
- # @api private
6
+
7
+ # Create a server list resolver.
10
8
  #
11
9
  # @param [Puppet::HTTP::Client] client
12
10
  # @param [Array<String>] server_list_setting array of servers set via the
@@ -22,19 +20,15 @@ class Puppet::HTTP::Resolver::ServerList < Puppet::HTTP::Resolver
22
20
  @server_list_setting = server_list_setting
23
21
  @default_port = default_port
24
22
  @services = services
25
- @resolved_url = nil
26
23
  end
27
24
 
28
- #
29
- # @api private
30
- #
31
25
  # Walk the server_list to find a server and port that will connect successfully.
32
26
  #
33
- # @param [Puppet::HTTP::Session] session <description>
27
+ # @param [Puppet::HTTP::Session] session
34
28
  # @param [Symbol] name the name of the service being resolved
35
29
  # @param [Puppet::SSL::SSLContext] ssl_context
36
- # @param [Proc] error_handler (nil) optional callback for each error
37
- # encountered while resolving a route.
30
+ # @param [Proc] canceled_handler optional callback allowing a resolver
31
+ # to cancel resolution.
38
32
  #
39
33
  # @return [nil] return nil if the service to be resolved does not support
40
34
  # server_list
@@ -44,7 +38,8 @@ class Puppet::HTTP::Resolver::ServerList < Puppet::HTTP::Resolver
44
38
  # @raise [Puppet::Error] raise if none of the servers defined in server_list
45
39
  # are available
46
40
  #
47
- def resolve(session, name, ssl_context: nil, error_handler: nil)
41
+ # @api public
42
+ def resolve(session, name, ssl_context: nil, canceled_handler: nil)
48
43
  # If we're configured to use an explicit service host, e.g. report_server
49
44
  # then don't use server_list to resolve the `:report` service.
50
45
  return nil unless @services.include?(name)
@@ -58,41 +53,24 @@ class Puppet::HTTP::Resolver::ServerList < Puppet::HTTP::Resolver
58
53
  @server_list_setting.value.each do |server|
59
54
  host = server[0]
60
55
  port = server[1] || @default_port
61
- uri = URI("https://#{host}:#{port}/status/v1/simple/master")
62
- if get_success?(uri, session, ssl_context: ssl_context, error_handler: error_handler)
63
- @resolved_url = uri
64
- return Puppet::HTTP::Service.create_service(@client, session, name, host, port)
56
+
57
+ service = Puppet::HTTP::Service.create_service(@client, session, :puppetserver, host, port)
58
+ begin
59
+ service.get_simple_status(ssl_context: ssl_context)
60
+ @resolved_url = service.url
61
+ return Puppet::HTTP::Service.create_service(@client, session, name, @resolved_url.host, @resolved_url.port)
62
+ rescue Puppet::HTTP::ResponseError => detail
63
+ Puppet.log_exception(detail, _("Puppet server %{host}:%{port} is unavailable: %{code} %{reason}") %
64
+ { host: service.url.host, port: service.url.port, code: detail.response.code, reason: detail.response.reason })
65
+ rescue Puppet::HTTP::HTTPError => detail
66
+ Puppet.log_exception(detail, _("Unable to connect to server from server_list setting: %{detail}") % {detail: detail})
65
67
  end
66
68
  end
67
69
 
68
- 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) }
69
- end
70
-
71
- #
72
- # @api private
73
- #
74
- # Check if a server and port is available
75
- #
76
- # @param [URI] uri A URI created from the server and port to test
77
- # @param [Puppet::HTTP::Session] session
78
- # @param [Puppet::SSL::SSLContext] ssl_context
79
- # @param [Proc] error_handler (nil) optional callback for each error
80
- # encountered while resolving a route.
81
- #
82
- # @return [Boolean] true if a successful response is returned by the server,
83
- # false otherwise
84
- #
85
- def get_success?(uri, session, ssl_context: nil, error_handler: nil)
86
- response = @client.get(uri, options: {ssl_context: ssl_context})
87
- return true if response.success?
70
+ # don't fallback to other resolvers
71
+ canceled_handler.call(true) if canceled_handler
88
72
 
89
- Puppet.debug(_("Puppet server %{host}:%{port} is unavailable: %{code} %{reason}") %
90
- { host: uri.host, port: uri.port, code: response.code, reason: response.reason })
91
- return false
92
- rescue => detail
93
- error_handler.call(detail) if error_handler
94
- #TRANSLATORS 'server_list' is the name of a setting and should not be translated
95
- Puppet.debug _("Unable to connect to server from server_list setting: %{detail}") % {detail: detail}
96
- return false
73
+ # not found
74
+ nil
97
75
  end
98
76
  end
@@ -1,26 +1,23 @@
1
- #
2
- # @api private
3
- #
4
1
  # Resolve a service using settings. This is the default resolver if none of the
5
2
  # other resolvers find a functional connection.
6
3
  #
4
+ # @api public
7
5
  class Puppet::HTTP::Resolver::Settings < Puppet::HTTP::Resolver
8
- #
9
- # @api private
10
- #
6
+
11
7
  # Resolve a service using the default server and port settings for this service.
12
8
  #
13
9
  # @param [Puppet::HTTP::Session] session
14
10
  # @param [Symbol] name the name of the service to be resolved
15
11
  # @param [Puppet::SSL::SSLContext] ssl_context
16
- # @param [Proc] error_handler (nil) optional callback for each error
17
- # encountered while resolving a route.
12
+ # @param [Proc] canceled_handler optional callback allowing a resolver
13
+ # to cancel resolution.
18
14
  #
19
15
  # @return [Puppet::HTTP::Service] if the service successfully connects,
20
16
  # return it. Otherwise, return nil.
21
17
  #
22
- def resolve(session, name, ssl_context: nil, error_handler: nil)
18
+ # @api public
19
+ def resolve(session, name, ssl_context: nil, canceled_handler: nil)
23
20
  service = Puppet::HTTP::Service.create_service(@client, session, name)
24
- check_connection?(session, service, ssl_context: ssl_context, error_handler: error_handler) ? service : nil
21
+ check_connection?(session, service, ssl_context: ssl_context) ? service : nil
25
22
  end
26
23
  end
@@ -1,11 +1,9 @@
1
+ # Resolve a service using DNS SRV records.
1
2
  #
2
- # @api private
3
- #
4
- # Resolve a service using SRV
5
- #
3
+ # @api public
6
4
  class Puppet::HTTP::Resolver::SRV < Puppet::HTTP::Resolver
7
- #
8
- # @api private
5
+
6
+ # Create an DNS SRV resolver.
9
7
  #
10
8
  # @param [Puppet::HTTP::Client] client
11
9
  # @param [String] domain srv domain
@@ -14,32 +12,30 @@ class Puppet::HTTP::Resolver::SRV < Puppet::HTTP::Resolver
14
12
  def initialize(client, domain:, dns: Resolv::DNS.new)
15
13
  @client = client
16
14
  @srv_domain = domain
17
- @delegate = Puppet::Network::Resolver.new(dns)
15
+ @delegate = Puppet::HTTP::DNS.new(dns)
18
16
  end
19
17
 
20
- #
21
- # @api private
22
- #
23
18
  # Walk the available srv records and return the first that successfully connects
24
19
  #
25
20
  # @param [Puppet::HTTP::Session] session
26
21
  # @param [Symbol] name the service being resolved
27
22
  # @param [Puppet::SSL::SSLContext] ssl_context
28
- # @param [Proc] error_handler (nil) optional callback for each error
29
- # encountered while resolving a route.
23
+ # @param [Proc] canceled_handler optional callback allowing a resolver
24
+ # to cancel resolution.
30
25
  #
31
26
  # @return [Puppet::HTTP::Service] if an available service is found, return
32
27
  # it. Return nil otherwise.
33
28
  #
34
- def resolve(session, name, ssl_context: nil, error_handler: nil)
29
+ # @api public
30
+ def resolve(session, name, ssl_context: nil, canceled_handler: nil)
35
31
  # Here we pass our HTTP service name as the DNS SRV service name
36
32
  # This is fine for :ca, but note that :puppet and :file are handled
37
33
  # specially in `each_srv_record`.
38
34
  @delegate.each_srv_record(@srv_domain, name) do |server, port|
39
35
  service = Puppet::HTTP::Service.create_service(@client, session, name, server, port)
40
- return service if check_connection?(session, service, ssl_context: ssl_context, error_handler: error_handler)
36
+ return service if check_connection?(session, service, ssl_context: ssl_context)
41
37
  end
42
38
 
43
- return nil
39
+ nil
44
40
  end
45
41
  end
@@ -1,118 +1,100 @@
1
+ # Represents the response returned from the server from an HTTP request.
1
2
  #
2
- # @api private
3
- #
4
- # Represents the response returned from the server from an HTTP request
5
- #
3
+ # @api abstract
4
+ # @api public
6
5
  class Puppet::HTTP::Response
7
- # @api private
8
- # @return [Net::HTTP] the Net::HTTP response
9
- attr_reader :nethttp
10
-
11
- # @api private
12
- # @return [URI] the response uri
6
+ # @return [URI] the response url
13
7
  attr_reader :url
14
8
 
9
+ # Create a response associated with the URL.
15
10
  #
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
11
  # @param [URI] url
22
- #
23
- def initialize(nethttp, url)
24
- @nethttp = nethttp
12
+ # @param [Integer] HTTP status
13
+ # @param [String] HTTP reason
14
+ def initialize(url, code, reason)
25
15
  @url = url
16
+ @code = code
17
+ @reason = reason
26
18
  end
27
19
 
28
- #
29
- # @api private
30
- #
31
- # Extract the response code
20
+ # Return the response code.
32
21
  #
33
22
  # @return [Integer] Response code for the request
34
23
  #
24
+ # @api public
35
25
  def code
36
- @nethttp.code.to_i
26
+ @code
37
27
  end
38
28
 
39
- #
40
- # @api private
41
- #
42
- # Extract the response message
29
+ # Return the response message.
43
30
  #
44
31
  # @return [String] Response message for the request
45
32
  #
33
+ # @api public
46
34
  def reason
47
- @nethttp.message
35
+ @reason
48
36
  end
49
37
 
50
- #
51
- # @api private
52
- #
53
38
  # Returns the entire response body. Can be used instead of
54
- # Puppet::HTTP::Response.read_body, but both methods cannot be used for the
39
+ # `Puppet::HTTP::Response.read_body`, but both methods cannot be used for the
55
40
  # same response.
56
41
  #
57
42
  # @return [String] Response body for the request
58
43
  #
44
+ # @api public
59
45
  def body
60
- @nethttp.body
46
+ raise NotImplementedError
61
47
  end
62
48
 
63
- #
64
- # @api private
65
- #
66
49
  # 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
50
+ # `Puppet::HTTP::Response.body`, but both methods cannot be used for the same
68
51
  # response.
69
52
  #
70
53
  # @yield [String] Streams the response body in chunks
71
54
  #
72
55
  # @raise [ArgumentError] raise if a block is not given
73
56
  #
57
+ # @api public
74
58
  def read_body(&block)
75
- raise ArgumentError, "A block is required" unless block_given?
76
-
77
- @nethttp.read_body(&block)
59
+ raise NotImplementedError
78
60
  end
79
61
 
80
- #
81
- # @api private
82
- #
83
- # Check if the request received a response of success
62
+ # Check if the request received a response of success (HTTP 2xx).
84
63
  #
85
64
  # @return [Boolean] Returns true if the response indicates success
86
65
  #
66
+ # @api public
87
67
  def success?
88
- @nethttp.is_a?(Net::HTTPSuccess)
68
+ 200 <= @code && @code < 300
89
69
  end
90
70
 
91
- # @api private
92
- #
93
71
  # Get a header case-insensitively.
72
+ #
94
73
  # @param [String] name The header name
95
74
  # @return [String] The header value
96
75
  #
76
+ # @api public
97
77
  def [](name)
98
- @nethttp[name]
78
+ raise NotImplementedError
99
79
  end
100
80
 
101
- # @api private
102
- #
103
81
  # Yield each header name and value. Returns an enumerator if no block is given.
104
82
  #
105
83
  # @yieldparam [String] header name
106
84
  # @yieldparam [String] header value
107
85
  #
86
+ # @api public
108
87
  def each_header(&block)
109
- @nethttp.each_header(&block)
88
+ raise NotImplementedError
110
89
  end
111
90
 
112
- # @api private
113
- #
114
- # Drain the response body.
91
+ # Ensure the response body is fully read so that the server is not blocked
92
+ # waiting for us to read data from the socket. Also if the caller streamed
93
+ # the response, but didn't read the data, we need a way to drain the socket
94
+ # before adding the connection back to the connection pool, otherwise the
95
+ # unread response data would "leak" into the next HTTP request/response.
115
96
  #
97
+ # @api public
116
98
  def drain
117
99
  body
118
100
  true
@@ -0,0 +1,24 @@
1
+ module Puppet::HTTP::ResponseConverter
2
+ module_function
3
+
4
+ # Borrowed from puppetserver, see https://github.com/puppetlabs/puppetserver/commit/a1ebeaaa5af590003ccd23c89f808ba4f0c89609
5
+ def to_ruby_response(response)
6
+ str_code = response.code.to_s
7
+
8
+ # Copied from Net::HTTPResponse because it is private there.
9
+ clazz = Net::HTTPResponse::CODE_TO_OBJ[str_code] or
10
+ Net::HTTPResponse::CODE_CLASS_TO_OBJ[str_code[0,1]] or
11
+ Net::HTTPUnknownResponse
12
+ result = clazz.new(nil, str_code, nil)
13
+ result.body = response.body
14
+ # This is nasty, nasty. But apparently there is no way to create
15
+ # an instance of Net::HttpResponse from outside of the library and have
16
+ # the body be readable, unless you do stupid things like this.
17
+ result.instance_variable_set(:@read, true)
18
+ response.each_header do |k,v|
19
+ result[k] = v
20
+ end
21
+ result
22
+ end
23
+ end
24
+
@@ -0,0 +1,42 @@
1
+ # Adapts Net::HTTPResponse to Puppet::HTTP::Response
2
+ #
3
+ # @api public
4
+ class Puppet::HTTP::ResponseNetHTTP < Puppet::HTTP::Response
5
+
6
+ # Create a response associated with the URL.
7
+ #
8
+ # @param [URI] url
9
+ # @param [Net::HTTPResponse] nethttp The response
10
+ def initialize(url, nethttp)
11
+ super(url, nethttp.code.to_i, nethttp.message)
12
+
13
+ @nethttp = nethttp
14
+ end
15
+
16
+ # (see Puppet::HTTP::Response#body)
17
+ def body
18
+ @nethttp.body
19
+ end
20
+
21
+ # (see Puppet::HTTP::Response#read_body)
22
+ def read_body(&block)
23
+ raise ArgumentError, "A block is required" unless block_given?
24
+
25
+ @nethttp.read_body(&block)
26
+ end
27
+
28
+ # (see Puppet::HTTP::Response#success?)
29
+ def success?
30
+ @nethttp.is_a?(Net::HTTPSuccess)
31
+ end
32
+
33
+ # (see Puppet::HTTP::Response#[])
34
+ def [](name)
35
+ @nethttp[name]
36
+ end
37
+
38
+ # (see Puppet::HTTP::Response#each_header)
39
+ def each_header(&block)
40
+ @nethttp.each_header(&block)
41
+ end
42
+ end