puppet 6.23.0 → 7.0.0

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 (581) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +16 -2
  3. data/Gemfile +1 -3
  4. data/Gemfile.lock +34 -46
  5. data/README.md +1 -1
  6. data/conf/fileserver.conf +5 -10
  7. data/ext/build_defaults.yaml +1 -1
  8. data/ext/osx/file_mapping.yaml +0 -5
  9. data/ext/osx/puppet.plist +0 -2
  10. data/ext/project_data.yaml +1 -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/application.rb +178 -108
  16. data/lib/puppet/application/agent.rb +4 -12
  17. data/lib/puppet/application/apply.rb +2 -4
  18. data/lib/puppet/application/device.rb +100 -106
  19. data/lib/puppet/application/filebucket.rb +13 -9
  20. data/lib/puppet/application/resource.rb +1 -2
  21. data/lib/puppet/application/script.rb +0 -2
  22. data/lib/puppet/application/ssl.rb +1 -12
  23. data/lib/puppet/application_support.rb +0 -7
  24. data/lib/puppet/configurer.rb +30 -45
  25. data/lib/puppet/configurer/downloader.rb +1 -2
  26. data/lib/puppet/configurer/plugin_handler.rb +21 -19
  27. data/lib/puppet/defaults.rb +100 -192
  28. data/lib/puppet/environments.rb +60 -74
  29. data/lib/puppet/face/facts.rb +5 -103
  30. data/lib/puppet/face/help.rb +1 -1
  31. data/lib/puppet/face/plugin.rb +5 -8
  32. data/lib/puppet/ffi/windows.rb +12 -0
  33. data/lib/puppet/ffi/windows/api_types.rb +311 -0
  34. data/lib/puppet/ffi/windows/constants.rb +404 -0
  35. data/lib/puppet/ffi/windows/functions.rb +628 -0
  36. data/lib/puppet/ffi/windows/structs.rb +338 -0
  37. data/lib/puppet/file_serving/configuration.rb +0 -5
  38. data/lib/puppet/file_serving/configuration/parser.rb +3 -32
  39. data/lib/puppet/file_serving/fileset.rb +2 -14
  40. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  41. data/lib/puppet/file_serving/mount.rb +1 -2
  42. data/lib/puppet/file_system/memory_file.rb +1 -8
  43. data/lib/puppet/file_system/windows.rb +0 -2
  44. data/lib/puppet/forge/repository.rb +0 -1
  45. data/lib/puppet/functions/all.rb +1 -1
  46. data/lib/puppet/functions/camelcase.rb +1 -1
  47. data/lib/puppet/functions/capitalize.rb +2 -2
  48. data/lib/puppet/functions/downcase.rb +2 -2
  49. data/lib/puppet/functions/get.rb +5 -5
  50. data/lib/puppet/functions/group_by.rb +5 -13
  51. data/lib/puppet/functions/lest.rb +1 -1
  52. data/lib/puppet/functions/new.rb +100 -100
  53. data/lib/puppet/functions/partition.rb +4 -12
  54. data/lib/puppet/functions/require.rb +5 -5
  55. data/lib/puppet/functions/sort.rb +3 -3
  56. data/lib/puppet/functions/tree_each.rb +9 -7
  57. data/lib/puppet/functions/type.rb +4 -4
  58. data/lib/puppet/functions/upcase.rb +2 -2
  59. data/lib/puppet/generate/models/type/type.rb +4 -1
  60. data/lib/puppet/http.rb +22 -13
  61. data/lib/puppet/http/client.rb +164 -114
  62. data/lib/puppet/{network/resolver.rb → http/dns.rb} +2 -2
  63. data/lib/puppet/http/errors.rb +16 -0
  64. data/lib/puppet/http/external_client.rb +5 -7
  65. data/lib/puppet/{network/http → http}/factory.rb +8 -15
  66. data/lib/puppet/{network/http → http}/pool.rb +61 -26
  67. data/lib/puppet/{network/http/session.rb → http/pool_entry.rb} +2 -3
  68. data/lib/puppet/http/proxy.rb +137 -0
  69. data/lib/puppet/http/redirector.rb +4 -12
  70. data/lib/puppet/http/resolver.rb +5 -15
  71. data/lib/puppet/http/resolver/server_list.rb +10 -25
  72. data/lib/puppet/http/resolver/settings.rb +4 -7
  73. data/lib/puppet/http/resolver/srv.rb +7 -11
  74. data/lib/puppet/http/response.rb +36 -54
  75. data/lib/puppet/http/response_converter.rb +24 -0
  76. data/lib/puppet/http/response_net_http.rb +42 -0
  77. data/lib/puppet/http/retry_after_handler.rb +4 -13
  78. data/lib/puppet/http/service.rb +12 -26
  79. data/lib/puppet/http/service/ca.rb +11 -22
  80. data/lib/puppet/http/service/compiler.rb +22 -138
  81. data/lib/puppet/http/service/file_server.rb +19 -29
  82. data/lib/puppet/http/service/puppetserver.rb +26 -12
  83. data/lib/puppet/http/service/report.rb +8 -10
  84. data/lib/puppet/http/session.rb +11 -20
  85. data/lib/puppet/{network/http → http}/site.rb +1 -2
  86. data/lib/puppet/indirector/catalog/compiler.rb +0 -1
  87. data/lib/puppet/indirector/catalog/rest.rb +2 -4
  88. data/lib/puppet/indirector/facts/rest.rb +3 -22
  89. data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -9
  90. data/lib/puppet/indirector/file_content/rest.rb +2 -6
  91. data/lib/puppet/indirector/file_metadata/rest.rb +3 -10
  92. data/lib/puppet/indirector/file_server.rb +1 -8
  93. data/lib/puppet/indirector/generic_http.rb +0 -11
  94. data/lib/puppet/indirector/node/rest.rb +2 -4
  95. data/lib/puppet/indirector/report/rest.rb +3 -8
  96. data/lib/puppet/indirector/request.rb +0 -101
  97. data/lib/puppet/indirector/rest.rb +12 -263
  98. data/lib/puppet/module_tool/applications.rb +0 -1
  99. data/lib/puppet/module_tool/applications/installer.rb +2 -48
  100. data/lib/puppet/module_tool/errors/shared.rb +2 -17
  101. data/lib/puppet/network/authconfig.rb +2 -96
  102. data/lib/puppet/network/authorization.rb +13 -35
  103. data/lib/puppet/network/formats.rb +0 -67
  104. data/lib/puppet/network/http.rb +3 -3
  105. data/lib/puppet/network/http/api/indirected_routes.rb +2 -20
  106. data/lib/puppet/network/http/api/master/v3.rb +11 -13
  107. data/lib/puppet/network/http/connection.rb +247 -316
  108. data/lib/puppet/network/http/handler.rb +0 -1
  109. data/lib/puppet/network/http_pool.rb +16 -34
  110. data/lib/puppet/node.rb +1 -30
  111. data/lib/puppet/pal/json_catalog_encoder.rb +4 -0
  112. data/lib/puppet/pal/pal_impl.rb +3 -1
  113. data/lib/puppet/parser/ast/leaf.rb +2 -3
  114. data/lib/puppet/parser/ast/pops_bridge.rb +0 -38
  115. data/lib/puppet/parser/compiler.rb +0 -198
  116. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +14 -39
  117. data/lib/puppet/parser/functions/fqdn_rand.rb +6 -14
  118. data/lib/puppet/parser/resource.rb +0 -69
  119. data/lib/puppet/parser/templatewrapper.rb +1 -1
  120. data/lib/puppet/pops/evaluator/deferred_resolver.rb +3 -5
  121. data/lib/puppet/pops/evaluator/evaluator_impl.rb +0 -5
  122. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +3 -3
  123. data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
  124. data/lib/puppet/pops/issues.rb +0 -5
  125. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -8
  126. data/lib/puppet/pops/model/ast.pp +0 -42
  127. data/lib/puppet/pops/model/ast.rb +0 -290
  128. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  129. data/lib/puppet/pops/model/factory.rb +0 -45
  130. data/lib/puppet/pops/model/model_label_provider.rb +0 -5
  131. data/lib/puppet/pops/model/model_tree_dumper.rb +0 -22
  132. data/lib/puppet/pops/model/pn_transformer.rb +0 -16
  133. data/lib/puppet/pops/parser/egrammar.ra +0 -56
  134. data/lib/puppet/pops/parser/eparser.rb +1520 -1712
  135. data/lib/puppet/pops/parser/lexer2.rb +4 -4
  136. data/lib/puppet/pops/parser/parser_support.rb +0 -5
  137. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -24
  138. data/lib/puppet/pops/types/p_sem_ver_type.rb +2 -8
  139. data/lib/puppet/pops/types/p_sensitive_type.rb +0 -10
  140. data/lib/puppet/pops/types/type_calculator.rb +0 -7
  141. data/lib/puppet/pops/types/type_parser.rb +0 -4
  142. data/lib/puppet/pops/types/types.rb +0 -1
  143. data/lib/puppet/pops/validation/checker4_0.rb +9 -37
  144. data/lib/puppet/pops/validation/tasks_checker.rb +0 -12
  145. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -2
  146. data/lib/puppet/property/list.rb +1 -1
  147. data/lib/puppet/provider.rb +0 -13
  148. data/lib/puppet/provider/group/groupadd.rb +8 -13
  149. data/lib/puppet/provider/nameservice.rb +0 -18
  150. data/lib/puppet/provider/package/apt.rb +2 -34
  151. data/lib/puppet/provider/package/aptitude.rb +0 -6
  152. data/lib/puppet/provider/package/dnfmodule.rb +1 -1
  153. data/lib/puppet/provider/package/dpkg.rb +0 -10
  154. data/lib/puppet/provider/package/gem.rb +23 -3
  155. data/lib/puppet/provider/package/nim.rb +6 -11
  156. data/lib/puppet/provider/package/pip.rb +0 -1
  157. data/lib/puppet/provider/package/pkg.rb +0 -4
  158. data/lib/puppet/provider/package/portage.rb +1 -1
  159. data/lib/puppet/provider/package/puppet_gem.rb +1 -4
  160. data/lib/puppet/provider/service/debian.rb +0 -2
  161. data/lib/puppet/provider/service/smf.rb +191 -73
  162. data/lib/puppet/provider/service/systemd.rb +4 -14
  163. data/lib/puppet/provider/service/windows.rb +0 -38
  164. data/lib/puppet/provider/user/aix.rb +2 -2
  165. data/lib/puppet/provider/user/directoryservice.rb +10 -33
  166. data/lib/puppet/provider/user/useradd.rb +8 -62
  167. data/lib/puppet/reference/configuration.rb +8 -7
  168. data/lib/puppet/reference/indirection.rb +1 -1
  169. data/lib/puppet/resource.rb +1 -89
  170. data/lib/puppet/resource/catalog.rb +1 -14
  171. data/lib/puppet/resource/type.rb +3 -119
  172. data/lib/puppet/resource/type_collection.rb +3 -48
  173. data/lib/puppet/runtime.rb +1 -2
  174. data/lib/puppet/settings.rb +73 -66
  175. data/lib/puppet/settings/environment_conf.rb +0 -1
  176. data/lib/puppet/settings/integer_setting.rb +17 -0
  177. data/lib/puppet/settings/port_setting.rb +15 -0
  178. data/lib/puppet/settings/priority_setting.rb +5 -4
  179. data/lib/puppet/ssl.rb +10 -6
  180. data/lib/puppet/ssl/base.rb +3 -5
  181. data/lib/puppet/ssl/certificate.rb +0 -6
  182. data/lib/puppet/ssl/certificate_request.rb +1 -12
  183. data/lib/puppet/ssl/certificate_signer.rb +6 -0
  184. data/lib/puppet/ssl/oids.rb +3 -1
  185. data/lib/puppet/ssl/ssl_provider.rb +17 -0
  186. data/lib/puppet/ssl/state_machine.rb +3 -1
  187. data/lib/puppet/ssl/verifier.rb +2 -0
  188. data/lib/puppet/test/test_helper.rb +1 -3
  189. data/lib/puppet/transaction.rb +1 -7
  190. data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
  191. data/lib/puppet/transaction/report.rb +2 -4
  192. data/lib/puppet/type.rb +0 -76
  193. data/lib/puppet/type/file.rb +6 -26
  194. data/lib/puppet/type/file/checksum.rb +1 -1
  195. data/lib/puppet/type/file/selcontext.rb +1 -1
  196. data/lib/puppet/type/file/source.rb +1 -1
  197. data/lib/puppet/type/filebucket.rb +3 -3
  198. data/lib/puppet/type/package.rb +8 -16
  199. data/lib/puppet/type/service.rb +38 -18
  200. data/lib/puppet/type/tidy.rb +2 -21
  201. data/lib/puppet/type/user.rb +20 -38
  202. data/lib/puppet/util/autoload.rb +8 -1
  203. data/lib/puppet/util/execution.rb +0 -11
  204. data/lib/puppet/util/http_proxy.rb +2 -215
  205. data/lib/puppet/util/monkey_patches.rb +0 -53
  206. data/lib/puppet/util/posix.rb +5 -54
  207. data/lib/puppet/util/rdoc.rb +0 -7
  208. data/lib/puppet/util/retry_action.rb +1 -1
  209. data/lib/puppet/util/run_mode.rb +9 -1
  210. data/lib/puppet/util/selinux.rb +4 -30
  211. data/lib/puppet/util/windows.rb +3 -8
  212. data/lib/puppet/util/windows/adsi.rb +0 -46
  213. data/lib/puppet/util/windows/daemon.rb +360 -0
  214. data/lib/puppet/util/windows/error.rb +1 -0
  215. data/lib/puppet/util/windows/eventlog.rb +4 -9
  216. data/lib/puppet/util/windows/file.rb +8 -242
  217. data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
  218. data/lib/puppet/util/windows/principal.rb +2 -9
  219. data/lib/puppet/util/windows/process.rb +4 -226
  220. data/lib/puppet/util/windows/service.rb +9 -460
  221. data/lib/puppet/util/windows/sid.rb +2 -4
  222. data/lib/puppet/util/windows/string.rb +12 -13
  223. data/lib/puppet/util/yaml.rb +0 -22
  224. data/lib/puppet/vendor/require_vendored.rb +0 -1
  225. data/lib/puppet/version.rb +1 -1
  226. data/lib/puppet/x509.rb +5 -1
  227. data/lib/puppet/x509/cert_provider.rb +29 -1
  228. data/locales/puppet.pot +651 -1436
  229. data/man/man5/puppet.conf.5 +266 -354
  230. data/man/man8/puppet-agent.8 +2 -2
  231. data/man/man8/puppet-apply.8 +2 -2
  232. data/man/man8/puppet-catalog.8 +1 -1
  233. data/man/man8/puppet-config.8 +1 -1
  234. data/man/man8/puppet-describe.8 +1 -1
  235. data/man/man8/puppet-device.8 +2 -2
  236. data/man/man8/puppet-doc.8 +1 -1
  237. data/man/man8/puppet-epp.8 +1 -1
  238. data/man/man8/puppet-facts.8 +4 -47
  239. data/man/man8/puppet-filebucket.8 +4 -4
  240. data/man/man8/puppet-generate.8 +1 -1
  241. data/man/man8/puppet-help.8 +1 -1
  242. data/man/man8/puppet-lookup.8 +1 -1
  243. data/man/man8/puppet-module.8 +1 -58
  244. data/man/man8/puppet-node.8 +1 -1
  245. data/man/man8/puppet-parser.8 +1 -1
  246. data/man/man8/puppet-plugin.8 +1 -1
  247. data/man/man8/puppet-report.8 +1 -1
  248. data/man/man8/puppet-resource.8 +1 -1
  249. data/man/man8/puppet-script.8 +2 -2
  250. data/man/man8/puppet-ssl.8 +1 -5
  251. data/man/man8/puppet.8 +2 -2
  252. data/spec/fixtures/ssl/127.0.0.1-key.pem +57 -107
  253. data/spec/fixtures/ssl/127.0.0.1.pem +31 -52
  254. data/spec/fixtures/ssl/bad-basic-constraints.pem +35 -57
  255. data/spec/fixtures/ssl/bad-int-basic-constraints.pem +35 -57
  256. data/spec/fixtures/ssl/ca.pem +35 -57
  257. data/spec/fixtures/ssl/crl.pem +18 -28
  258. data/spec/fixtures/ssl/ec-key.pem +11 -11
  259. data/spec/fixtures/ssl/ec.pem +24 -33
  260. data/spec/fixtures/ssl/encrypted-ec-key.pem +12 -12
  261. data/spec/fixtures/ssl/encrypted-key.pem +58 -108
  262. data/spec/fixtures/ssl/intermediate-agent-crl.pem +19 -28
  263. data/spec/fixtures/ssl/intermediate-agent.pem +36 -57
  264. data/spec/fixtures/ssl/intermediate-crl.pem +21 -31
  265. data/spec/fixtures/ssl/intermediate.pem +36 -57
  266. data/spec/fixtures/ssl/pluto-key.pem +57 -107
  267. data/spec/fixtures/ssl/pluto.pem +30 -52
  268. data/spec/fixtures/ssl/request-key.pem +57 -107
  269. data/spec/fixtures/ssl/request.pem +26 -47
  270. data/spec/fixtures/ssl/revoked-key.pem +57 -107
  271. data/spec/fixtures/ssl/revoked.pem +30 -52
  272. data/spec/fixtures/ssl/signed-key.pem +57 -107
  273. data/spec/fixtures/ssl/signed.pem +30 -52
  274. data/spec/fixtures/ssl/tampered-cert.pem +30 -52
  275. data/spec/fixtures/ssl/tampered-csr.pem +26 -47
  276. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +57 -107
  277. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +29 -50
  278. data/spec/fixtures/ssl/unknown-ca-key.pem +57 -107
  279. data/spec/fixtures/ssl/unknown-ca.pem +33 -55
  280. data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
  281. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +0 -4
  282. data/spec/integration/application/agent_spec.rb +27 -171
  283. data/spec/integration/application/apply_spec.rb +1 -20
  284. data/spec/integration/application/filebucket_spec.rb +16 -16
  285. data/spec/integration/application/help_spec.rb +2 -0
  286. data/spec/integration/application/plugin_spec.rb +24 -2
  287. data/spec/integration/defaults_spec.rb +14 -3
  288. data/spec/integration/http/client_spec.rb +0 -12
  289. data/spec/integration/indirector/direct_file_server_spec.rb +3 -1
  290. data/spec/integration/network/http_pool_spec.rb +3 -21
  291. data/spec/integration/parser/catalog_spec.rb +0 -38
  292. data/spec/integration/parser/node_spec.rb +0 -9
  293. data/spec/integration/parser/pcore_resource_spec.rb +0 -37
  294. data/spec/integration/resource/type_collection_spec.rb +6 -2
  295. data/spec/integration/transaction_spec.rb +9 -4
  296. data/spec/integration/type/file_spec.rb +5 -4
  297. data/spec/integration/util/windows/adsi_spec.rb +1 -21
  298. data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
  299. data/spec/integration/util/windows/principal_spec.rb +0 -21
  300. data/spec/integration/util/windows/registry_spec.rb +10 -6
  301. data/spec/integration/util/windows/security_spec.rb +1 -1
  302. data/spec/lib/matchers/include.rb +27 -0
  303. data/spec/lib/matchers/include_spec.rb +32 -0
  304. data/spec/lib/puppet/test_ca.rb +2 -2
  305. data/spec/lib/puppet_spec/puppetserver.rb +1 -1
  306. data/spec/lib/puppet_spec/settings.rb +1 -0
  307. data/spec/spec_helper.rb +7 -12
  308. data/spec/unit/agent_spec.rb +6 -10
  309. data/spec/unit/application/agent_spec.rb +3 -7
  310. data/spec/unit/application/facts_spec.rb +12 -456
  311. data/spec/unit/application/filebucket_spec.rb +43 -39
  312. data/spec/unit/application/ssl_spec.rb +2 -25
  313. data/spec/unit/application_spec.rb +9 -51
  314. data/spec/unit/certificate_factory_spec.rb +1 -1
  315. data/spec/unit/configurer/downloader_spec.rb +6 -8
  316. data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
  317. data/spec/unit/configurer_spec.rb +12 -32
  318. data/spec/unit/confine/feature_spec.rb +1 -1
  319. data/spec/unit/confine_spec.rb +2 -8
  320. data/spec/unit/context/trusted_information_spec.rb +2 -6
  321. data/spec/unit/defaults_spec.rb +68 -54
  322. data/spec/unit/environments_spec.rb +68 -224
  323. data/spec/unit/face/node_spec.rb +11 -0
  324. data/spec/unit/face/plugin_spec.rb +73 -33
  325. data/spec/unit/file_bucket/file_spec.rb +1 -1
  326. data/spec/unit/file_serving/configuration/parser_spec.rb +15 -18
  327. data/spec/unit/file_serving/configuration_spec.rb +6 -12
  328. data/spec/unit/file_serving/fileset_spec.rb +0 -60
  329. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  330. data/spec/unit/file_serving/terminus_helper_spec.rb +4 -11
  331. data/spec/unit/file_system_spec.rb +0 -9
  332. data/spec/unit/forge/module_release_spec.rb +7 -2
  333. data/spec/unit/functions/camelcase_spec.rb +1 -1
  334. data/spec/unit/functions/capitalize_spec.rb +1 -1
  335. data/spec/unit/functions/downcase_spec.rb +1 -1
  336. data/spec/unit/functions/upcase_spec.rb +1 -1
  337. data/spec/unit/gettext/config_spec.rb +0 -12
  338. data/spec/unit/http/client_spec.rb +7 -8
  339. data/spec/unit/{network/resolver_spec.rb → http/dns_spec.rb} +3 -3
  340. data/spec/unit/http/external_client_spec.rb +4 -4
  341. data/spec/unit/{network/http → http}/factory_spec.rb +5 -30
  342. data/spec/unit/{network/http/session_spec.rb → http/pool_entry_spec.rb} +3 -3
  343. data/spec/unit/{network/http → http}/pool_spec.rb +12 -17
  344. data/spec/unit/{util/http_proxy_spec.rb → http/proxy_spec.rb} +2 -69
  345. data/spec/unit/http/resolver_spec.rb +13 -13
  346. data/spec/unit/http/service/compiler_spec.rb +0 -185
  347. data/spec/unit/http/service/file_server_spec.rb +3 -3
  348. data/spec/unit/http/service/puppetserver_spec.rb +34 -4
  349. data/spec/unit/http/service_spec.rb +0 -1
  350. data/spec/unit/http/session_spec.rb +16 -14
  351. data/spec/unit/{network/http → http}/site_spec.rb +3 -3
  352. data/spec/unit/indirector/catalog/compiler_spec.rb +10 -14
  353. data/spec/unit/indirector/face_spec.rb +1 -0
  354. data/spec/unit/indirector/facts/facter_spec.rb +3 -0
  355. data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
  356. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +8 -26
  357. data/spec/unit/indirector/file_content/rest_spec.rb +0 -4
  358. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -4
  359. data/spec/unit/indirector/file_server_spec.rb +1 -15
  360. data/spec/unit/indirector/indirection_spec.rb +12 -8
  361. data/spec/unit/indirector/report/rest_spec.rb +2 -17
  362. data/spec/unit/indirector/request_spec.rb +0 -264
  363. data/spec/unit/indirector/rest_spec.rb +98 -752
  364. data/spec/unit/indirector_spec.rb +2 -2
  365. data/spec/unit/module_tool/applications/installer_spec.rb +0 -66
  366. data/spec/unit/network/authconfig_spec.rb +2 -129
  367. data/spec/unit/network/authorization_spec.rb +2 -55
  368. data/spec/unit/network/formats_spec.rb +4 -45
  369. data/spec/unit/network/http/api/indirected_routes_spec.rb +5 -92
  370. data/spec/unit/network/http/api/master/v3_spec.rb +28 -7
  371. data/spec/unit/network/http/api_spec.rb +10 -0
  372. data/spec/unit/network/http/connection_spec.rb +19 -41
  373. data/spec/unit/network/http/handler_spec.rb +0 -1
  374. data/spec/unit/network/http_pool_spec.rb +0 -4
  375. data/spec/unit/node/environment_spec.rb +33 -21
  376. data/spec/unit/node_spec.rb +2 -54
  377. data/spec/unit/parser/compiler_spec.rb +19 -3
  378. data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
  379. data/spec/unit/parser/functions/fqdn_rand_spec.rb +1 -15
  380. data/spec/unit/parser/resource_spec.rb +8 -14
  381. data/spec/unit/parser/templatewrapper_spec.rb +3 -4
  382. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +4 -7
  383. data/spec/unit/pops/loaders/loaders_spec.rb +6 -21
  384. data/spec/unit/pops/parser/parse_application_spec.rb +4 -22
  385. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +0 -1
  386. data/spec/unit/pops/parser/parse_capabilities_spec.rb +8 -21
  387. data/spec/unit/pops/parser/parse_site_spec.rb +20 -24
  388. data/spec/unit/pops/resource/resource_type_impl_spec.rb +0 -71
  389. data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
  390. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +0 -18
  391. data/spec/unit/pops/types/p_sensitive_type_spec.rb +0 -18
  392. data/spec/unit/pops/types/type_calculator_spec.rb +6 -6
  393. data/spec/unit/pops/types/type_factory_spec.rb +1 -1
  394. data/spec/unit/pops/validator/validator_spec.rb +61 -46
  395. data/spec/unit/pops/visitor_spec.rb +1 -1
  396. data/spec/unit/property_spec.rb +0 -1
  397. data/spec/unit/provider/group/groupadd_spec.rb +2 -5
  398. data/spec/unit/provider/nameservice_spec.rb +64 -122
  399. data/spec/unit/provider/package/apt_spec.rb +23 -28
  400. data/spec/unit/provider/package/aptitude_spec.rb +1 -1
  401. data/spec/unit/provider/package/base_spec.rb +5 -6
  402. data/spec/unit/provider/package/dnfmodule_spec.rb +1 -10
  403. data/spec/unit/provider/package/dpkg_spec.rb +0 -48
  404. data/spec/unit/provider/package/gem_spec.rb +32 -0
  405. data/spec/unit/provider/package/nim_spec.rb +0 -42
  406. data/spec/unit/provider/package/pacman_spec.rb +12 -18
  407. data/spec/unit/provider/package/pip_spec.rb +11 -6
  408. data/spec/unit/provider/package/pkgdmg_spec.rb +4 -0
  409. data/spec/unit/provider/package/puppet_gem_spec.rb +3 -2
  410. data/spec/unit/provider/service/init_spec.rb +0 -1
  411. data/spec/unit/provider/service/openwrt_spec.rb +1 -3
  412. data/spec/unit/provider/service/smf_spec.rb +401 -165
  413. data/spec/unit/provider/service/systemd_spec.rb +8 -53
  414. data/spec/unit/provider/service/windows_spec.rb +0 -203
  415. data/spec/unit/provider/user/aix_spec.rb +0 -5
  416. data/spec/unit/provider/user/directoryservice_spec.rb +35 -67
  417. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  418. data/spec/unit/provider/user/pw_spec.rb +0 -2
  419. data/spec/unit/provider/user/useradd_spec.rb +3 -71
  420. data/spec/unit/provider_spec.rb +8 -18
  421. data/spec/unit/resource/catalog_spec.rb +1 -1
  422. data/spec/unit/resource/type_collection_spec.rb +2 -22
  423. data/spec/unit/resource/type_spec.rb +1 -1
  424. data/spec/unit/resource_spec.rb +10 -67
  425. data/spec/unit/settings/http_extra_headers_spec.rb +2 -4
  426. data/spec/unit/settings/integer_setting_spec.rb +42 -0
  427. data/spec/unit/settings/port_setting_spec.rb +31 -0
  428. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  429. data/spec/unit/settings_spec.rb +23 -13
  430. data/spec/unit/ssl/base_spec.rb +37 -3
  431. data/spec/unit/ssl/certificate_request_spec.rb +15 -45
  432. data/spec/unit/ssl/certificate_spec.rb +2 -11
  433. data/spec/unit/ssl/ssl_provider_spec.rb +2 -5
  434. data/spec/unit/ssl/state_machine_spec.rb +5 -20
  435. data/spec/unit/ssl/verifier_spec.rb +0 -21
  436. data/spec/unit/transaction/additional_resource_generator_spec.rb +9 -3
  437. data/spec/unit/transaction/event_manager_spec.rb +11 -14
  438. data/spec/unit/transaction/report_spec.rb +0 -2
  439. data/spec/unit/transaction/resource_harness_spec.rb +2 -2
  440. data/spec/unit/transaction_spec.rb +55 -96
  441. data/spec/unit/type/file/checksum_spec.rb +6 -6
  442. data/spec/unit/type/file/content_spec.rb +2 -1
  443. data/spec/unit/type/file/ensure_spec.rb +1 -1
  444. data/spec/unit/type/file/mode_spec.rb +1 -1
  445. data/spec/unit/type/file/selinux_spec.rb +5 -3
  446. data/spec/unit/type/file/source_spec.rb +0 -1
  447. data/spec/unit/type/file_spec.rb +18 -6
  448. data/spec/unit/type/group_spec.rb +6 -13
  449. data/spec/unit/type/package_spec.rb +1 -1
  450. data/spec/unit/type/resources_spec.rb +7 -7
  451. data/spec/unit/type/service_spec.rb +189 -60
  452. data/spec/unit/type/tidy_spec.rb +8 -17
  453. data/spec/unit/type/user_spec.rb +0 -45
  454. data/spec/unit/type_spec.rb +22 -2
  455. data/spec/unit/util/at_fork_spec.rb +2 -2
  456. data/spec/unit/util/autoload_spec.rb +1 -5
  457. data/spec/unit/util/backups_spec.rb +2 -3
  458. data/spec/unit/util/execution_spec.rb +11 -44
  459. data/spec/unit/util/inifile_spec.rb +14 -6
  460. data/spec/unit/util/log_spec.rb +7 -8
  461. data/spec/unit/util/logging_spec.rb +3 -3
  462. data/spec/unit/util/monkey_patches_spec.rb +0 -6
  463. data/spec/unit/util/posix_spec.rb +15 -363
  464. data/spec/unit/util/run_mode_spec.rb +21 -121
  465. data/spec/unit/util/selinux_spec.rb +68 -163
  466. data/spec/unit/util/storage_spec.rb +1 -3
  467. data/spec/unit/util/suidmanager_spec.rb +41 -44
  468. data/spec/unit/util/windows/sid_spec.rb +0 -6
  469. data/spec/unit/util/windows/string_spec.rb +1 -3
  470. data/spec/unit/util/yaml_spec.rb +0 -54
  471. data/spec/unit/util_spec.rb +6 -31
  472. data/tasks/generate_cert_fixtures.rake +2 -2
  473. metadata +44 -181
  474. data/conf/auth.conf +0 -150
  475. data/lib/puppet/application/cert.rb +0 -76
  476. data/lib/puppet/application/key.rb +0 -4
  477. data/lib/puppet/application/man.rb +0 -4
  478. data/lib/puppet/application/status.rb +0 -4
  479. data/lib/puppet/face/key.rb +0 -16
  480. data/lib/puppet/face/man.rb +0 -145
  481. data/lib/puppet/face/module/build.rb +0 -14
  482. data/lib/puppet/face/module/generate.rb +0 -14
  483. data/lib/puppet/face/module/search.rb +0 -103
  484. data/lib/puppet/face/status.rb +0 -51
  485. data/lib/puppet/ffi/posix.rb +0 -10
  486. data/lib/puppet/ffi/posix/constants.rb +0 -14
  487. data/lib/puppet/ffi/posix/functions.rb +0 -24
  488. data/lib/puppet/indirector/certificate/file.rb +0 -9
  489. data/lib/puppet/indirector/certificate/rest.rb +0 -18
  490. data/lib/puppet/indirector/certificate_request/file.rb +0 -9
  491. data/lib/puppet/indirector/certificate_request/memory.rb +0 -7
  492. data/lib/puppet/indirector/certificate_request/rest.rb +0 -11
  493. data/lib/puppet/indirector/file_content/http.rb +0 -22
  494. data/lib/puppet/indirector/key/file.rb +0 -46
  495. data/lib/puppet/indirector/key/memory.rb +0 -7
  496. data/lib/puppet/indirector/ssl_file.rb +0 -162
  497. data/lib/puppet/indirector/status.rb +0 -3
  498. data/lib/puppet/indirector/status/local.rb +0 -12
  499. data/lib/puppet/indirector/status/rest.rb +0 -27
  500. data/lib/puppet/module_tool/applications/searcher.rb +0 -29
  501. data/lib/puppet/network/auth_config_parser.rb +0 -90
  502. data/lib/puppet/network/authstore.rb +0 -283
  503. data/lib/puppet/network/http/api/master/v3/authorization.rb +0 -18
  504. data/lib/puppet/network/http/api/master/v3/environment.rb +0 -88
  505. data/lib/puppet/network/http/base_pool.rb +0 -36
  506. data/lib/puppet/network/http/compression.rb +0 -127
  507. data/lib/puppet/network/http/connection_adapter.rb +0 -184
  508. data/lib/puppet/network/http/nocache_pool.rb +0 -28
  509. data/lib/puppet/network/rest_controller.rb +0 -2
  510. data/lib/puppet/network/rights.rb +0 -210
  511. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -66
  512. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -22
  513. data/lib/puppet/parser/environment_compiler.rb +0 -202
  514. data/lib/puppet/pops/types/enumeration.rb +0 -16
  515. data/lib/puppet/resource/capability_finder.rb +0 -154
  516. data/lib/puppet/rest/errors.rb +0 -15
  517. data/lib/puppet/rest/response.rb +0 -35
  518. data/lib/puppet/rest/route.rb +0 -85
  519. data/lib/puppet/rest/routes.rb +0 -135
  520. data/lib/puppet/settings/alias_setting.rb +0 -37
  521. data/lib/puppet/ssl/host.rb +0 -505
  522. data/lib/puppet/ssl/key.rb +0 -61
  523. data/lib/puppet/ssl/validator.rb +0 -61
  524. data/lib/puppet/ssl/validator/default_validator.rb +0 -209
  525. data/lib/puppet/ssl/validator/no_validator.rb +0 -22
  526. data/lib/puppet/ssl/verifier_adapter.rb +0 -58
  527. data/lib/puppet/status.rb +0 -40
  528. data/lib/puppet/util/connection.rb +0 -88
  529. data/lib/puppet/util/fact_dif.rb +0 -81
  530. data/lib/puppet/util/ssl.rb +0 -83
  531. data/lib/puppet/util/windows/api_types.rb +0 -309
  532. data/lib/puppet/util/windows/monkey_patches/dir.rb +0 -40
  533. data/lib/puppet/vendor/load_pathspec.rb +0 -1
  534. data/lib/puppet/vendor/pathspec/CHANGELOG.md +0 -2
  535. data/lib/puppet/vendor/pathspec/LICENSE +0 -201
  536. data/lib/puppet/vendor/pathspec/PUPPET_README.md +0 -6
  537. data/lib/puppet/vendor/pathspec/README.md +0 -53
  538. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +0 -122
  539. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +0 -275
  540. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +0 -17
  541. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +0 -14
  542. data/man/man8/puppet-key.8 +0 -126
  543. data/man/man8/puppet-man.8 +0 -76
  544. data/man/man8/puppet-status.8 +0 -108
  545. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +0 -91
  546. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services_vendor_preset +0 -9
  547. data/spec/integration/application/resource_spec.rb +0 -30
  548. data/spec/integration/network/authconfig_spec.rb +0 -256
  549. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +0 -11
  550. data/spec/unit/application/man_spec.rb +0 -52
  551. data/spec/unit/capability_spec.rb +0 -414
  552. data/spec/unit/face/key_spec.rb +0 -9
  553. data/spec/unit/face/module/search_spec.rb +0 -231
  554. data/spec/unit/face/status_spec.rb +0 -9
  555. data/spec/unit/indirector/certificate/file_spec.rb +0 -14
  556. data/spec/unit/indirector/certificate/rest_spec.rb +0 -61
  557. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -14
  558. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -25
  559. data/spec/unit/indirector/key/file_spec.rb +0 -78
  560. data/spec/unit/indirector/ssl_file_spec.rb +0 -305
  561. data/spec/unit/indirector/status/local_spec.rb +0 -10
  562. data/spec/unit/indirector/status/rest_spec.rb +0 -50
  563. data/spec/unit/module_tool/applications/searcher_spec.rb +0 -38
  564. data/spec/unit/network/auth_config_parser_spec.rb +0 -115
  565. data/spec/unit/network/authstore_spec.rb +0 -422
  566. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +0 -57
  567. data/spec/unit/network/http/api/master/v3/environment_spec.rb +0 -185
  568. data/spec/unit/network/http/compression_spec.rb +0 -240
  569. data/spec/unit/network/http/nocache_pool_spec.rb +0 -64
  570. data/spec/unit/network/http_spec.rb +0 -9
  571. data/spec/unit/network/rights_spec.rb +0 -439
  572. data/spec/unit/parser/environment_compiler_spec.rb +0 -730
  573. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +0 -20
  574. data/spec/unit/pops/types/enumeration_spec.rb +0 -51
  575. data/spec/unit/resource/capability_finder_spec.rb +0 -148
  576. data/spec/unit/rest/route_spec.rb +0 -132
  577. data/spec/unit/ssl/host_spec.rb +0 -645
  578. data/spec/unit/ssl/key_spec.rb +0 -173
  579. data/spec/unit/ssl/validator_spec.rb +0 -278
  580. data/spec/unit/status_spec.rb +0 -45
  581. data/spec/unit/util/ssl_spec.rb +0 -91
