puppet 6.11.1-x64-mingw32 → 6.16.0-x64-mingw32

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

Potentially problematic release.


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

Files changed (395) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +3 -8
  3. data/CONTRIBUTING.md +7 -13
  4. data/Gemfile +1 -0
  5. data/Gemfile.lock +39 -36
  6. data/README.md +17 -24
  7. data/ext/build_defaults.yaml +1 -0
  8. data/ext/project_data.yaml +1 -1
  9. data/ext/windows/service/daemon.rb +25 -20
  10. data/lib/puppet.rb +52 -13
  11. data/lib/puppet/agent.rb +20 -14
  12. data/lib/puppet/application/agent.rb +12 -14
  13. data/lib/puppet/application/describe.rb +7 -5
  14. data/lib/puppet/application/device.rb +2 -2
  15. data/lib/puppet/application/filebucket.rb +19 -15
  16. data/lib/puppet/application/plugin.rb +1 -0
  17. data/lib/puppet/application/resource.rb +1 -1
  18. data/lib/puppet/application/ssl.rb +4 -4
  19. data/lib/puppet/concurrent.rb +2 -0
  20. data/lib/puppet/concurrent/lock.rb +16 -0
  21. data/lib/puppet/concurrent/synchronized.rb +15 -0
  22. data/lib/puppet/concurrent/thread_local_singleton.rb +14 -0
  23. data/lib/puppet/configurer.rb +85 -83
  24. data/lib/puppet/configurer/plugin_handler.rb +10 -1
  25. data/lib/puppet/context/trusted_information.rb +14 -8
  26. data/lib/puppet/daemon.rb +13 -27
  27. data/lib/puppet/defaults.rb +158 -40
  28. data/lib/puppet/environments.rb +30 -20
  29. data/lib/puppet/error.rb +9 -1
  30. data/lib/puppet/face/facts.rb +8 -5
  31. data/lib/puppet/face/help.rb +29 -3
  32. data/lib/puppet/face/module/search.rb +5 -0
  33. data/lib/puppet/face/plugin.rb +2 -2
  34. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  35. data/lib/puppet/file_system/file_impl.rb +13 -9
  36. data/lib/puppet/file_system/memory_file.rb +6 -0
  37. data/lib/puppet/file_system/memory_impl.rb +13 -0
  38. data/lib/puppet/file_system/uniquefile.rb +4 -0
  39. data/lib/puppet/file_system/windows.rb +7 -10
  40. data/lib/puppet/forge.rb +3 -3
  41. data/lib/puppet/forge/errors.rb +2 -2
  42. data/lib/puppet/forge/repository.rb +31 -86
  43. data/lib/puppet/functions/call.rb +1 -1
  44. data/lib/puppet/functions/camelcase.rb +2 -2
  45. data/lib/puppet/functions/epp.rb +4 -4
  46. data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
  47. data/lib/puppet/functions/filter.rb +1 -0
  48. data/lib/puppet/functions/find_file.rb +9 -9
  49. data/lib/puppet/functions/find_template.rb +63 -0
  50. data/lib/puppet/functions/inline_epp.rb +5 -5
  51. data/lib/puppet/functions/reduce.rb +2 -4
  52. data/lib/puppet/http.rb +7 -0
  53. data/lib/puppet/http/client.rb +341 -54
  54. data/lib/puppet/http/errors.rb +2 -0
  55. data/lib/puppet/http/external_client.rb +90 -0
  56. data/lib/puppet/http/redirector.rb +34 -0
  57. data/lib/puppet/http/resolver.rb +57 -1
  58. data/lib/puppet/http/resolver/server_list.rb +98 -0
  59. data/lib/puppet/http/resolver/settings.rb +23 -2
  60. data/lib/puppet/http/resolver/srv.rb +36 -4
  61. data/lib/puppet/http/response.rb +68 -1
  62. data/lib/puppet/http/retry_after_handler.rb +39 -0
  63. data/lib/puppet/http/service.rb +179 -3
  64. data/lib/puppet/http/service/ca.rb +84 -21
  65. data/lib/puppet/http/service/compiler.rb +319 -0
  66. data/lib/puppet/http/service/file_server.rb +206 -0
  67. data/lib/puppet/http/service/report.rb +66 -0
  68. data/lib/puppet/http/session.rb +106 -31
  69. data/lib/puppet/indirector/catalog/compiler.rb +10 -0
  70. data/lib/puppet/indirector/catalog/rest.rb +34 -0
  71. data/lib/puppet/indirector/facts/rest.rb +42 -0
  72. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  73. data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
  74. data/lib/puppet/indirector/file_content/http.rb +5 -0
  75. data/lib/puppet/indirector/file_content/rest.rb +30 -0
  76. data/lib/puppet/indirector/file_metadata/http.rb +4 -4
  77. data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
  78. data/lib/puppet/indirector/json.rb +1 -1
  79. data/lib/puppet/indirector/msgpack.rb +1 -1
  80. data/lib/puppet/indirector/node/rest.rb +24 -0
  81. data/lib/puppet/indirector/report/rest.rb +19 -0
  82. data/lib/puppet/indirector/report/yaml.rb +23 -0
  83. data/lib/puppet/indirector/rest.rb +12 -0
  84. data/lib/puppet/indirector/status/rest.rb +18 -0
  85. data/lib/puppet/loaders.rb +6 -0
  86. data/lib/puppet/metatype/manager.rb +80 -80
  87. data/lib/puppet/network/http/base_pool.rb +19 -1
  88. data/lib/puppet/network/http/compression.rb +7 -0
  89. data/lib/puppet/network/http/connection.rb +6 -0
  90. data/lib/puppet/network/http/connection_adapter.rb +182 -0
  91. data/lib/puppet/network/http/nocache_pool.rb +2 -0
  92. data/lib/puppet/network/http/pool.rb +13 -6
  93. data/lib/puppet/network/http_pool.rb +2 -1
  94. data/lib/puppet/node/environment.rb +24 -8
  95. data/lib/puppet/pal/catalog_compiler.rb +5 -0
  96. data/lib/puppet/pal/pal_impl.rb +9 -29
  97. data/lib/puppet/parser/ast/pops_bridge.rb +6 -11
  98. data/lib/puppet/parser/compiler.rb +42 -32
  99. data/lib/puppet/parser/functions.rb +18 -13
  100. data/lib/puppet/parser/functions/epp.rb +3 -3
  101. data/lib/puppet/parser/functions/filter.rb +1 -0
  102. data/lib/puppet/parser/functions/inline_epp.rb +5 -5
  103. data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
  104. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
  105. data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
  106. data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +12 -3
  107. data/lib/puppet/pops/loaders.rb +7 -5
  108. data/lib/puppet/pops/lookup/invocation.rb +10 -3
  109. data/lib/puppet/pops/model/pn_transformer.rb +5 -9
  110. data/lib/puppet/pops/parser/evaluating_parser.rb +8 -11
  111. data/lib/puppet/pops/serialization/json_path.rb +3 -3
  112. data/lib/puppet/pops/time/timespan.rb +3 -5
  113. data/lib/puppet/pops/types/p_object_type_extension.rb +10 -0
  114. data/lib/puppet/pops/types/string_converter.rb +6 -9
  115. data/lib/puppet/pops/types/type_calculator.rb +30 -10
  116. data/lib/puppet/pops/types/type_formatter.rb +9 -11
  117. data/lib/puppet/pops/types/type_parser.rb +3 -3
  118. data/lib/puppet/pops/validation/checker4_0.rb +1 -1
  119. data/lib/puppet/pops/validation/tasks_checker.rb +5 -1
  120. data/lib/puppet/provider/aix_object.rb +4 -2
  121. data/lib/puppet/provider/group/aix.rb +1 -0
  122. data/lib/puppet/provider/group/groupadd.rb +57 -24
  123. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  124. data/lib/puppet/provider/package/aix.rb +17 -2
  125. data/lib/puppet/provider/package/apt.rb +78 -4
  126. data/lib/puppet/provider/package/dnfmodule.rb +69 -15
  127. data/lib/puppet/provider/package/dpkg.rb +14 -7
  128. data/lib/puppet/provider/package/fink.rb +20 -3
  129. data/lib/puppet/provider/package/gem.rb +41 -7
  130. data/lib/puppet/provider/package/openbsd.rb +13 -1
  131. data/lib/puppet/provider/package/pacman.rb +2 -5
  132. data/lib/puppet/provider/package/pip.rb +143 -48
  133. data/lib/puppet/provider/package/pip3.rb +0 -2
  134. data/lib/puppet/provider/package/pkg.rb +18 -5
  135. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  136. data/lib/puppet/provider/package/pkgng.rb +16 -4
  137. data/lib/puppet/provider/package/portage.rb +5 -5
  138. data/lib/puppet/provider/package/puppet_gem.rb +6 -2
  139. data/lib/puppet/provider/package/rpm.rb +6 -213
  140. data/lib/puppet/provider/package/yum.rb +108 -24
  141. data/lib/puppet/provider/package/zypper.rb +59 -1
  142. data/lib/puppet/provider/package_targetable.rb +5 -4
  143. data/lib/puppet/provider/service/systemd.rb +23 -5
  144. data/lib/puppet/provider/user/aix.rb +1 -0
  145. data/lib/puppet/provider/user/directoryservice.rb +30 -5
  146. data/lib/puppet/provider/user/hpux.rb +1 -1
  147. data/lib/puppet/provider/user/useradd.rb +11 -8
  148. data/lib/puppet/reports/http.rb +13 -9
  149. data/lib/puppet/reports/store.rb +1 -1
  150. data/lib/puppet/resource/type_collection.rb +20 -16
  151. data/lib/puppet/runtime.rb +32 -1
  152. data/lib/puppet/settings.rb +4 -0
  153. data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
  154. data/lib/puppet/ssl.rb +1 -0
  155. data/lib/puppet/ssl/certificate.rb +2 -1
  156. data/lib/puppet/ssl/host.rb +4 -4
  157. data/lib/puppet/ssl/oids.rb +1 -0
  158. data/lib/puppet/ssl/ssl_provider.rb +20 -0
  159. data/lib/puppet/ssl/state_machine.rb +81 -35
  160. data/lib/puppet/ssl/verifier_adapter.rb +9 -1
  161. data/lib/puppet/test/test_helper.rb +7 -1
  162. data/lib/puppet/transaction.rb +33 -11
  163. data/lib/puppet/transaction/report.rb +2 -2
  164. data/lib/puppet/transaction/resource_harness.rb +1 -1
  165. data/lib/puppet/type.rb +7 -2
  166. data/lib/puppet/type/file.rb +13 -0
  167. data/lib/puppet/type/file/data_sync.rb +5 -1
  168. data/lib/puppet/type/file/source.rb +49 -58
  169. data/lib/puppet/type/group.rb +5 -4
  170. data/lib/puppet/type/package.rb +102 -10
  171. data/lib/puppet/type/service.rb +6 -8
  172. data/lib/puppet/type/user.rb +6 -30
  173. data/lib/puppet/util.rb +34 -11
  174. data/lib/puppet/util/at_fork.rb +1 -1
  175. data/lib/puppet/util/autoload.rb +4 -18
  176. data/lib/puppet/util/instance_loader.rb +14 -10
  177. data/lib/puppet/util/log/destinations.rb +2 -11
  178. data/lib/puppet/util/logging.rb +30 -18
  179. data/lib/puppet/util/package/version/debian.rb +175 -0
  180. data/lib/puppet/util/package/version/gem.rb +15 -0
  181. data/lib/puppet/util/package/version/pip.rb +167 -0
  182. data/lib/puppet/util/package/version/range.rb +53 -0
  183. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  184. data/lib/puppet/util/package/version/range/gt.rb +14 -0
  185. data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
  186. data/lib/puppet/util/package/version/range/lt.rb +14 -0
  187. data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
  188. data/lib/puppet/util/package/version/range/min_max.rb +21 -0
  189. data/lib/puppet/util/package/version/range/simple.rb +11 -0
  190. data/lib/puppet/util/package/version/rpm.rb +73 -0
  191. data/lib/puppet/util/pidlock.rb +36 -10
  192. data/lib/puppet/util/platform.rb +5 -0
  193. data/lib/puppet/util/plist.rb +6 -0
  194. data/lib/puppet/util/rpm_compare.rb +193 -0
  195. data/lib/puppet/util/storage.rb +0 -1
  196. data/lib/puppet/util/windows/adsi.rb +50 -20
  197. data/lib/puppet/util/windows/process.rb +15 -14
  198. data/lib/puppet/util/windows/security.rb +1 -0
  199. data/lib/puppet/util/windows/sid.rb +3 -3
  200. data/lib/puppet/util/yaml.rb +1 -1
  201. data/lib/puppet/version.rb +1 -1
  202. data/lib/puppet/x509/cert_provider.rb +9 -5
  203. data/locales/puppet.pot +640 -521
  204. data/man/man5/puppet.conf.5 +88 -9
  205. data/man/man8/puppet-agent.8 +6 -6
  206. data/man/man8/puppet-apply.8 +1 -1
  207. data/man/man8/puppet-catalog.8 +1 -1
  208. data/man/man8/puppet-config.8 +1 -1
  209. data/man/man8/puppet-describe.8 +1 -1
  210. data/man/man8/puppet-device.8 +2 -2
  211. data/man/man8/puppet-doc.8 +1 -1
  212. data/man/man8/puppet-epp.8 +1 -1
  213. data/man/man8/puppet-facts.8 +1 -1
  214. data/man/man8/puppet-filebucket.8 +17 -2
  215. data/man/man8/puppet-generate.8 +1 -1
  216. data/man/man8/puppet-help.8 +6 -3
  217. data/man/man8/puppet-key.8 +1 -1
  218. data/man/man8/puppet-lookup.8 +1 -1
  219. data/man/man8/puppet-man.8 +1 -1
  220. data/man/man8/puppet-module.8 +4 -1
  221. data/man/man8/puppet-node.8 +1 -1
  222. data/man/man8/puppet-parser.8 +1 -1
  223. data/man/man8/puppet-plugin.8 +1 -1
  224. data/man/man8/puppet-report.8 +1 -1
  225. data/man/man8/puppet-resource.8 +1 -1
  226. data/man/man8/puppet-script.8 +1 -1
  227. data/man/man8/puppet-ssl.8 +2 -2
  228. data/man/man8/puppet-status.8 +1 -1
  229. data/man/man8/puppet.8 +2 -2
  230. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
  231. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
  232. data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
  233. data/spec/fixtures/ssl/unknown-ca.pem +59 -0
  234. data/spec/fixtures/unit/forge/bacula.json +76 -0
  235. data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
  236. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  237. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  238. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  239. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  240. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +1 -102
  241. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +1 -106
  242. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -106
  243. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -102
  244. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -98
  245. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -102
  246. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +1 -102
  247. data/spec/integration/application/agent_spec.rb +394 -0
  248. data/spec/integration/application/apply_spec.rb +132 -3
  249. data/spec/integration/application/filebucket_spec.rb +190 -0
  250. data/spec/integration/application/plugin_spec.rb +73 -0
  251. data/spec/integration/configurer_spec.rb +26 -7
  252. data/spec/integration/http/client_spec.rb +154 -0
  253. data/spec/integration/indirector/facts/facter_spec.rb +4 -0
  254. data/spec/integration/indirector/report/yaml.rb +83 -0
  255. data/spec/integration/module_tool/forge_spec.rb +51 -0
  256. data/spec/integration/network/http_pool_spec.rb +76 -20
  257. data/spec/integration/node/environment_spec.rb +15 -0
  258. data/spec/integration/util/windows/adsi_spec.rb +6 -1
  259. data/spec/lib/puppet/test_ca.rb +2 -2
  260. data/spec/lib/puppet_spec/https.rb +20 -9
  261. data/spec/lib/puppet_spec/puppetserver.rb +119 -0
  262. data/spec/shared_contexts/https.rb +29 -0
  263. data/spec/spec_helper.rb +6 -2
  264. data/spec/unit/agent_spec.rb +80 -26
  265. data/spec/unit/application/agent_spec.rb +9 -5
  266. data/spec/unit/application/apply_spec.rb +2 -12
  267. data/spec/unit/application/describe_spec.rb +88 -50
  268. data/spec/unit/application/device_spec.rb +2 -2
  269. data/spec/unit/application/filebucket_spec.rb +22 -2
  270. data/spec/unit/application/resource_spec.rb +2 -2
  271. data/spec/unit/concurrent/lock_spec.rb +29 -0
  272. data/spec/unit/configurer/fact_handler_spec.rb +0 -4
  273. data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
  274. data/spec/unit/configurer_spec.rb +400 -406
  275. data/spec/unit/context/trusted_information_spec.rb +17 -0
  276. data/spec/unit/daemon_spec.rb +5 -64
  277. data/spec/unit/defaults_spec.rb +38 -4
  278. data/spec/unit/environments_spec.rb +65 -28
  279. data/spec/unit/face/facts_spec.rb +24 -20
  280. data/spec/unit/face/module/search_spec.rb +17 -0
  281. data/spec/unit/face/plugin_spec.rb +12 -10
  282. data/spec/unit/file_system/uniquefile_spec.rb +11 -0
  283. data/spec/unit/file_system_spec.rb +26 -2
  284. data/spec/unit/forge/errors_spec.rb +1 -1
  285. data/spec/unit/forge/forge_spec.rb +12 -54
  286. data/spec/unit/forge/module_release_spec.rb +19 -6
  287. data/spec/unit/forge/repository_spec.rb +63 -157
  288. data/spec/unit/forge_spec.rb +46 -116
  289. data/spec/unit/functions/find_template_spec.rb +69 -0
  290. data/spec/unit/functions/lookup_spec.rb +13 -0
  291. data/spec/unit/http/client_spec.rb +395 -27
  292. data/spec/unit/http/external_client_spec.rb +201 -0
  293. data/spec/unit/http/resolver_spec.rb +81 -12
  294. data/spec/unit/http/response_spec.rb +69 -0
  295. data/spec/unit/http/service/ca_spec.rb +100 -7
  296. data/spec/unit/http/service/compiler_spec.rb +627 -0
  297. data/spec/unit/http/service/file_server_spec.rb +308 -0
  298. data/spec/unit/http/service/report_spec.rb +118 -0
  299. data/spec/unit/http/service_spec.rb +117 -4
  300. data/spec/unit/http/session_spec.rb +237 -19
  301. data/spec/unit/indirector/catalog/compiler_spec.rb +47 -29
  302. data/spec/unit/indirector/catalog/rest_spec.rb +59 -2
  303. data/spec/unit/indirector/facts/rest_spec.rb +79 -24
  304. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
  305. data/spec/unit/indirector/file_content/rest_spec.rb +53 -2
  306. data/spec/unit/indirector/file_metadata/http_spec.rb +167 -0
  307. data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -2
  308. data/spec/unit/indirector/node/rest_spec.rb +57 -2
  309. data/spec/unit/indirector/report/rest_spec.rb +58 -51
  310. data/spec/unit/indirector/resource/ral_spec.rb +7 -8
  311. data/spec/unit/indirector/rest_spec.rb +13 -0
  312. data/spec/unit/indirector/status/rest_spec.rb +43 -2
  313. data/spec/unit/network/http/connection_spec.rb +549 -176
  314. data/spec/unit/network/http/nocache_pool_spec.rb +25 -3
  315. data/spec/unit/network/http/pool_spec.rb +89 -11
  316. data/spec/unit/network/http_pool_spec.rb +63 -57
  317. data/spec/unit/network/http_spec.rb +1 -1
  318. data/spec/unit/node/environment_spec.rb +16 -0
  319. data/spec/unit/node/facts_spec.rb +2 -1
  320. data/spec/unit/node_spec.rb +7 -4
  321. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
  322. data/spec/unit/pops/serialization/to_from_hr_spec.rb +6 -1
  323. data/spec/unit/pops/validator/validator_spec.rb +7 -2
  324. data/spec/unit/provider/aix_object_spec.rb +16 -2
  325. data/spec/unit/provider/group/groupadd_spec.rb +181 -56
  326. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  327. data/spec/unit/provider/package/aix_spec.rb +29 -0
  328. data/spec/unit/provider/package/apt_spec.rb +43 -2
  329. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  330. data/spec/unit/provider/package/dnfmodule_spec.rb +76 -15
  331. data/spec/unit/provider/package/dpkg_spec.rb +28 -6
  332. data/spec/unit/provider/package/gem_spec.rb +40 -0
  333. data/spec/unit/provider/package/openbsd_spec.rb +17 -0
  334. data/spec/unit/provider/package/pacman_spec.rb +6 -21
  335. data/spec/unit/provider/package/pip_spec.rb +68 -19
  336. data/spec/unit/provider/package/pkg_spec.rb +15 -1
  337. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  338. data/spec/unit/provider/package/pkgng_spec.rb +38 -0
  339. data/spec/unit/provider/package/portage_spec.rb +9 -4
  340. data/spec/unit/provider/package/puppet_gem_spec.rb +8 -0
  341. data/spec/unit/provider/package/rpm_spec.rb +0 -212
  342. data/spec/unit/provider/package/yum_spec.rb +292 -0
  343. data/spec/unit/provider/package/zypper_spec.rb +84 -0
  344. data/spec/unit/provider/package_targetable_spec.rb +60 -0
  345. data/spec/unit/provider/service/init_spec.rb +1 -0
  346. data/spec/unit/provider/service/openbsd_spec.rb +9 -0
  347. data/spec/unit/provider/service/openwrt_spec.rb +1 -0
  348. data/spec/unit/provider/service/redhat_spec.rb +9 -0
  349. data/spec/unit/provider/service/systemd_spec.rb +92 -12
  350. data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
  351. data/spec/unit/provider/user/hpux_spec.rb +2 -2
  352. data/spec/unit/provider/user/useradd_spec.rb +21 -8
  353. data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
  354. data/spec/unit/puppet_pal_2pec.rb +0 -26
  355. data/spec/unit/puppet_pal_catalog_spec.rb +46 -0
  356. data/spec/unit/puppet_spec.rb +47 -0
  357. data/spec/unit/reports/http_spec.rb +70 -52
  358. data/spec/unit/settings/autosign_setting_spec.rb +1 -1
  359. data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
  360. data/spec/unit/ssl/certificate_spec.rb +7 -0
  361. data/spec/unit/ssl/host_spec.rb +4 -2
  362. data/spec/unit/ssl/oids_spec.rb +1 -0
  363. data/spec/unit/ssl/ssl_provider_spec.rb +71 -0
  364. data/spec/unit/ssl/state_machine_spec.rb +99 -13
  365. data/spec/unit/transaction/persistence_spec.rb +1 -10
  366. data/spec/unit/transaction/report_spec.rb +4 -0
  367. data/spec/unit/transaction_spec.rb +45 -1
  368. data/spec/unit/type/file/content_spec.rb +9 -3
  369. data/spec/unit/type/file/ensure_spec.rb +1 -2
  370. data/spec/unit/type/file/source_spec.rb +86 -35
  371. data/spec/unit/type/package_spec.rb +8 -0
  372. data/spec/unit/type/service_spec.rb +9 -8
  373. data/spec/unit/type/user_spec.rb +1 -2
  374. data/spec/unit/util/at_fork_spec.rb +3 -2
  375. data/spec/unit/util/autoload_spec.rb +2 -1
  376. data/spec/unit/util/log/destinations_spec.rb +1 -29
  377. data/spec/unit/util/log_spec.rb +0 -138
  378. data/spec/unit/util/logging_spec.rb +200 -0
  379. data/spec/unit/util/package/version/debian_spec.rb +83 -0
  380. data/spec/unit/util/package/version/pip_spec.rb +464 -0
  381. data/spec/unit/util/package/version/range_spec.rb +175 -0
  382. data/spec/unit/util/package/version/rpm_spec.rb +121 -0
  383. data/spec/unit/util/pidlock_spec.rb +112 -42
  384. data/spec/unit/util/plist_spec.rb +20 -0
  385. data/spec/unit/util/rpm_compare_spec.rb +196 -0
  386. data/spec/unit/util/storage_spec.rb +1 -8
  387. data/spec/unit/util/windows/adsi_spec.rb +55 -4
  388. data/spec/unit/util/windows/sid_spec.rb +2 -2
  389. data/spec/unit/x509/cert_provider_spec.rb +24 -4
  390. data/tasks/generate_cert_fixtures.rake +15 -1
  391. data/tasks/manpages.rake +6 -35
  392. metadata +92 -12
  393. data/COMMITTERS.md +0 -244
  394. data/spec/integration/faces/plugin_spec.rb +0 -61
  395. data/spec/lib/puppet_spec/validators.rb +0 -37
