puppet 6.11.1 → 6.16.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 (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
@@ -217,13 +217,13 @@ class Puppet::Transaction::Report
217
217
  end
218
218
 
219
219
  # @api private
220
- def initialize(configuration_version=nil, environment=nil, transaction_uuid=nil, job_id=nil)
220
+ def initialize(configuration_version=nil, environment=nil, transaction_uuid=nil, job_id=nil, start_time=Time.now)
221
221
  @metrics = {}
222
222
  @logs = []
223
223
  @resource_statuses = {}
224
224
  @external_times ||= {}
225
225
  @host = Puppet[:node_name_value]
226
- @time = Time.now
226
+ @time = start_time
227
227
  @report_format = 10
228
228
  @puppet_version = Puppet.version
229
229
  @configuration_version = configuration_version
@@ -101,7 +101,7 @@ class Puppet::Transaction::ResourceHarness
101
101
  # We persist the last known values for the properties of a resource after resource
102
102
  # application.
103
103
  # @param [Puppet::Type] resource resource whose values we are to persist.
104
- # @param [ResourceApplicationContent] context the application context to operate on.
104
+ # @param [ResourceApplicationContext] context the application context to operate on.
105
105
  def persist_system_values(resource, context)
106
106
  param_to_event = {}
107
107
  context.status.events.each do |ev|
@@ -10,6 +10,7 @@ require 'puppet/metatype/manager'
10
10
  require 'puppet/util/errors'
11
11
  require 'puppet/util/logging'
12
12
  require 'puppet/util/tagging'
13
+ require 'puppet/concurrent/lock'
13
14
 
14
15
  # see the bottom of the file for the rest of the inclusions
15
16
 
@@ -84,6 +85,11 @@ class Type
84
85
  # Comparing type instances.
85
86
  include Comparable
86
87
 
88
+ # These variables are used in Metatype::Manager for managing types
89
+ @types = {}
90
+ @manager_lock = Puppet::Concurrent::Lock.new
91
+ extend Puppet::MetaType::Manager
92
+
87
93
  # Compares this type against the given _other_ (type) and returns -1, 0, or +1 depending on the order.
88
94
  # @param other [Object] the object to compare against (produces nil, if not kind of Type}
89
95
  # @return [-1, 0, +1, nil] produces -1 if this type is before the given _other_ type, 0 if equals, and 1 if after.
@@ -1486,7 +1492,7 @@ class Type
1486
1492
  }
1487
1493
 
1488
1494
  Tags are useful for things like applying a subset of a host's configuration