@@ -5,11 +5,7 @@ require 'puppet/indirector/rest'
5
5
  class Puppet::Indirector::FileContent::Rest < Puppet::Indirector::REST
6
6
  desc "Retrieve file contents via a REST HTTP interface."
7
7
 
8
- use_srv_service(:fileserver)
9
-
10
8
  def find(request)
11
- return super unless use_http_client?
12
-
13
9
  content = StringIO.new
14
10
  content.binmode
15
11
 
@@ -29,11 +25,11 @@ class Puppet::Indirector::FileContent::Rest < Puppet::Indirector::REST
29
25
  if e.response.code == 404
30
26
  return nil unless request.options[:fail_on_404]
31
27
 
32
- _, body = parse_response(e.response.nethttp)
28
+ _, body = parse_response(e.response)
33
29
  msg = _("Find %{uri} resulted in 404 with the message: %{body}") % { uri: elide(e.response.url.path, 100), body: body }
34
30
  raise Puppet::Error, msg
35
31
  else
36
- raise convert_to_http_error(e.response.nethttp)
32
+ raise convert_to_http_error(e.response)
37
33
  end
38
34
  end
39
35
  end
@@ -5,11 +5,7 @@ require 'puppet/indirector/rest'
5
5
  class Puppet::Indirector::FileMetadata::Rest < Puppet::Indirector::REST