@@ -3,4 +3,38 @@ require 'puppet/indirector/rest'
3
3
 
4
4
  class Puppet::Resource::Catalog::Rest < Puppet::Indirector::REST
5
5
  desc "Find resource catalogs over HTTP via REST."
6
+
7
+ def find(request)
8
+ return super unless use_http_client?
9
+
10
+ checksum_type = if request.options[:checksum_type]
11
+ request.options[:checksum_type].split('.')
12
+ else
13
+ Puppet[:supported_checksum_types]
14
+ end
15
+
16
+ session = Puppet.lookup(:http_session)
17
+ api = session.route_to(:puppet)
18
+ _, catalog = api.post_catalog(
19
+ request.key,
20
+ facts: request.options[:facts_for_catalog],
21
+ environment: request.environment.to_s,
22
+ configured_environment: request.options[:configured_environment],
23
+ transaction_uuid: request.options[:transaction_uuid],
24
+ job_uuid: request.options[:job_id],
25
+ static_catalog: request.options[:static_catalog],
26
+ checksum_type: checksum_type
27
+ )
28
+ catalog
29
+ rescue Puppet::HTTP::ResponseError => e
30
+ if e.response.code == 404
31
+ return nil unless request.options[:fail_on_404]
32
+
33
+ _, body = parse_response(e.response.nethttp)
34
+ msg = _("Find %{uri} resulted in 404 with the message: %{body}") % { uri: elide(e.response.url.path, 100), body: body }
35
+ raise Puppet::Error, msg
36
+ else
37
+ raise convert_to_http_error(e.response.nethttp)
38
+ end
39
+ end
6
40
  end