1489
- with [the `tags` setting](/puppet/latest/configuration.html#tags)
1495
+ with [the `tags` setting](https://puppet.com/docs/puppet/latest/configuration.html#tags)
1490
1496
  (e.g. `puppet agent --test --tags bootstrap`)."
1491
1497
 
1492
1498
  munge do |tags|
@@ -2284,7 +2290,6 @@ end
2284
2290
  #
2285
2291
  attr_accessor :self_refresh
2286
2292
  include Enumerable, Puppet::Util::ClassGen
2287
- include Puppet::MetaType::Manager
2288
2293
 
2289
2294
  include Puppet::Util
2290
2295
  include Puppet::Util::Logging
@@ -110,6 +110,19 @@ Puppet::Type.newtype(:file) do
110
110
  balancer to direct all filebucket traffic to a single master, or use
111
111
  something like an out-of-band rsync task to synchronize the content on all
112
112
  masters.
113
+
114
+ > **Note**: Enabling and using the backup option, and by extension the
115
+ filebucket resource, requires appropriate planning and management to ensure
116
+ that sufficient disk space is available for the file backups. Generally, you
117
+ can implement this using one of the following two options:
118
+ - Use a `find` command and `crontab` entry to retain only the last X days
119
+ of file backups. For example,
120
+
121
+ ```shell script
122
+ find /opt/puppetlabs/server/data/puppetserver/bucket -type f -mtime +45 -atime +45 -print0 | xargs -0 rm
123
+ ```
124
+
125
+ - Restrict the directory to a maximum size after which the oldest items are removed.
113
126
  EOT
114
127
 
115
128
  defaultto "puppet"
@@ -42,7 +42,11 @@ module Puppet
42
42
  send resource[:loglevel], "[diff redacted]"
43
43
  else
44
44
  write_temporarily(param) do |path|
45
- send resource[:loglevel], "\n" + diff(resource[:path], path)
45
+ diff_output = diff(resource[:path], path)
46
+ if diff_output.encoding == Encoding::BINARY || !diff_output.valid_encoding?
47
+ diff_output = "Binary files #{resource[:path]} and #{path} differ"
48
+ end
49
+ send resource[:loglevel], "\n" + diff_output
46
50
  end
47
51
  end
48
52
  end
@@ -2,10 +2,7 @@ require 'puppet/file_serving/content'
2
2
  require 'puppet/file_serving/metadata'
3
3
  require 'puppet/file_serving/terminus_helper'
4
4
 
5
- require 'puppet/util/http_proxy'
6
- require 'puppet/network/http'
7
- require 'puppet/network/http/api/indirected_routes'
8
- require 'puppet/network/http/compression'
5
+ require 'puppet/http'
9
6
 
10
7
  module Puppet
11
8
  # Copy files from a local or remote source. This state *only* does any work
@@ -14,11 +11,6 @@ module Puppet
14
11
  # this state, during retrieval, modifies the appropriate other states
15
12
  # so that things get taken care of appropriately.
16
13
  Puppet::Type.type(:file).newparam(:source) do
17
- include Puppet::Network::HTTP::Compression.module
18
-
19
- BINARY_MIME_TYPES = [
20
- Puppet::Network::FormatHandler.format_for('binary').mime
21
- ].join(', ').freeze
22
14
 
23
15
  attr_accessor :source, :local
24
16
  desc <<-'EOT'
@@ -55,6 +47,8 @@ module Puppet
55
47
  The `http` source uses the server `Content-MD5` header as a checksum to
56
48
  determine if the remote file has changed. If the server response does not
57
49
  include that header, Puppet defaults to using the `Last-Modified` header.
50
+ Puppet will update the local file if the header is newer than the modified
51
+ time (mtime) of the local file.
58
52
 
59
53
  Multiple `source` values can be specified as an array, and Puppet will
60
54
  use the first source that exists. This can be used to serve different
@@ -129,18 +123,6 @@ module Puppet
129
123
  metadata && metadata.checksum
130
124
  end
131
125
 
132
- # Look up (if necessary) and return local content.
133
- def content
134
- return @content if @content
135
- raise Puppet::DevError, _("No source for content was stored with the metadata") unless metadata.source
136
-
137
- tmp = Puppet::FileServing::Content.indirection.find(metadata.source, :environment => resource.catalog.environment_instance, :links => resource[:links])
138
- unless tmp
139
- self.fail "Could not find any content at %s" % metadata.source
140
- end
141
- @content = tmp.content
142
- end
143
-
144
126
  # Copy the values from the source to the resource. Yay.
145
127
  def copy_source_values
146
128
  devfail "Somehow got asked to copy source values without any metadata" unless metadata
@@ -273,63 +255,72 @@ module Puppet
273
255
  end
274
256
  end
275
257
 
276
- def each_chunk_from
277
- if Puppet[:default_file_terminus] == :file_server
278
- yield content
258
+ def each_chunk_from(&block)
259
+ if Puppet[:default_file_terminus] == :file_server && scheme == 'puppet' && (uri.host.nil? || uri.host.empty?)
260
+ chunk_file_from_disk(metadata.full_path, &block)
279
261
  elsif local?
280
- chunk_file_from_disk { |chunk| yield chunk }
262
+ chunk_file_from_disk(full_path, &block)
281
263
  else
282
- chunk_file_from_source { |chunk| yield chunk }
264
+ chunk_file_from_source(&block)
283
265
  end
284
266
  end
285
267
 
286
- def chunk_file_from_disk
287
- File.open(full_path, "rb") do |src|
268
+ def chunk_file_from_disk(local_path)
269
+ File.open(local_path, "rb") do |src|
288
270
  while chunk = src.read(8192) #rubocop:disable Lint/AssignmentInCondition
289
271
  yield chunk
290
272
  end
291
273
  end
292
274
  end
293
275
 
294
- def get_from_puppet_source(source_uri, content_uri, &block)
295
- options = { :environment => resource.catalog.environment_instance }
296
- if content_uri
297
- options[:code_id] = resource.catalog.code_id
298
- request = Puppet::Indirector::Request.new(:static_file_content, :find, content_uri, nil, options)
299
- else
300
- request = Puppet::Indirector::Request.new(:file_content, :find, source_uri, nil, options)
301
- end
276
+ def get_from_content_uri_source(url, &block)
277
+ session = Puppet.lookup(:http_session)
278
+ api = session.route_to(:fileserver, url: url)
302
279
 
303
- request.do_request(:fileserver) do |req|
304
- ssl_context = Puppet.lookup(:ssl_context)
305
- connection = Puppet::Network::HttpPool.connection(req.server, req.port, ssl_context: ssl_context)
306
- connection.request_get(Puppet::Network::HTTP::API::IndirectedRoutes.request_to_uri(req), add_accept_encoding({"Accept" => BINARY_MIME_TYPES}), &block)
307
- end
280
+ api.get_static_file_content(
281
+ path: URI.unescape(url.path),
282
+ environment: resource.catalog.environment_instance.to_s,
283
+ code_id: resource.catalog.code_id,
284
+ &block
285
+ )
308
286
  end
309
287
 
310
- def get_from_http_source(source_uri, &block)
311
- Puppet::Util::HttpProxy.request_with_redirects(URI(source_uri), :get, &block)
288
+ def get_from_source_uri_source(url, &block)
289
+ session = Puppet.lookup(:http_session)
290
+ api = session.route_to(:fileserver, url: url)
291
+
292
+ api.get_file_content(
293
+ path: URI.unescape(url.path),
294
+ environment: resource.catalog.environment_instance.to_s,
295
+ &block
296
+ )
312
297
  end
313
298
 
314
- def get_from_source(&block)
315
- source_uri = metadata.source
316
- if source_uri =~ /^https?:/
317
- get_from_http_source(source_uri, &block)
318
- else
319
- get_from_puppet_source(source_uri, metadata.content_uri, &block)
299
+ def get_from_http_source(url, &block)
300
+ client = Puppet.runtime[:http]
301
+ client.get(url, options: {include_system_store: true}) do |response|
302
+ raise Puppet::HTTP::ResponseError.new(response) unless response.success?
303
+
304
+ response.read_body(&block)
320
305
  end
321
306
  end
322
307
 
323
- def chunk_file_from_source
324
- get_from_source do |response|
325
- case response.code
326
- when /^2/; uncompress(response) { |uncompressor| response.read_body { |chunk| yield uncompressor.uncompress(chunk) } }
327
- else
328
- # Raise the http error if we didn't get a 'success' of some kind.
329
- message = "Error #{response.code} on SERVER: #{(response.body||'').empty? ? response.message : uncompress_body(response)}"
330
- raise Net::HTTPError.new(message, response)
331
- end
308
+ def chunk_file_from_source(&block)
309
+ if uri.scheme =~ /^https?/
310
+ get_from_http_source(uri, &block)
311
+ elsif metadata.content_uri
312
+ content_url = URI.parse(Puppet::Util.uri_encode(metadata.content_uri))
313
+ get_from_content_uri_source(content_url, &block)
314
+ else
315
+ get_from_source_uri_source(uri, &block)
332
316
  end
317
+ rescue Puppet::HTTP::ResponseError => e
318
+ handle_response_error(e.response)
319
+ end
320
+
321
+ def handle_response_error(response)
322
+ message = "Error #{response.code} on SERVER: #{response.body.empty? ? response.reason : response.body}"
323
+ raise Net::HTTPError.new(message, response.nethttp)
333
324
  end
334
325
  end
335
326
 
@@ -22,7 +22,7 @@ module Puppet
22
22
  feature :system_groups,
23
23
  "The provider allows you to create system groups with lower GIDs."
24
24
 
25
- feature :libuser,
25
+ feature :manages_local_users_and_groups,
26
26
  "Allows local groups to be managed on systems that also use some other
27
27
  remote Name Switch Service (NSS) method of managing accounts."
28
28
 
@@ -175,7 +175,8 @@ module Puppet
175
175
  end
176
176
 
177
177
  newparam(:ia_load_module, :required_features => :manages_aix_lam) do
178
- desc "The name of the I&A module to use to manage this user"
178
+ desc "The name of the I&A module to use to manage this group.
179
+ This should be set to `files` if managing local groups."
179
180
  end
180
181
 
181
182
  newproperty(:attributes, :parent => Puppet::Property::KeyValue, :required_features => :manages_aix_lam) do
@@ -213,10 +214,10 @@ module Puppet
213
214
  end
214
215
 
215
216
  newparam(:forcelocal, :boolean => true,
216
- :required_features => :libuser,
217
+ :required_features => :manages_local_users_and_groups,
217
218
  :parent => Puppet::Parameter::Boolean) do
218
219
  desc "Forces the management of local accounts when accounts are also
219
- being managed by some other Name Switch Service (NSS).
220
+ being managed by some other Name Switch Service (NSS). For AIX, refer to the `ia_load_module` parameter.
220
221
 
221
222
  This option relies on your operating system's implementation of `luser*` commands, such as `luseradd` , `lgroupadd`, and `lusermod`. The `forcelocal` option could behave unpredictably in some circumstances. If the tools it depends on are not available, it might have no effect at all."
222
223
  defaultto false
@@ -51,17 +51,21 @@ module Puppet
51
51
  package database for installed version(s), and can select
52
52
  which out of a set of available versions of a package to
53
53
  install if asked."
54
+ feature :version_ranges, "The provider can ensure version ranges."
54
55
  feature :holdable, "The provider is capable of placing packages on hold
55
56
  such that they are not automatically upgraded as a result of
56
57
  other package dependencies unless explicit action is taken by
57
- a user or another package. Held is considered a superset of
58
- installed.",
59
- :methods => [:hold]
58
+ a user or another package.",
59
+ :methods => [:hold, :unhold]
60
60
  feature :install_only, "The provider accepts options to only install packages never update (kernels, etc.)"
61
61
  feature :install_options, "The provider accepts options to be
62
62
  passed to the installer command."
63
63
  feature :uninstall_options, "The provider accepts options to be
64
64
  passed to the uninstaller command."
65
+ feature :disableable, "The provider can disable packages. This feature is used by specifying `disabled` as the
66
+ desired value for the package.",
67
+ :methods => [:disable]
68
+ feature :supports_flavors, "The provider accepts flavors, which are specific variants of packages."
65
69
  feature :package_settings, "The provider accepts package_settings to be
66
70
  ensured for the given package. The meaning and format of these settings is
67
71
  provider-specific.",
@@ -80,10 +84,12 @@ module Puppet
80
84
  specifying `purged` as the ensure value. This defaults to `installed`.
81
85
 
82
86
  Version numbers must match the full version to install, including
83
- release if the provider uses a release moniker. Ranges or semver
84
- patterns are not accepted except for the `gem` package provider. For
87
+ release if the provider uses a release moniker. For
85
88
  example, to install the bash package from the rpm
86
89
  `bash-4.1.2-29.el6.x86_64.rpm`, use the string `'4.1.2-29.el6'`.
90
+
91
+ On supported providers, version ranges can also be ensured. For example,
92
+ inequalities: `<2.0.0`, or intersections: `>1.0.0 <2.0.0`.
87
93
  EOT
88
94
 
89
95
  attr_accessor :latest
@@ -101,7 +107,11 @@ module Puppet
101
107
  end
102
108
 
103
109
  newvalue(:held, :event => :package_held, :required_features => :holdable) do
104
- provider.hold
110
+ provider.deprecated_hold
111
+ end
112
+
113
+ newvalue(:disabled, :required_features => :disableable) do
114
+ provider.disable
105
115
  end
106
116
 
107
117
  # Alias the 'present' value.
@@ -151,7 +161,7 @@ module Puppet
151
161
  @should.each { |should|
152
162
  case should
153
163
  when :present
154
- return true unless [:absent, :purged, :held].include?(is)
164
+ return true unless [:absent, :purged, :held, :disabled].include?(is)
155
165
  when :latest
156
166
  # Short-circuit packages that are not present
157
167
  return false if is == :absent || is == :purged
@@ -405,6 +415,16 @@ module Puppet
405
415
  end
406
416
  end
407
417
 
418
+ newproperty(:flavor, :required_features => :supports_flavors) do
419
+ desc "OpenBSD and DNF modules support 'flavors', which are
420
+ further specifications for which type of package you want."
421
+ validate do |value|
422
+ if [:disabled, "disabled"].include?(@resource[:ensure]) && value
423
+ raise ArgumentError, _('Cannot have both `ensure => disabled` and `flavor`')
424
+ end
425
+ end
426
+ end
427
+
408
428
  newparam(:source) do
409
429
  desc "Where to find the package file. This is only used by providers that don't
410
430
  automatically download packages from a central repository. (For example:
@@ -484,9 +504,27 @@ module Puppet
484
504
  newvalues(:true, :false)
485
505
  end
486
506
 
487
- newparam(:flavor) do
488
- desc "OpenBSD and DNF modules support 'flavors', which are
489
- further specifications for which type of package you want."
507
+ newparam(:enable_only, :boolean => false, :parent => Puppet::Parameter::Boolean) do
508
+ desc <<-EOT
509
+ Tells `dnf module` to only enable a specific module, instead
510
+ of installing its default profile.
511
+
512
+ Modules with no default profile will be enabled automatically
513
+ without the use of this parameter.
514
+
515
+ Conflicts with the `flavor` property, which selects a profile
516
+ to install.
517
+ EOT
518
+ defaultto false
519
+
520
+ validate do |value|
521
+ if [true, :true, "true"].include?(value) && @resource[:flavor]
522
+ raise ArgumentError, _('Cannot have both `enable_only => true` and `flavor`')
523
+ end
524
+ if [:disabled, "disabled"].include?(@resource[:ensure])
525
+ raise ArgumentError, _('Cannot have both `ensure => disabled` and `enable_only => true`')
526
+ end
527
+ end
490
528
  end
491
529
 
492
530
  newparam(:install_only, :boolean => false, :parent => Puppet::Parameter::Boolean, :required_features => :install_only) do
@@ -625,5 +663,59 @@ module Puppet
625
663
  provider.reinstall
626
664
  end
627
665
  end
666
+
667
+ newproperty(:mark, :required_features => :holdable) do
668
+ mark_doc='Valid values are: hold/none'
669
+ desc <<-EOT
670
+ Set to hold to tell Debian apt/Solaris pkg to hold the package version
671
+
672
+ #{mark_doc}
673
+ Default is "none". Mark can be specified with or without `ensure`,
674
+ if `ensure` is missing will default to "present".
675
+
676
+ Mark cannot be specified together with "purged", "absent" or "held"
677
+ values for `ensure`.
678
+ EOT
679
+ newvalues(:hold, :none)
680
+ munge do |value|
681
+ case value
682
+ when "hold", :hold
683
+ :hold
684
+ when "none", :none
685
+ :none
686
+ else
687
+ raise ArgumentError, _('Invalid hold value %{value}. %{doc}') % { value: value.inspect, doc: mark_doc}
688
+ end
689
+ end
690
+
691
+ def insync?(is)
692
+ @should[0] == is
693
+ end
694
+
695
+ def should
696
+ @should[0] if @should && @should.is_a?(Array) && @should.size == 1
697
+ end
698
+
699
+ def retrieve
700
+ provider.properties[:mark]
701
+ end
702
+
703
+ def sync
704
+ if @should[0] == :hold
705
+ provider.hold
706
+ else
707
+ provider.unhold
708
+ end
709
+ end
710
+ end
711
+
712
+ validate do
713
+ if :held == @parameters[:ensure].should
714
+ warning '"ensure=>held" has been deprecated and will be removed in a future version, use "mark=hold" instead'
715
+ end
716
+ if @parameters[:mark] && [:absent, :purged, :held].include?(@parameters[:ensure].should)
717
+ raise ArgumentError, _('You cannot use "mark" property while "ensure" is one of ["absent", "purged", "held"]')
718
+ end
719
+ end
628
720
  end
629
721
  end