6
6
  desc "Retrieve file metadata via a REST HTTP interface."
7
7
 
8
- use_srv_service(:fileserver)
9
-
10
8
  def find(request)
11
- return super unless use_http_client?
12
-
13
9
  url = URI.parse(Puppet::Util.uri_encode(request.uri))
14
10
  session = Puppet.lookup(:http_session)
15
11
  api = session.route_to(:fileserver, url: url)
@@ -26,17 +22,15 @@ class Puppet::Indirector::FileMetadata::Rest < Puppet::Indirector::REST
26
22
  if e.response.code == 404
27
23
  return nil unless request.options[:fail_on_404]
28
24
 
29
- _, body = parse_response(e.response.nethttp)
25
+ _, body = parse_response(e.response)
30
26
  msg = _("Find %{uri} resulted in 404 with the message: %{body}") % { uri: elide(e.response.url.path, 100), body: body }
31
27
  raise Puppet::Error, msg
32
28
  else
33
- raise convert_to_http_error(e.response.nethttp)
29
+ raise convert_to_http_error(e.response)
34
30
  end
35
31
  end
36
32
 
37
33
  def search(request)
38
- return super unless use_http_client?
39
-
40
34
  url = URI.parse(Puppet::Util.uri_encode(request.uri))
41
35
  session = Puppet.lookup(:http_session)