@@ -4,9 +4,51 @@ require 'puppet/indirector/rest'
4
4
  class Puppet::Node::Facts::Rest < Puppet::Indirector::REST
5
5
  desc "Find and save facts about nodes over HTTP via REST."
6
6
 
7
+ def find(request)
8
+ return super unless use_http_client?
9
+
10
+ session = Puppet.lookup(:http_session)
11
+ api = session.route_to(:puppet)
12
+ _, facts = api.get_facts(
13
+ request.key,
14
+ environment: request.environment.to_s
15
+ )
16
+ facts
17
+ rescue Puppet::HTTP::ResponseError => e
18
+ if e.response.code == 404
19
+ return nil unless request.options[:fail_on_404]
20
+
21
+ _, body = parse_response(e.response.nethttp)
22
+ msg = _("Find %{uri} resulted in 404 with the message: %{body}") % { uri: elide(e.response.url.path, 100), body: body }
23
+ raise Puppet::Error, msg
24
+ else
25
+ raise convert_to_http_error(e.response.nethttp)
26
+ end
27
+ end
28
+
7
29
  def save(request)
8
30
  raise ArgumentError, _("PUT does not accept options") unless request.options.empty?
9
31
 
32
+ return legacy_save(request) unless use_http_client?
33
+
34
+ session = Puppet.lookup(:http_session)
35
+ api = session.route_to(:puppet)
36
+ api.put_facts(
37
+ request.key,
38
+ facts: request.instance,
39
+ environment: request.environment.to_s
40
+ )
41
+
42
+ # preserve existing behavior
43
+ nil
44
+ rescue Puppet::HTTP::ResponseError => e
45
+ # always raise even if fail_on_404 is false
46
+ raise convert_to_http_error(e.response.nethttp)
47
+ end
48
+
49
+ private
50
+
51
+ def legacy_save(request)
10
52
  response = do_request(request) do |req|
11
53
  http_put(req, IndirectedRoutes.request_to_uri(req), req.instance.render, headers.merge({ "Content-Type" => req.instance.mime }))
12
54
  end
@@ -250,7 +250,7 @@ module Puppet::FileBucketFile
250
250
  # @return [void]
251
251
  # @api private
252
252
  def copy_bucket_file_to_contents_file(contents_file, bucket_file)
253
- Puppet::Util.replace_file(contents_file, 0440) do |of|
253
+ Puppet::FileSystem.replace_file(contents_file, 0440) do |of|
254
254
  # PUP-1044 writes all of the contents
255
255
  bucket_file.stream() do |src|
256
256
  FileUtils.copy_stream(src, of)
@@ -4,5 +4,53 @@ require 'puppet/file_bucket/file'
4
4
  module Puppet::FileBucketFile
5
5
  class Rest < Puppet::Indirector::REST
6
6
  desc "This is a REST based mechanism to send/retrieve file to/from the filebucket"
7
+
8
+ def head(request)
9
+ return super unless use_http_client?
10
+
11
+ session = Puppet.lookup(:http_session)
12
+ api = session.route_to(:puppet)
13
+ api.head_filebucket_file(
14
+ request.key,
15
+ environment: request.environment.to_s,
16
+ bucket_path: request.options[:bucket_path],
17
+ )
18
+ rescue Puppet::HTTP::ResponseError => e
19
+ return nil if e.response.code == 404
20
+ raise convert_to_http_error(e.response.nethttp)
21
+ end
22
+
23
+ def find(request)
24
+ return super unless use_http_client?
25
+
26
+ session = Puppet.lookup(:http_session)
27
+ api = session.route_to(:puppet)
28
+ _, filebucket_file = api.get_filebucket_file(
29
+ request.key,
30
+ environment: request.environment.to_s,
31
+ bucket_path: request.options[:bucket_path],
32
+ diff_with: request.options[:diff_with],
33
+ list_all: request.options[:list_all],
34
+ fromdate: request.options[:fromdate],
35
+ todate: request.options[:todate],
36
+ )
37
+ filebucket_file
38
+ rescue Puppet::HTTP::ResponseError => e
39
+ raise convert_to_http_error(e.response.nethttp)
40
+ end
41
+
42
+ def save(request)
43
+ return super unless use_http_client?
44
+
45
+ session = Puppet.lookup(:http_session)
46
+ api = session.route_to(:puppet)
47
+ api.put_filebucket_file(
48
+ request.key,
49
+ body: request.instance.render,
50
+ environment: request.environment.to_s,
51
+ )
52
+ rescue Puppet::HTTP::ResponseError => e
53
+ raise convert_to_http_error(e.response.nethttp)
54
+ end
7
55
  end