42
36
  api = session.route_to(:fileserver, url: url)
@@ -46,7 +40,6 @@ class Puppet::Indirector::FileMetadata::Rest < Puppet::Indirector::REST
46
40
  environment: request.environment.to_s,
47
41
  recurse: request.options[:recurse],
48
42
  recurselimit: request.options[:recurselimit],
49
- max_files: request.options[:max_files],
50
43
  ignore: request.options[:ignore],
51
44
  links: request.options[:links],
52
45
  checksum_type: request.options[:checksum_type],
@@ -57,6 +50,6 @@ class Puppet::Indirector::FileMetadata::Rest < Puppet::Indirector::REST
57
50
  # since it's search, return empty array instead of nil
58
51
  return [] if e.response.code == 404
59
52
 
60
- raise convert_to_http_error(e.response.nethttp)
53
+ raise convert_to_http_error(e.response)
61
54
  end
62
55
  end
@@ -16,14 +16,7 @@ class Puppet::Indirector::FileServer < Puppet::Indirector::Terminus
16
16
  # If we're not serving this mount, then access is denied.
17
17
  return false unless mount
18
18
 
19
- # If there are no auth directives or there is an 'allow *' directive, then
20
- # access is allowed.
21
- if mount.empty? || mount.globalallow?
22
- return true
23
- end
24
-
25
- Puppet.err _("Denying %{method} request for %{desc} on fileserver mount '%{mount_name}'. Use of auth directives for 'fileserver.conf' mount points is no longer supported. Remove these directives and use the 'auth.conf' file instead for access control.") % { method: request.method, desc: request.description, mount_name: mount.name }
26
- return false
19
+ true
27
20
  end