8
56
  end
@@ -10,6 +10,11 @@ class Puppet::Indirector::FileContent::Http < Puppet::Indirector::GenericHttp
10
10
 
11
11
  @http_method = :get
12
12
 
13
+ def initialize
14
+ Puppet.deprecation_warning(_("Puppet::Indirector::FileContent::Http is deprecated. Use Puppet::HTTP::Client instead."))
15
+ super
16
+ end
17
+
13
18
  def find(request)
14
19
  response = super
15
20
  model.from_binary(uncompress_body(response))
@@ -6,4 +6,34 @@ class Puppet::Indirector::FileContent::Rest < Puppet::Indirector::REST
6
6
  desc "Retrieve file contents via a REST HTTP interface."
7
7
 
8
8
  use_srv_service(:fileserver)
9
+
10
+ def find(request)
11
+ return super unless use_http_client?
12
+
13
+ content = StringIO.new
14
+ content.binmode
15
+
16
+ url = URI.parse(Puppet::Util.uri_encode(request.uri))
17
+ session = Puppet.lookup(:http_session)
18
+ api = session.route_to(:fileserver, url: url)
19
+
20
+ api.get_file_content(
21
+ path: URI.unescape(url.path),
22
+ environment: request.environment.to_s,
23
+ ) do |data|
24
+ content << data
25
+ end
26
+
27
+ Puppet::FileServing::Content.from_binary(content.string)
28
+ rescue Puppet::HTTP::ResponseError => e
29
+ if e.response.code == 404
30
+ return nil unless request.options[:fail_on_404]
31
+
32
+ _, body = parse_response(e.response.nethttp)
33
+ msg = _("Find %{uri} resulted in 404 with the message: %{body}") % { uri: elide(e.response.url.path, 100), body: body }
34
+ raise Puppet::Error, msg
35
+ else
36
+ raise convert_to_http_error(e.response.nethttp)
37
+ end
38
+ end
9
39
  end
@@ -8,12 +8,12 @@ class Puppet::Indirector::FileMetadata::Http < Puppet::Indirector::GenericHttp
8
8
 
9
9
  include Puppet::FileServing::TerminusHelper
10
10
 
11
- @http_method = :head
12
-
13
11
  def find(request)
14
- head = super
12
+ uri = URI(request.uri)
13
+ client = Puppet.runtime[:http]
14
+ head = client.head(uri, options: {include_system_store: true})
15
15
 
16
- if head.is_a?(Net::HTTPSuccess)
16
+ if head.success?
17
17
  metadata = Puppet::FileServing::HttpMetadata.new(head)
18
18
  metadata.checksum_type = request.options[:checksum_type] if request.options[:checksum_type]
19
19
  metadata.collect
@@ -6,4 +6,56 @@ class Puppet::Indirector::FileMetadata::Rest < Puppet::Indirector::REST
6
6
  desc "Retrieve file metadata via a REST HTTP interface."
7
7
 
8
8
  use_srv_service(:fileserver)
9
+
10
+ def find(request)
11
+ return super unless use_http_client?
12
+
13
+ url = URI.parse(Puppet::Util.uri_encode(request.uri))
14
+ session = Puppet.lookup(:http_session)
15
+ api = session.route_to(:fileserver, url: url)
16
+
17
+ _, file_metadata = api.get_file_metadata(
18
+ path: URI.unescape(url.path),
19
+ environment: request.environment.to_s,
20
+ links: request.options[:links],
21
+ checksum_type: request.options[:checksum_type],
22
+ source_permissions: request.options[:source_permissions]
23
+ )
24
+ file_metadata
25
+ rescue Puppet::HTTP::ResponseError => e
26
+ if e.response.code == 404
27
+ return nil unless request.options[:fail_on_404]
28
+
29
+ _, body = parse_response(e.response.nethttp)
30
+ msg = _("Find %{uri} resulted in 404 with the message: %{body}") % { uri: elide(e.response.url.path, 100), body: body }
31
+ raise Puppet::Error, msg
32
+ else
33
+ raise convert_to_http_error(e.response.nethttp)
34
+ end
35
+ end
36
+
37
+ def search(request)
38
+ return super unless use_http_client?
39
+
40
+ url = URI.parse(Puppet::Util.uri_encode(request.uri))
41
+ session = Puppet.lookup(:http_session)
42
+ api = session.route_to(:fileserver, url: url)
43
+
44
+ _, file_metadatas = api.get_file_metadatas(
45
+ path: URI.unescape(url.path),
46
+ environment: request.environment.to_s,
47
+ recurse: request.options[:recurse],
48
+ recurselimit: request.options[:recurselimit],
49
+ ignore: request.options[:ignore],
50
+ links: request.options[:links],
51
+ checksum_type: request.options[:checksum_type],
52
+ source_permissions: request.options[:source_permissions],
53
+ )
54
+ file_metadatas
55
+ rescue Puppet::HTTP::ResponseError => e
56
+ # since it's search, return empty array instead of nil
57
+ return [] if e.response.code == 404
58
+
59
+ raise convert_to_http_error(e.response.nethttp)
60
+ end
9
61
  end