28
21
 
29
22
  # Find our key using the fileserver.
@@ -1,16 +1,5 @@
1
1
  require 'puppet/file_serving/terminus_helper'
2
- require 'puppet/util/http_proxy'
3
2
 
4
3
  class Puppet::Indirector::GenericHttp < Puppet::Indirector::Terminus
5
4
  desc "Retrieve data from a remote HTTP server."
6
-
7
- class <<self
8
- attr_accessor :http_method
9
- end
10
-
11
- def find(request)
12
- uri = URI(request.uri)
13
- method = self.class.http_method
14
- Puppet::Util::HttpProxy.request_with_redirects(uri,method)
15
- end
16
5
  end
@@ -6,8 +6,6 @@ class Puppet::Node::Rest < Puppet::Indirector::REST
6
6
  to override its environment."
7
7
 
8
8
  def find(request)
9
- return super unless use_http_client?
10
-
11
9
  session = Puppet.lookup(:http_session)
12
10
  api = session.route_to(:puppet)
13
11
  _, node = api.get_node(
@@ -21,11 +19,11 @@ class Puppet::Node::Rest < Puppet::Indirector::REST
21
19
  if e.response.code == 404
22
20
  return nil unless request.options[:fail_on_404]
23
21
 
24
- _, body = parse_response(e.response.nethttp)
22
+ _, body = parse_response(e.response)
25
23
  msg = _("Find %{uri} resulted in 404 with the message: %{body}") % { uri: elide(e.response.url.path, 100), body: body }
26
24
  raise Puppet::Error, msg
27
25
  else
28
- raise convert_to_http_error(e.response.nethttp)
26
+ raise convert_to_http_error(e.response)
29
27
  end
30
28
  end
31
29
  end
@@ -3,13 +3,8 @@ require 'semantic_puppet'
3
3
 
4
4
  class Puppet::Transaction::Report::Rest < Puppet::Indirector::REST
5
5
  desc "Get server report over HTTP via REST."
6
- use_server_setting(:report_server)
7
- use_port_setting(:report_port)
8
- use_srv_service(:report)
9
6
 
10
7
  def save(request)
11
- return super unless use_http_client?
12
-
13
8
  session = Puppet.lookup(:http_session)
14
9
  api = session.route_to(:report)
15
10
  response = api.put_report(
@@ -22,13 +17,13 @@ class Puppet::Transaction::Report::Rest < Puppet::Indirector::REST
22
17
  rescue Puppet::HTTP::ResponseError => e
23
18
  return nil if e.response.code == 404
24
19
 
25
- raise convert_to_http_error(e.response.nethttp)
20
+ raise convert_to_http_error(e.response)
26
21
  end
27
22
 
28
23
  # This is called by the superclass when not using our httpclient.
29
24
  def handle_response(request, response)
30
- if !response.is_a?(Net::HTTPSuccess)
31
- server_version = response[Puppet::Network::HTTP::HEADER_PUPPET_VERSION]
25
+ if !response.success?
26
+ server_version = response[Puppet::Network::HEADER_PUPPET_VERSION]
32
27
  if server_version &&
33
28
  SemanticPuppet::Version.parse(server_version).major < Puppet::Indirector::REST::MAJOR_VERSION_JSON_DEFAULT &&
34
29
  Puppet[:preferred_serialization_format] != 'pson'
@@ -1,7 +1,6 @@
1
1
  require 'cgi'
2
2
  require 'uri'
3
3
  require 'puppet/indirector'
4
- require 'puppet/network/resolver'
5
4
  require 'puppet/util/psych_support'
6
5
  require 'puppet/util/warnings'
7
6
 
@@ -109,47 +108,6 @@ class Puppet::Indirector::Request
109
108
  method == :search
110
109
  end
111
110
 
112
- # Create the query string, if options are present.
113
- def query_string
114
- return "" if options.nil? || options.empty?
115
- encode_params(expand_into_parameters(options.to_a))
116
- end
117
-
118
- def expand_into_parameters(data)
119
- data.inject([]) do |params, key_value|
120
- key, value = key_value
121
-
122
- expanded_value = case value
123
- when Array
124
- value.collect { |val| [key, val] }
125
- else
126
- [key_value]
127
- end
128
-
129
- params.concat(expand_primitive_types_into_parameters(expanded_value))
130
- end
131
- end
132
-
133
- def expand_primitive_types_into_parameters(data)
134
- data.inject([]) do |params, key_value|
135
- key, value = key_value
136
- case value
137
- when nil
138
- params
139
- when true, false, String, Symbol, Integer, Float
140
- params << [key, value]
141
- else
142
- raise ArgumentError, _("HTTP REST queries cannot handle values of type '%{klass}'") % { klass: value.class }
143
- end
144
- end
145
- end
146
-
147
- def encode_params(params)
148
- params.collect do |key, value|
149
- "#{key}=#{Puppet::Util.uri_query_encode(value.to_s)}"
150
- end.join("&")
151
- end
152
-
153
111
  def initialize_from_hash(hash)
154
112
  @indirection_name = hash['indirection_name'].to_sym
155
113
  @method = hash['method'].to_sym
@@ -182,65 +140,6 @@ class Puppet::Indirector::Request
182
140
  return(uri ? uri : "/#{indirection_name}/#{key}")
183
141
  end
184
142
 
185
- def do_request(srv_service=:puppet, default_server=nil, default_port=nil, &block)
186
- # We were given a specific server to use, so just use that one.
187
- # This happens if someone does something like specifying a file
188
- # source using a puppet:// URI with a specific server.
189
- return yield(self) if !self.server.nil?
190
-
191
- if Puppet.settings[:use_srv_records]
192
- # We may want to consider not creating a new resolver here
193
- # every request eventually, to take advantage of the resolver's
194
- # caching behavior.
195
- resolver = Puppet::Network::Resolver.new
196
- resolver.each_srv_record(Puppet.settings[:srv_domain], srv_service) do |srv_server, srv_port|
197
- begin
198
- self.server = srv_server
199
- self.port = srv_port
200
- return yield(self)
201
- rescue SystemCallError => e
202
- Puppet.warning _("Error connecting to %{srv_server}:%{srv_port}: %{message}") % { srv_server: srv_server, srv_port: srv_port, message: e.message }
203
- end
204
- end
205
- end
206
-
207
- if default_server
208
- self.server = default_server
209
- else
210
- self.server = Puppet.lookup(:server) do
211
- primary_server = Puppet.settings[:server_list][0]
212
- if primary_server
213
- #TRANSLATORS 'server_list' is the name of a setting and should not be translated
214
- debug_once _("Selected server from first entry of the `server_list` setting: %{server}") % {server: primary_server[0]}
215
- primary_server[0]
216
- else
217
- #TRANSLATORS 'server' is the name of a setting and should not be translated
218
- debug_once _("Selected server from the `server` setting: %{server}") % {server: Puppet.settings[:server]}
219
- Puppet.settings[:server]
220
- end
221
- end
222
- end
223
-
224
- if default_port
225
- self.port = default_port
226
- else
227
- self.port = Puppet.lookup(:serverport) do
228
- primary_server = Puppet.settings[:server_list][0]
229
- if primary_server
230
- #TRANSLATORS 'server_list' is the name of a setting and should not be translated
231
- debug_once _("Selected port from the first entry of the `server_list` setting: %{port}") % {port: primary_server[1]}
232
- primary_server[1]
233
- else
234
- #TRANSLATORS 'serverport' is the name of a setting and should not be translated
235
- debug_once _("Selected port from the `serverport` setting: %{port}") % {port: Puppet.settings[:serverport]}
236
- Puppet.settings[:serverport]
237
- end
238
- end
239
- end
240
-
241
- return yield(self)
242
- end
243
-
244
143
  def remote?
245
144
  self.node or self.ip
246
145
  end
@@ -1,241 +1,23 @@
1
- require 'net/http'
2
- require 'uri'
3
- require 'puppet/util/json'
4
- require 'puppet/util/connection'
5
- require 'semantic_puppet'
6
-
7
- require 'puppet/network/http'
8
- require 'puppet/network/http_pool'
9
-
10
1
  # Access objects via REST
11
2
  class Puppet::Indirector::REST < Puppet::Indirector::Terminus
12
- include Puppet::Network::HTTP::Compression.module
13
-
14
- IndirectedRoutes = Puppet::Network::HTTP::API::IndirectedRoutes
15
- EXCLUDED_FORMATS = [:yaml, :b64_zlib_yaml, :dot]
16
-
17
- # puppet major version where JSON is enabled by default
18
- MAJOR_VERSION_JSON_DEFAULT = 5
19
-
20
- class << self
21
- attr_reader :server_setting, :port_setting
22
- end
23
-
24
- # Specify the setting that we should use to get the server name.
25
- def self.use_server_setting(setting)
26
- @server_setting = setting
27
- end
28
-
29
- # Specify the setting that we should use to get the port.
30
- def self.use_port_setting(setting)
31
- @port_setting = setting
32
- end
33
-
34
- # Specify the service to use when doing SRV record lookup
35
- def self.use_srv_service(service)
36
- @srv_service = service
37
- end
38
-
39
- def self.srv_service
40
- @srv_service || :puppet
41
- end
42
-
43
- # Select the server to use based on the settings configuration
44
- # for this indirection, taking into account the HA server list.
45
- def self.server
46
- Puppet::Util::Connection.determine_server(server_setting)
47
- end
48
-
49
- # Select the port to use based on the settings configuration
50
- # for this indirection, taking into account the HA server list.
51
- def self.port
52
- Puppet::Util::Connection.determine_port(port_setting, server_setting)
53
- end
54
-
55
- # Should we use puppet's http client to make requests. Will return
56
- # false when running in puppetserver
57
- def use_http_client?
58
- Puppet::Network::HttpPool.http_client_class == Puppet::Network::HTTP::Connection ||
59
- Puppet::Network::HttpPool.http_client_class == Puppet::Network::HTTP::ConnectionAdapter
60
- end
61
-
62
- # Provide appropriate headers.
63
- def headers
64
- # yaml is not allowed on the network
65
- network_formats = model.supported_formats - EXCLUDED_FORMATS
66
- mime_types = network_formats.map { |f| model.get_format(f).mime }
67
- common_headers = {
68
- "Accept" => mime_types.join(', '),
69
- Puppet::Network::HTTP::HEADER_PUPPET_VERSION => Puppet.version
70
- }
71
-
72
- add_accept_encoding(common_headers)
73
- end
74
-
75
- def add_profiling_header(headers)
76
- if (Puppet[:profile])
77
- headers[Puppet::Network::HTTP::HEADER_ENABLE_PROFILING] = "true"
78
- end
79
- headers
80
- end
81
-
82
- def network(request)
83
- ssl_context = Puppet.lookup(:ssl_context)
84
- Puppet::Network::HttpPool.connection(request.server || self.class.server,
85
- request.port || self.class.port,
86
- ssl_context: ssl_context)
87
- end
88
-
89
- def http_get(request, path, headers = nil, *args)
90
- http_request(:get, request, path, add_profiling_header(headers), *args)
91
- end
92
-
93
- def http_post(request, path, data, headers = nil, *args)
94
- http_request(:post, request, path, data, add_profiling_header(headers), *args)
95
- end
96
-
97
- def http_head(request, path, headers = nil, *args)
98
- http_request(:head, request, path, add_profiling_header(headers), *args)
99
- end
100
-
101
- def http_delete(request, path, headers = nil, *args)
102
- http_request(:delete, request, path, add_profiling_header(headers), *args)
103
- end
104
-
105
- def http_put(request, path, data, headers = nil, *args)
106
- http_request(:put, request, path, data, add_profiling_header(headers), *args)
107
- end
108
-
109
- def http_request(method, request, *args)
110
- conn = network(request)
111
- conn.send(method, *args)
112
- end
113
-
114
3
  def find(request)
115
- Puppet.deprecation_warning(_("Puppet::Indirector::Rest#find is deprecated. Use Puppet::HTTP::Client instead."))
116
- uri, body = IndirectedRoutes.request_to_uri_and_body(request)
117
- uri_with_query_string = "#{uri}?#{body}"
118
-
119
- response = do_request(request) do |req|
120
- # WEBrick in Ruby 1.9.1 only supports up to 1024 character lines in an HTTP request
121
- # http://redmine.ruby-lang.org/issues/show/3991
122
- if "GET #{uri_with_query_string} HTTP/1.1\r\n".length > 1024
123
- uri_with_env = "#{uri}?environment=#{request.environment.name}"
124
- http_post(req, uri_with_env, body, headers)
125
- else
126
- http_get(req, uri_with_query_string, headers)
127
- end
128
- end
129
-
130
- if is_http_200?(response)
131
- content_type, body = parse_response(response)
132
- result = deserialize_find(content_type, body)
133
- result.name = request.key if result.respond_to?(:name=)
134
- result
135
-
136
- elsif is_http_404?(response)
137
- return nil unless request.options[:fail_on_404]
138
-
139
- # 404 can get special treatment as the indirector API can not produce a meaningful
140
- # reason to why something is not found - it may not be the thing the user is
141
- # expecting to find that is missing, but something else (like the environment).
142
- # While this way of handling the issue is not perfect, there is at least an error
143
- # that makes a user aware of the reason for the failure.
144
- #
145
- _, body = parse_response(response)
146
- msg = _("Find %{uri} resulted in 404 with the message: %{body}") % { uri: elide(uri_with_query_string, 100), body: body }
147
- raise Puppet::Error, msg
148
- else
149
- nil
150
- end
4
+ raise NotImplementedError
151
5
  end
152
6
 
153
7
  def head(request)
154
- Puppet.deprecation_warning(_("Puppet::Indirector::Rest#head is deprecated. Use Puppet::HTTP::Client instead."))
155
- response = do_request(request) do |req|
156
- http_head(req, IndirectedRoutes.request_to_uri(req), headers)
157
- end
158
-
159
- if is_http_200?(response)
160
- true
161
- else
162
- false
163
- end
8
+ raise NotImplementedError
164
9
  end
165
10
 
166
11
  def search(request)
167
- Puppet.deprecation_warning(_("Puppet::Indirector::Rest#search is deprecated. Use Puppet::HTTP::Client instead."))
168
- response = do_request(request) do |req|
169
- http_get(req, IndirectedRoutes.request_to_uri(req), headers)
170
- end
171
-
172
- if is_http_200?(response)
173
- content_type, body = parse_response(response)
174
- deserialize_search(content_type, body) || []
175
- else
176
- []
177
- end
12
+ raise NotImplementedError
178
13
  end
179
14
 
180
15
  def destroy(request)
181
- Puppet.deprecation_warning(_("Puppet::Indirector::Rest#destroy is deprecated. Use Puppet::HTTP::Client instead."))
182
- raise ArgumentError, _("DELETE does not accept options") unless request.options.empty?
183
-
184
- response = do_request(request) do |req|
185
- http_delete(req, IndirectedRoutes.request_to_uri(req), headers)
186
- end
187
-
188
- if is_http_200?(response)
189
- content_type, body = parse_response(response)
190
- deserialize_destroy(content_type, body)
191
- else
192
- nil
193
- end
16
+ raise NotImplementedError
194
17
  end
195
18
 
196
19
  def save(request)
197
- Puppet.deprecation_warning(_("Puppet::Indirector::Rest#save is deprecated. Use Puppet::HTTP::Client instead."))
198
- raise ArgumentError, _("PUT does not accept options") unless request.options.empty?
199
-
200
- response = do_request(request) do |req|
201
- http_put(req, IndirectedRoutes.request_to_uri(req), req.instance.render, headers.merge({ "Content-Type" => req.instance.mime }))
202
- end
203
-
204
- if is_http_200?(response)
205
- content_type, body = parse_response(response)
206
- deserialize_save(content_type, body)
207
- else
208
- nil
209
- end
210
- end
211
-
212
- # Encapsulate call to request.do_request with the arguments from this class
213
- # Then yield to the code block that was called in
214
- # We certainly could have retained the full request.do_request(...) { |r| ... }
215
- # but this makes the code much cleaner and we only then actually make the call
216
- # to request.do_request from here, thus if we change what we pass or how we
217
- # get it, we only need to change it here.
218
- def do_request(request)
219
- response = request.do_request(self.class.srv_service, self.class.server, self.class.port) { |req| yield(req) }
220
-
221
- handle_response(request, response) if response
222
-
223
- response
224
- end
225
-
226
- def handle_response(request, response)
227
- server_version = response[Puppet::Network::HTTP::HEADER_PUPPET_VERSION]
228
- if server_version
229
- Puppet.lookup(:server_agent_version) do
230
- Puppet.push_context(:server_agent_version => server_version)
231
- end
232
- if SemanticPuppet::Version.parse(server_version).major < MAJOR_VERSION_JSON_DEFAULT &&
233
- Puppet[:preferred_serialization_format] != 'pson'
234
- #TRANSLATORS "PSON" should not be translated
235
- Puppet.warning(_("Downgrading to PSON for future requests"))
236
- Puppet[:preferred_serialization_format] = 'pson'
237
- end
238
- end
20
+ raise NotImplementedError
239
21
  end
240
22
 
241
23
  def validate_key(request)
@@ -244,67 +26,34 @@ class Puppet::Indirector::REST < Puppet::Indirector::Terminus
244
26
 
245
27
  private
246
28
 
247
- def is_http_200?(response)
248
- case response.code
249
- when "404"
250
- false
251
- when /^2/
252
- true
253
- else
254
- # Raise the http error if we didn't get a 'success' of some kind.
255
- raise convert_to_http_error(response)
256
- end
257
- end
258
-
259
- def is_http_404?(response)
260
- response.code == "404"
261
- end
262
-
263
29
  def convert_to_http_error(response)
264
- if response.body.to_s.empty? && response.respond_to?(:message)
265
- returned_message = response.message
30
+ if response.body.to_s.empty? && response.reason
31
+ returned_message = response.reason
266
32
  elsif response['content-type'].is_a?(String)
267
33
  content_type, body = parse_response(response)
268
34
  if content_type =~ /[pj]son/
269
35
  returned_message = Puppet::Util::Json.load(body)["message"]
270
36
  else
271
- returned_message = uncompress_body(response)
37
+ returned_message = response.body
272
38
  end
273
39
  else
274
- returned_message = uncompress_body(response)
40
+ returned_message = response.body
275
41
  end
276
42
 
277
43
  message = _("Error %{code} on SERVER: %{returned_message}") % { code: response.code, returned_message: returned_message }
278
- Net::HTTPError.new(message, response)
44
+ Net::HTTPError.new(message, Puppet::HTTP::ResponseConverter.to_ruby_response(response))
279
45
  end
280
46
 
281
47
  # Returns the content_type, stripping any appended charset, and the
282
- # body, decompressed if necessary (content-encoding is checked inside
283
- # uncompress_body)
48
+ # body, decompressed if necessary
284
49
  def parse_response(response)
285
50
  if response['content-type']
286
- [ response['content-type'].gsub(/\s*;.*$/,''), uncompress_body(response) ]
51
+ [ response['content-type'].gsub(/\s*;.*$/,''), response.body ]
287
52
  else
288
53
  raise _("No content type in http response; cannot parse")
289
54
  end
290
55
  end
291
56
 
292
- def deserialize_find(content_type, body)
293
- model.convert_from(content_type, body)
294
- end
295
-
296
- def deserialize_search(content_type, body)
297
- model.convert_from_multiple(content_type, body)
298
- end
299
-
300
- def deserialize_destroy(content_type, body)
301
- model.convert_from(content_type, body)
302
- end
303
-
304
- def deserialize_save(content_type, body)
305
- nil
306
- end
307
-
308
57
  def elide(string, length)
309
58
  if Puppet::Util::Log.level == :debug || string.length <= length
310
59
  string