@@ -14,7 +14,7 @@ class Puppet::Indirector::JSON < Puppet::Indirector::Terminus
14
14
  filename = path(request.key)
15
15
  FileUtils.mkdir_p(File.dirname(filename))
16
16
 
17
- Puppet::Util.replace_file(filename, 0660) {|f| f.print to_json(request.instance).force_encoding(Encoding::BINARY) }
17
+ Puppet::FileSystem.replace_file(filename, 0660) {|f| f.print to_json(request.instance).force_encoding(Encoding::BINARY) }
18
18
  rescue TypeError => detail
19
19
  Puppet.log_exception(detail, _("Could not save %{json} %{request}: %{detail}") % { json: self.name, request: request.key, detail: detail })
20
20
  end
@@ -21,7 +21,7 @@ class Puppet::Indirector::Msgpack < Puppet::Indirector::Terminus
21
21
  filename = path(request.key)
22
22
  FileUtils.mkdir_p(File.dirname(filename))
23
23
 
24
- Puppet::Util.replace_file(filename, 0660) {|f| f.print to_msgpack(request.instance) }
24
+ Puppet::FileSystem.replace_file(filename, 0660) {|f| f.print to_msgpack(request.instance) }
25
25
  rescue TypeError => detail
26
26
  Puppet.log_exception(detail, _("Could not save %{name} %{request}: %{detail}") % { name: self.name, request: request.key, detail: detail })
27
27
  end
@@ -4,4 +4,28 @@ require 'puppet/indirector/rest'
4
4
  class Puppet::Node::Rest < Puppet::Indirector::REST
5
5
  desc "Get a node via REST. Puppet agent uses this to allow the puppet master
6
6
  to override its environment."
7
+
8
+ def find(request)
9
+ return super unless use_http_client?
10
+
11
+ session = Puppet.lookup(:http_session)
12
+ api = session.route_to(:puppet)
13
+ _, node = api.get_node(
14
+ request.key,
15
+ environment: request.environment.to_s,
16
+ configured_environment: request.options[:configured_environment],
17
+ transaction_uuid: request.options[:transaction_uuid]
18
+ )
19
+ node
20
+ rescue Puppet::HTTP::ResponseError => e
21
+ if e.response.code == 404
22
+ return nil unless request.options[:fail_on_404]
23
+
24
+ _, body = parse_response(e.response.nethttp)
25
+ msg = _("Find %{uri} resulted in 404 with the message: %{body}") % { uri: elide(e.response.url.path, 100), body: body }
26
+ raise Puppet::Error, msg
27
+ else
28
+ raise convert_to_http_error(e.response.nethttp)
29
+ end
30
+ end
7
31
  end
@@ -7,6 +7,25 @@ class Puppet::Transaction::Report::Rest < Puppet::Indirector::REST
7
7
  use_port_setting(:report_port)
8
8
  use_srv_service(:report)
9
9
 
10
+ def save(request)
11
+ return super unless use_http_client?
12
+
13
+ session = Puppet.lookup(:http_session)
14
+ api = session.route_to(:report)
15
+ response = api.put_report(
16
+ request.key,
17
+ request.instance,
18
+ environment: request.environment.to_s
19
+ )
20
+ content_type, body = parse_response(response)
21
+ deserialize_save(content_type, body)
22
+ rescue Puppet::HTTP::ResponseError => e
23
+ return nil if e.response.code == 404
24
+
25
+ raise convert_to_http_error(e.response.nethttp)
26
+ end
27
+
28
+ # This is called by the superclass when not using our httpclient.
10
29
  def handle_response(request, response)
11
30
  if !response.is_a?(Net::HTTPSuccess)
12
31
  server_version = response[Puppet::Network::HTTP::HEADER_PUPPET_VERSION]
@@ -2,10 +2,33 @@ require 'puppet/transaction/report'
2
2
  require 'puppet/indirector/yaml'
3
3
 
4
4
  class Puppet::Transaction::Report::Yaml < Puppet::Indirector::Yaml
5
+ include Puppet::Util::SymbolicFileMode
6
+
5
7
  desc "Store last report as a flat file, serialized using YAML."
6
8
 
7
9
  # Force report to be saved there
8
10
  def path(name,ext='.yaml')
9
11
  Puppet[:lastrunreport]
10
12
  end
13
+
14
+ def save(request)
15
+ filename = path(request.key)
16
+ mode = Puppet.settings.setting(:lastrunreport).mode
17
+
18
+ unless valid_symbolic_mode?(mode)
19
+ raise Puppet::DevError, _("replace_file mode: %{mode} is invalid") % { mode: mode }
20
+ end
21
+
22
+ mode = symbolic_mode_to_int(normalize_symbolic_mode(mode))
23
+
24
+ FileUtils.mkdir_p(File.dirname(filename))
25
+
26
+ begin
27
+ Puppet::FileSystem.replace_file(filename, mode) do |fh|
28
+ fh.print YAML.dump(request.instance)
29
+ end
30
+ rescue TypeError => detail
31
+ Puppet.err _("Could not save %{indirection} %{request}: %{detail}") % { indirection: self.name, request: request.key, detail: detail }
32
+ end
33
+ end
11
34
  end
@@ -52,6 +52,13 @@ class Puppet::Indirector::REST < Puppet::Indirector::Terminus
52
52
  Puppet::Util::Connection.determine_port(port_setting, server_setting)
53
53
  end
54
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
+
55
62
  # Provide appropriate headers.
56
63
  def headers
57
64
  # yaml is not allowed on the network
@@ -105,6 +112,7 @@ class Puppet::Indirector::REST < Puppet::Indirector::Terminus
105
112
  end
106
113
 
107
114
  def find(request)
115
+ Puppet.deprecation_warning(_("Puppet::Indirector::Rest#find is deprecated. Use Puppet::HTTP::Client instead."))
108
116
  uri, body = IndirectedRoutes.request_to_uri_and_body(request)
109
117
  uri_with_query_string = "#{uri}?#{body}"
110
118
 
@@ -143,6 +151,7 @@ class Puppet::Indirector::REST < Puppet::Indirector::Terminus
143
151
  end
144
152
 
145
153
  def head(request)
154
+ Puppet.deprecation_warning(_("Puppet::Indirector::Rest#head is deprecated. Use Puppet::HTTP::Client instead."))
146
155
  response = do_request(request) do |req|
147
156
  http_head(req, IndirectedRoutes.request_to_uri(req), headers)
148
157
  end
@@ -155,6 +164,7 @@ class Puppet::Indirector::REST < Puppet::Indirector::Terminus
155
164
  end
156
165
 
157
166
  def search(request)
167
+ Puppet.deprecation_warning(_("Puppet::Indirector::Rest#search is deprecated. Use Puppet::HTTP::Client instead."))
158
168
  response = do_request(request) do |req|
159
169
  http_get(req, IndirectedRoutes.request_to_uri(req), headers)
160
170
  end
@@ -168,6 +178,7 @@ class Puppet::Indirector::REST < Puppet::Indirector::Terminus
168
178
  end
169
179
 
170
180
  def destroy(request)
181
+ Puppet.deprecation_warning(_("Puppet::Indirector::Rest#destroy is deprecated. Use Puppet::HTTP::Client instead."))
171
182
  raise ArgumentError, _("DELETE does not accept options") unless request.options.empty?
172
183
 
173
184
  response = do_request(request) do |req|
@@ -183,6 +194,7 @@ class Puppet::Indirector::REST < Puppet::Indirector::Terminus
183
194
  end
184
195
 
185
196
  def save(request)
197
+ Puppet.deprecation_warning(_("Puppet::Indirector::Rest#save is deprecated. Use Puppet::HTTP::Client instead."))
186
198
  raise ArgumentError, _("PUT does not accept options") unless request.options.empty?
187
199
 
188
200
  response = do_request(request) do |req|
@@ -6,4 +6,22 @@ class Puppet::Indirector::Status::Rest < Puppet::Indirector::REST
6
6
  desc "Get puppet master's status via REST. Useful because it tests the health
7
7
  of both the web server and the indirector."
8
8
 
9
+ def find(request)
10
+ return super unless use_http_client?
11
+
12
+ session = Puppet.lookup(:http_session)
13
+ api = session.route_to(:puppet)
14
+ _, status = api.get_status(request.key)
15
+ status
16
+ rescue Puppet::HTTP::ResponseError => e
17
+ if e.response.code == 404
18
+ return nil unless request.options[:fail_on_404]
19
+
20
+ _, body = parse_response(e.response.nethttp)
21
+ msg = _("Find %{uri} resulted in 404 with the message: %{body}") % { uri: elide(e.response.url.path, 100), body: body }
22
+ raise Puppet::Error, msg
23
+ else
24
+ raise convert_to_http_error(e.response.nethttp)
25
+ end
26
+ end
9
27
  end