puppet 6.14.0-x86-mingw32 → 6.19.0-x86-mingw32

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

Potentially problematic release.


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

Files changed (496) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -7
  3. data/Gemfile +4 -2
  4. data/Gemfile.lock +36 -34
  5. data/README.md +3 -4
  6. data/Rakefile +4 -12
  7. data/ext/windows/service/daemon.rb +3 -3
  8. data/lib/puppet.rb +33 -9
  9. data/lib/puppet/agent.rb +20 -14
  10. data/lib/puppet/agent/locker.rb +0 -7
  11. data/lib/puppet/application/agent.rb +25 -9
  12. data/lib/puppet/application/apply.rb +18 -20
  13. data/lib/puppet/application/device.rb +1 -1
  14. data/lib/puppet/application/doc.rb +1 -1
  15. data/lib/puppet/application/filebucket.rb +5 -14
  16. data/lib/puppet/application/lookup.rb +16 -4
  17. data/lib/puppet/application/plugin.rb +1 -0
  18. data/lib/puppet/application/ssl.rb +3 -3
  19. data/lib/puppet/configurer.rb +68 -24
  20. data/lib/puppet/configurer/downloader.rb +31 -10
  21. data/lib/puppet/configurer/plugin_handler.rb +1 -1
  22. data/lib/puppet/confine.rb +2 -2
  23. data/lib/puppet/confine/any.rb +1 -1
  24. data/lib/puppet/context/trusted_information.rb +14 -8
  25. data/lib/puppet/daemon.rb +13 -27
  26. data/lib/puppet/defaults.rb +141 -41
  27. data/lib/puppet/environments.rb +55 -15
  28. data/lib/puppet/face/catalog.rb +1 -1
  29. data/lib/puppet/face/config.rb +46 -16
  30. data/lib/puppet/face/facts.rb +1 -1
  31. data/lib/puppet/face/help.rb +29 -3
  32. data/lib/puppet/face/module/search.rb +5 -0
  33. data/lib/puppet/face/node.rb +3 -3
  34. data/lib/puppet/face/node/clean.rb +2 -2
  35. data/lib/puppet/face/plugin.rb +2 -2
  36. data/lib/puppet/face/status.rb +1 -1
  37. data/lib/puppet/feature/base.rb +1 -1
  38. data/lib/puppet/file_bucket/dipper.rb +1 -1
  39. data/lib/puppet/file_serving/http_metadata.rb +14 -2
  40. data/lib/puppet/file_serving/metadata.rb +4 -1
  41. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  42. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  43. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  44. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  45. data/lib/puppet/file_system/file_impl.rb +17 -13
  46. data/lib/puppet/file_system/uniquefile.rb +12 -16
  47. data/lib/puppet/forge.rb +1 -1
  48. data/lib/puppet/forge/cache.rb +1 -1
  49. data/lib/puppet/forge/repository.rb +4 -7
  50. data/lib/puppet/functions/call.rb +1 -1
  51. data/lib/puppet/functions/filter.rb +1 -0
  52. data/lib/puppet/functions/lstrip.rb +4 -4
  53. data/lib/puppet/functions/new.rb +8 -3
  54. data/lib/puppet/functions/reduce.rb +2 -4
  55. data/lib/puppet/functions/reverse_each.rb +1 -1
  56. data/lib/puppet/functions/rstrip.rb +4 -4
  57. data/lib/puppet/functions/step.rb +1 -1
  58. data/lib/puppet/functions/strip.rb +4 -4
  59. data/lib/puppet/gettext/config.rb +5 -5
  60. data/lib/puppet/gettext/module_translations.rb +4 -4
  61. data/lib/puppet/http.rb +3 -0
  62. data/lib/puppet/http/client.rb +215 -60
  63. data/lib/puppet/http/external_client.rb +90 -0
  64. data/lib/puppet/http/redirector.rb +43 -7
  65. data/lib/puppet/http/resolver.rb +43 -3
  66. data/lib/puppet/http/resolver/server_list.rb +66 -24
  67. data/lib/puppet/http/resolver/settings.rb +21 -1
  68. data/lib/puppet/http/resolver/srv.rb +28 -2
  69. data/lib/puppet/http/response.rb +82 -1
  70. data/lib/puppet/http/retry_after_handler.rb +39 -0
  71. data/lib/puppet/http/service.rb +70 -2
  72. data/lib/puppet/http/service/ca.rb +71 -9
  73. data/lib/puppet/http/service/compiler.rb +214 -12
  74. data/lib/puppet/http/service/file_server.rb +106 -5
  75. data/lib/puppet/http/service/puppetserver.rb +39 -0
  76. data/lib/puppet/http/service/report.rb +36 -3
  77. data/lib/puppet/http/session.rb +60 -8
  78. data/lib/puppet/indirector.rb +1 -1
  79. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  80. data/lib/puppet/indirector/catalog/rest.rb +2 -1
  81. data/lib/puppet/indirector/exec.rb +1 -1
  82. data/lib/puppet/indirector/facts/facter.rb +3 -3
  83. data/lib/puppet/indirector/facts/rest.rb +2 -1
  84. data/lib/puppet/indirector/facts/yaml.rb +1 -1
  85. data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
  86. data/lib/puppet/indirector/file_content/http.rb +5 -0
  87. data/lib/puppet/indirector/file_content/rest.rb +1 -1
  88. data/lib/puppet/indirector/file_metadata/http.rb +28 -8
  89. data/lib/puppet/indirector/file_metadata/rest.rb +6 -4
  90. data/lib/puppet/indirector/hiera.rb +4 -0
  91. data/lib/puppet/indirector/indirection.rb +1 -1
  92. data/lib/puppet/indirector/json.rb +1 -1
  93. data/lib/puppet/indirector/msgpack.rb +1 -1
  94. data/lib/puppet/indirector/node/rest.rb +2 -1
  95. data/lib/puppet/indirector/report/processor.rb +2 -2
  96. data/lib/puppet/indirector/report/yaml.rb +23 -0
  97. data/lib/puppet/indirector/request.rb +5 -5
  98. data/lib/puppet/indirector/rest.rb +7 -1
  99. data/lib/puppet/indirector/status/rest.rb +2 -1
  100. data/lib/puppet/indirector/yaml.rb +1 -1
  101. data/lib/puppet/metatype/manager.rb +80 -80
  102. data/lib/puppet/module.rb +1 -2
  103. data/lib/puppet/network/format_support.rb +2 -2
  104. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  105. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  106. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  107. data/lib/puppet/network/http/base_pool.rb +6 -1
  108. data/lib/puppet/network/http/compression.rb +7 -0
  109. data/lib/puppet/network/http/connection.rb +2 -0
  110. data/lib/puppet/network/http/connection_adapter.rb +184 -0
  111. data/lib/puppet/network/http/nocache_pool.rb +1 -0
  112. data/lib/puppet/network/http/pool.rb +2 -4
  113. data/lib/puppet/network/http/route.rb +2 -2
  114. data/lib/puppet/network/http_pool.rb +2 -1
  115. data/lib/puppet/node/environment.rb +22 -5
  116. data/lib/puppet/node/facts.rb +17 -0
  117. data/lib/puppet/pal/catalog_compiler.rb +5 -0
  118. data/lib/puppet/pal/pal_impl.rb +30 -31
  119. data/lib/puppet/parameter.rb +1 -1
  120. data/lib/puppet/parser/ast/leaf.rb +5 -5
  121. data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
  122. data/lib/puppet/parser/compiler.rb +43 -33
  123. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  124. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  125. data/lib/puppet/parser/environment_compiler.rb +4 -1
  126. data/lib/puppet/parser/functions.rb +18 -9
  127. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  128. data/lib/puppet/parser/functions/filter.rb +1 -0
  129. data/lib/puppet/parser/resource.rb +3 -2
  130. data/lib/puppet/parser/resource/param.rb +6 -0
  131. data/lib/puppet/parser/type_loader.rb +2 -2
  132. data/lib/puppet/pops/adaptable.rb +7 -13
  133. data/lib/puppet/pops/adapters.rb +8 -4
  134. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  135. data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -5
  136. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  137. data/lib/puppet/pops/issues.rb +5 -0
  138. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  139. data/lib/puppet/pops/loaders.rb +24 -15
  140. data/lib/puppet/pops/lookup/context.rb +1 -1
  141. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  142. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  143. data/lib/puppet/pops/types/iterable.rb +34 -8
  144. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  145. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  146. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  147. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  148. data/lib/puppet/provider/file/windows.rb +1 -1
  149. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  150. data/lib/puppet/provider/package/aix.rb +17 -2
  151. data/lib/puppet/provider/package/apt.rb +98 -1
  152. data/lib/puppet/provider/package/aptitude.rb +1 -1
  153. data/lib/puppet/provider/package/dnfmodule.rb +61 -14
  154. data/lib/puppet/provider/package/dpkg.rb +1 -1
  155. data/lib/puppet/provider/package/gem.rb +45 -9
  156. data/lib/puppet/provider/package/pacman.rb +2 -5
  157. data/lib/puppet/provider/package/pip.rb +143 -48
  158. data/lib/puppet/provider/package/pip2.rb +17 -0
  159. data/lib/puppet/provider/package/pip3.rb +0 -2
  160. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  161. data/lib/puppet/provider/package/pkgng.rb +16 -4
  162. data/lib/puppet/provider/package/portage.rb +2 -2
  163. data/lib/puppet/provider/package/puppet_gem.rb +11 -2
  164. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  165. data/lib/puppet/provider/package/rpm.rb +6 -213
  166. data/lib/puppet/provider/package/yum.rb +101 -20
  167. data/lib/puppet/provider/package/zypper.rb +62 -1
  168. data/lib/puppet/provider/service/systemd.rb +22 -4
  169. data/lib/puppet/provider/service/windows.rb +23 -7
  170. data/lib/puppet/provider/user/aix.rb +1 -1
  171. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  172. data/lib/puppet/provider/user/useradd.rb +16 -5
  173. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  174. data/lib/puppet/reports/http.rb +15 -9
  175. data/lib/puppet/resource.rb +2 -1
  176. data/lib/puppet/resource/type.rb +10 -1
  177. data/lib/puppet/resource/type_collection.rb +20 -16
  178. data/lib/puppet/rest/route.rb +2 -2
  179. data/lib/puppet/runtime.rb +25 -2
  180. data/lib/puppet/settings.rb +20 -6
  181. data/lib/puppet/ssl.rb +1 -0
  182. data/lib/puppet/ssl/host.rb +4 -4
  183. data/lib/puppet/ssl/oids.rb +1 -0
  184. data/lib/puppet/ssl/ssl_context.rb +2 -2
  185. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  186. data/lib/puppet/ssl/state_machine.rb +79 -37
  187. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  188. data/lib/puppet/ssl/verifier_adapter.rb +9 -1
  189. data/lib/puppet/test/test_helper.rb +19 -14
  190. data/lib/puppet/transaction.rb +2 -2
  191. data/lib/puppet/transaction/persistence.rb +1 -1
  192. data/lib/puppet/transaction/report.rb +14 -10
  193. data/lib/puppet/trusted_external.rb +29 -1
  194. data/lib/puppet/type.rb +21 -8
  195. data/lib/puppet/type/file.rb +40 -15
  196. data/lib/puppet/type/file/checksum.rb +4 -4
  197. data/lib/puppet/type/file/source.rb +35 -13
  198. data/lib/puppet/type/filebucket.rb +1 -1
  199. data/lib/puppet/type/notify.rb +2 -2
  200. data/lib/puppet/type/package.rb +41 -3
  201. data/lib/puppet/type/service.rb +59 -8
  202. data/lib/puppet/type/user.rb +19 -29
  203. data/lib/puppet/util.rb +41 -3
  204. data/lib/puppet/util/at_fork.rb +1 -1
  205. data/lib/puppet/util/autoload.rb +13 -25
  206. data/lib/puppet/util/character_encoding.rb +9 -5
  207. data/lib/puppet/util/checksums.rb +19 -4
  208. data/lib/puppet/util/connection.rb +8 -8
  209. data/lib/puppet/util/execution.rb +2 -2
  210. data/lib/puppet/util/fileparsing.rb +2 -2
  211. data/lib/puppet/util/instance_loader.rb +14 -10
  212. data/lib/puppet/util/log/destinations.rb +1 -10
  213. data/lib/puppet/util/package/version/debian.rb +175 -0
  214. data/lib/puppet/util/package/version/gem.rb +15 -0
  215. data/lib/puppet/util/package/version/pip.rb +167 -0
  216. data/lib/puppet/util/package/version/range.rb +53 -0
  217. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  218. data/lib/puppet/util/package/version/range/gt.rb +14 -0
  219. data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
  220. data/lib/puppet/util/package/version/range/lt.rb +14 -0
  221. data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
  222. data/lib/puppet/util/package/version/range/min_max.rb +21 -0
  223. data/lib/puppet/util/package/version/range/simple.rb +11 -0
  224. data/lib/puppet/util/package/version/rpm.rb +73 -0
  225. data/lib/puppet/util/pidlock.rb +13 -7
  226. data/lib/puppet/util/platform.rb +5 -0
  227. data/lib/puppet/util/provider_features.rb +1 -1
  228. data/lib/puppet/util/reference.rb +1 -1
  229. data/lib/puppet/util/rpm_compare.rb +193 -0
  230. data/lib/puppet/util/run_mode.rb +5 -1
  231. data/lib/puppet/util/windows.rb +1 -0
  232. data/lib/puppet/util/windows/adsi.rb +2 -2
  233. data/lib/puppet/util/windows/api_types.rb +60 -33
  234. data/lib/puppet/util/windows/eventlog.rb +1 -6
  235. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  236. data/lib/puppet/util/windows/principal.rb +8 -6
  237. data/lib/puppet/util/windows/process.rb +15 -14
  238. data/lib/puppet/util/windows/registry.rb +11 -11
  239. data/lib/puppet/util/windows/security.rb +5 -4
  240. data/lib/puppet/util/windows/service.rb +43 -26
  241. data/lib/puppet/util/windows/sid.rb +3 -3
  242. data/lib/puppet/util/windows/user.rb +242 -8
  243. data/lib/puppet/version.rb +1 -1
  244. data/locales/puppet.pot +627 -507
  245. data/man/man5/puppet.conf.5 +93 -20
  246. data/man/man8/puppet-agent.8 +7 -4
  247. data/man/man8/puppet-apply.8 +1 -1
  248. data/man/man8/puppet-catalog.8 +1 -1
  249. data/man/man8/puppet-config.8 +6 -6
  250. data/man/man8/puppet-describe.8 +1 -1
  251. data/man/man8/puppet-device.8 +1 -1
  252. data/man/man8/puppet-doc.8 +1 -1
  253. data/man/man8/puppet-epp.8 +1 -1
  254. data/man/man8/puppet-facts.8 +1 -1
  255. data/man/man8/puppet-filebucket.8 +1 -1
  256. data/man/man8/puppet-generate.8 +1 -1
  257. data/man/man8/puppet-help.8 +6 -3
  258. data/man/man8/puppet-key.8 +1 -1
  259. data/man/man8/puppet-lookup.8 +2 -2
  260. data/man/man8/puppet-man.8 +1 -1
  261. data/man/man8/puppet-module.8 +4 -1
  262. data/man/man8/puppet-node.8 +4 -4
  263. data/man/man8/puppet-parser.8 +1 -1
  264. data/man/man8/puppet-plugin.8 +1 -1
  265. data/man/man8/puppet-report.8 +1 -1
  266. data/man/man8/puppet-resource.8 +1 -1
  267. data/man/man8/puppet-script.8 +1 -1
  268. data/man/man8/puppet-ssl.8 +1 -1
  269. data/man/man8/puppet-status.8 +2 -2
  270. data/man/man8/puppet.8 +2 -2
  271. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  272. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  273. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
  274. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
  275. data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
  276. data/spec/fixtures/ssl/unknown-ca.pem +59 -0
  277. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  278. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  279. data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
  280. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  281. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  282. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  283. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  284. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  285. data/spec/integration/application/agent_spec.rb +479 -0
  286. data/spec/integration/application/apply_spec.rb +279 -150
  287. data/spec/integration/application/config_spec.rb +74 -0
  288. data/spec/integration/application/doc_spec.rb +16 -6
  289. data/spec/integration/application/filebucket_spec.rb +239 -0
  290. data/spec/integration/application/help_spec.rb +42 -0
  291. data/spec/integration/application/lookup_spec.rb +13 -0
  292. data/spec/integration/application/module_spec.rb +68 -0
  293. data/spec/integration/application/plugin_spec.rb +123 -0
  294. data/spec/integration/configurer_spec.rb +14 -0
  295. data/spec/integration/data_binding_spec.rb +82 -0
  296. data/spec/integration/defaults_spec.rb +27 -3
  297. data/spec/integration/directory_environments_spec.rb +17 -17
  298. data/spec/integration/http/client_spec.rb +39 -40
  299. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  300. data/spec/integration/indirector/report/yaml.rb +83 -0
  301. data/spec/integration/network/http_pool_spec.rb +84 -19
  302. data/spec/integration/node/environment_spec.rb +15 -0
  303. data/spec/integration/parser/compiler_spec.rb +11 -0
  304. data/spec/integration/type/file_spec.rb +1 -1
  305. data/spec/integration/util/execution_spec.rb +22 -0
  306. data/spec/integration/util/windows/adsi_spec.rb +8 -3
  307. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  308. data/spec/integration/util/windows/process_spec.rb +26 -32
  309. data/spec/integration/util/windows/registry_spec.rb +7 -7
  310. data/spec/integration/util/windows/user_spec.rb +47 -5
  311. data/spec/integration/util_spec.rb +7 -33
  312. data/spec/lib/puppet/test_ca.rb +2 -2
  313. data/spec/lib/puppet_spec/https.rb +16 -7
  314. data/spec/lib/puppet_spec/matchers.rb +0 -80
  315. data/spec/lib/puppet_spec/puppetserver.rb +127 -0
  316. data/spec/shared_contexts/https.rb +29 -0
  317. data/spec/shared_contexts/types_setup.rb +2 -0
  318. data/spec/unit/agent_spec.rb +80 -26
  319. data/spec/unit/application/agent_spec.rb +12 -9
  320. data/spec/unit/application/device_spec.rb +2 -2
  321. data/spec/unit/application/doc_spec.rb +2 -2
  322. data/spec/unit/application/face_base_spec.rb +6 -4
  323. data/spec/unit/application/facts_spec.rb +41 -10
  324. data/spec/unit/application/filebucket_spec.rb +22 -2
  325. data/spec/unit/application/man_spec.rb +52 -0
  326. data/spec/unit/application/resource_spec.rb +3 -1
  327. data/spec/unit/application/ssl_spec.rb +15 -2
  328. data/spec/unit/application_spec.rb +9 -4
  329. data/spec/unit/configurer/downloader_spec.rb +10 -0
  330. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  331. data/spec/unit/configurer_spec.rb +87 -38
  332. data/spec/unit/confine_spec.rb +2 -1
  333. data/spec/unit/context/trusted_information_spec.rb +25 -2
  334. data/spec/unit/daemon_spec.rb +5 -64
  335. data/spec/unit/defaults_spec.rb +24 -1
  336. data/spec/unit/environments_spec.rb +107 -32
  337. data/spec/unit/face/config_spec.rb +59 -1
  338. data/spec/unit/face/module/search_spec.rb +17 -0
  339. data/spec/unit/face/node_spec.rb +2 -2
  340. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  341. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  342. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  343. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  344. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  345. data/spec/unit/file_system/uniquefile_spec.rb +29 -0
  346. data/spec/unit/file_system_spec.rb +11 -2
  347. data/spec/unit/http/client_spec.rb +173 -59
  348. data/spec/unit/http/external_client_spec.rb +201 -0
  349. data/spec/unit/http/resolver_spec.rb +44 -5
  350. data/spec/unit/http/response_spec.rb +6 -0
  351. data/spec/unit/http/service/ca_spec.rb +27 -5
  352. data/spec/unit/http/service/compiler_spec.rb +186 -9
  353. data/spec/unit/http/service/file_server_spec.rb +37 -6
  354. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  355. data/spec/unit/http/service/report_spec.rb +5 -4
  356. data/spec/unit/http/service_spec.rb +3 -4
  357. data/spec/unit/http/session_spec.rb +48 -12
  358. data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
  359. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  360. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  361. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  362. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
  363. data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
  364. data/spec/unit/indirector/file_metadata/rest_spec.rb +15 -14
  365. data/spec/unit/indirector/json_spec.rb +8 -8
  366. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  367. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  368. data/spec/unit/indirector/request_spec.rb +5 -5
  369. data/spec/unit/indirector/rest_spec.rb +14 -1
  370. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  371. data/spec/unit/indirector/yaml_spec.rb +7 -7
  372. data/spec/unit/interface_spec.rb +3 -3
  373. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  374. data/spec/unit/network/format_support_spec.rb +3 -2
  375. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  376. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  377. data/spec/unit/network/http/connection_spec.rb +552 -190
  378. data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
  379. data/spec/unit/network/http/pool_spec.rb +3 -3
  380. data/spec/unit/network/http_pool_spec.rb +63 -57
  381. data/spec/unit/network/http_spec.rb +1 -1
  382. data/spec/unit/node/environment_spec.rb +33 -0
  383. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  384. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  385. data/spec/unit/parser/scope_spec.rb +1 -1
  386. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  387. data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
  388. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  389. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  390. data/spec/unit/provider/exec_spec.rb +4 -3
  391. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  392. data/spec/unit/provider/package/aix_spec.rb +29 -0
  393. data/spec/unit/provider/package/apt_spec.rb +107 -0
  394. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  395. data/spec/unit/provider/package/dnfmodule_spec.rb +54 -15
  396. data/spec/unit/provider/package/dpkg_spec.rb +22 -7
  397. data/spec/unit/provider/package/gem_spec.rb +40 -0
  398. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  399. data/spec/unit/provider/package/pacman_spec.rb +6 -21
  400. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  401. data/spec/unit/provider/package/pip_spec.rb +68 -19
  402. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  403. data/spec/unit/provider/package/pkgng_spec.rb +38 -0
  404. data/spec/unit/provider/package/portage_spec.rb +5 -0
  405. data/spec/unit/provider/package/puppet_gem_spec.rb +12 -1
  406. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  407. data/spec/unit/provider/package/rpm_spec.rb +0 -212
  408. data/spec/unit/provider/package/yum_spec.rb +274 -1
  409. data/spec/unit/provider/package/zypper_spec.rb +98 -0
  410. data/spec/unit/provider/service/base_spec.rb +2 -4
  411. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  412. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  413. data/spec/unit/provider/service/debian_spec.rb +3 -5
  414. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  415. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  416. data/spec/unit/provider/service/init_spec.rb +46 -5
  417. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  418. data/spec/unit/provider/service/openbsd_spec.rb +9 -0
  419. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  420. data/spec/unit/provider/service/openwrt_spec.rb +2 -1
  421. data/spec/unit/provider/service/redhat_spec.rb +10 -1
  422. data/spec/unit/provider/service/runit_spec.rb +2 -1
  423. data/spec/unit/provider/service/smf_spec.rb +1 -1
  424. data/spec/unit/provider/service/src_spec.rb +3 -5
  425. data/spec/unit/provider/service/systemd_spec.rb +95 -18
  426. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  427. data/spec/unit/provider/service/windows_spec.rb +50 -14
  428. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  429. data/spec/unit/provider/user/useradd_spec.rb +30 -16
  430. data/spec/unit/provider/user/windows_adsi_spec.rb +85 -3
  431. data/spec/unit/puppet_pal_2pec.rb +11 -0
  432. data/spec/unit/puppet_pal_catalog_spec.rb +43 -0
  433. data/spec/unit/puppet_spec.rb +33 -0
  434. data/spec/unit/reports/http_spec.rb +70 -52
  435. data/spec/unit/reports/store_spec.rb +17 -13
  436. data/spec/unit/resource_spec.rb +3 -3
  437. data/spec/unit/rest/route_spec.rb +4 -4
  438. data/spec/unit/settings_spec.rb +44 -22
  439. data/spec/unit/ssl/host_spec.rb +4 -2
  440. data/spec/unit/ssl/oids_spec.rb +1 -0
  441. data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
  442. data/spec/unit/ssl/state_machine_spec.rb +90 -14
  443. data/spec/unit/test/test_helper_spec.rb +17 -0
  444. data/spec/unit/transaction/persistence_spec.rb +15 -0
  445. data/spec/unit/transaction/report_spec.rb +7 -1
  446. data/spec/unit/type/file/source_spec.rb +4 -4
  447. data/spec/unit/type/file_spec.rb +122 -96
  448. data/spec/unit/type/filebucket_spec.rb +1 -1
  449. data/spec/unit/type/service_spec.rb +218 -8
  450. data/spec/unit/type/user_spec.rb +32 -3
  451. data/spec/unit/type_spec.rb +50 -0
  452. data/spec/unit/util/at_fork_spec.rb +2 -2
  453. data/spec/unit/util/autoload_spec.rb +2 -1
  454. data/spec/unit/util/character_encoding_spec.rb +4 -4
  455. data/spec/unit/util/checksums_spec.rb +16 -0
  456. data/spec/unit/util/command_line_spec.rb +11 -6
  457. data/spec/unit/util/log/destinations_spec.rb +1 -29
  458. data/spec/unit/util/package/version/debian_spec.rb +83 -0
  459. data/spec/unit/util/package/version/pip_spec.rb +464 -0
  460. data/spec/unit/util/package/version/range_spec.rb +175 -0
  461. data/spec/unit/util/package/version/rpm_spec.rb +121 -0
  462. data/spec/unit/util/pidlock_spec.rb +83 -47
  463. data/spec/unit/util/rpm_compare_spec.rb +196 -0
  464. data/spec/unit/util/run_mode_spec.rb +6 -6
  465. data/spec/unit/util/windows/adsi_spec.rb +4 -4
  466. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  467. data/spec/unit/util/windows/service_spec.rb +4 -4
  468. data/spec/unit/util/windows/sid_spec.rb +2 -2
  469. data/spec/unit/util_spec.rb +3 -3
  470. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  471. data/tasks/generate_cert_fixtures.rake +15 -1
  472. data/tasks/manpages.rake +5 -35
  473. metadata +90 -51
  474. data/spec/integration/faces/config_spec.rb +0 -91
  475. data/spec/integration/faces/documentation_spec.rb +0 -57
  476. data/spec/integration/faces/plugin_spec.rb +0 -63
  477. data/spec/integration/file_bucket/file_spec.rb +0 -50
  478. data/spec/integration/file_serving/content_spec.rb +0 -7
  479. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  480. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  481. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  482. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  483. data/spec/integration/module_tool/forge_spec.rb +0 -64
  484. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  485. data/spec/integration/provider/service/init_spec.rb +0 -48
  486. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  487. data/spec/integration/provider/service/windows_spec.rb +0 -50
  488. data/spec/integration/reference/providers_spec.rb +0 -21
  489. data/spec/integration/reports_spec.rb +0 -13
  490. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  491. data/spec/integration/ssl/host_spec.rb +0 -72
  492. data/spec/integration/ssl/key_spec.rb +0 -99
  493. data/spec/integration/test/test_helper_spec.rb +0 -31
  494. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  495. data/spec/unit/face/man_spec.rb +0 -25
  496. data/spec/unit/man_spec.rb +0 -31
@@ -6,10 +6,18 @@
6
6
  # loaded above.
7
7
  #
8
8
  class Puppet::SSL::VerifierAdapter
9
- attr_reader :validator
9
+ attr_reader :validator, :ssl_context
10
10
 
11
11
  def initialize(validator)
12
12
  @validator = validator
13
+
14
+ if validator.is_a?(Puppet::SSL::Validator::NoValidator)
15
+ ssl = Puppet::SSL::SSLProvider.new
16
+ @ssl_context = ssl.create_insecure_context
17
+ else
18
+ # nil means use the default SSLContext
19
+ @ssl_context = nil
20
+ end
13
21
  end
14
22
 
15
23
  # Return true if `self` is reusable with `verifier` meaning they
@@ -68,7 +68,14 @@ module Puppet::Test
68
68
  # any individual tests.
69
69
  # @return nil
70
70
  def self.before_all_tests()
71
- # Make sure that all of the setup is also done for any before(:all) blocks
71
+ # The process environment is a shared, persistent resource.
72
+ # Can't use Puppet.features.microsoft_windows? as it may be mocked out in a test. This can cause test recurring test failures
73
+ if (!!File::ALT_SEPARATOR)
74
+ mode = :windows
75
+ else
76
+ mode = :posix
77
+ end
78
+ $old_env = Puppet::Util.get_environment(mode)
72
79
  end
73
80
 
74
81
  # Call this method once, at the end of a test run, when no more tests
@@ -113,20 +120,14 @@ module Puppet::Test
113
120
  indirections = Puppet::Indirector::Indirection.send(:class_variable_get, :@@indirections)
114
121
  indirections.each do |indirector|
115
122
  $saved_indirection_state[indirector.name] = {
116
- :@terminus_class => indirector.instance_variable_get(:@terminus_class).value,
117
- :@cache_class => indirector.instance_variable_get(:@cache_class).value
123
+ :@terminus_class => indirector.instance_variable_get(:@terminus_class).value,
124
+ :@cache_class => indirector.instance_variable_get(:@cache_class).value,
125
+ # dup the termini hash so termini created and registered during
126
+ # the test aren't stored in our saved_indirection_state
127
+ :@termini => indirector.instance_variable_get(:@termini).dup
118
128
  }
119
129
  end
120
130
 
121
- # The process environment is a shared, persistent resource.
122
- # Can't use Puppet.features.microsoft_windows? as it may be mocked out in a test. This can cause test recurring test failures
123
- if (!!File::ALT_SEPARATOR)
124
- mode = :windows
125
- else
126
- mode = :posix
127
- end
128
- $old_env = Puppet::Util.get_environment(mode)
129
-
130
131
  # So is the load_path
131
132
  $old_load_path = $LOAD_PATH.dup
132
133
 
@@ -137,7 +138,7 @@ module Puppet::Test
137
138
  trusted_information:
138
139
  Puppet::Context::TrustedInformation.new('local', 'testing', {}, { "trusted_testhelper" => true }),
139
140
  ssl_context: Puppet::SSL::SSLContext.new(cacerts: []).freeze,
140
- http_session: proc { Puppet.runtime["http"].create_session }
141
+ http_session: proc { Puppet.runtime[:http].create_session }
141
142
  },
142
143
  "Context for specs")
143
144
 
@@ -178,7 +179,11 @@ module Puppet::Test
178
179
  indirections = Puppet::Indirector::Indirection.send(:class_variable_get, :@@indirections)
179
180
  indirections.each do |indirector|
180
181
  $saved_indirection_state.fetch(indirector.name, {}).each do |variable, value|
181
- indirector.instance_variable_get(variable).value = value
182
+ if variable == :@termini
183
+ indirector.instance_variable_set(variable, value)
184
+ else
185
+ indirector.instance_variable_get(variable).value = value
186
+ end
182
187
  end
183
188
  end
184
189
  $saved_indirection_state = nil
@@ -202,7 +202,7 @@ class Puppet::Transaction
202
202
  # mark the end of transaction evaluate.
203
203
  report.transaction_completed = true
204
204
 
205
- Puppet.debug "Finishing transaction #{object_id}"
205
+ Puppet.debug { "Finishing transaction #{object_id}" }
206
206
  end
207
207
 
208
208
  # Wraps application run state check to flag need to interrupt processing
@@ -373,7 +373,7 @@ class Puppet::Transaction
373
373
  type_name = provider_class.resource_type.name
374
374
  return if @prefetched_providers[type_name][provider_class.name] ||
375
375
  @prefetch_failed_providers[type_name][provider_class.name]
376
- Puppet.debug "Prefetching #{provider_class.name} resources for #{type_name}"
376
+ Puppet.debug { "Prefetching #{provider_class.name} resources for #{type_name}" }
377
377
  begin
378
378
  provider_class.prefetch(resources)
379
379
  rescue LoadError, Puppet::MissingCommand => detail
@@ -62,7 +62,7 @@ class Puppet::Transaction::Persistence
62
62
  result = nil
63
63
  Puppet::Util.benchmark(:debug, _("Loaded transaction store file in %{seconds} seconds")) do
64
64
  begin
65
- result = Puppet::Util::Yaml.safe_load_file(filename, [Symbol])
65
+ result = Puppet::Util::Yaml.safe_load_file(filename, [Symbol, Time])
66
66
  rescue Puppet::Util::Yaml::YamlLoadError => detail
67
67
  Puppet.log_exception(detail, _("Transaction store file %{filename} is corrupt (%{detail}); replacing") % { filename: filename, detail: detail })
68
68
 
@@ -63,9 +63,11 @@ class Puppet::Transaction::Report
63
63
  # or 'on_failure'
64
64
  attr_accessor :cached_catalog_status
65
65
 
66
- # Contains the name and port of the master that was successfully contacted
66
+ # Contains the name and port of the server that was successfully contacted
67
67
  # @return [String] a string of the format 'servername:port'
68
- attr_accessor :master_used
68
+ attr_accessor :server_used
69
+ alias :master_used :server_used
70
+ alias :master_used= :server_used=
69
71
 
70
72
  # The host name for which the report is generated
71
73
  # @return [String] the host name
@@ -122,7 +124,7 @@ class Puppet::Transaction::Report
122
124
 
123
125
  # @!attribute [r] corrective_change
124
126
  # @return [Boolean] true if the report contains any events and resources that had
125
- # corrective changes.
127
+ # corrective changes, including noop corrective changes.
126
128
  attr_reader :corrective_change
127
129
 
128
130
  # @return [Boolean] true if one or more resources attempted to generate
@@ -217,14 +219,14 @@ class Puppet::Transaction::Report
217
219
  end
218
220
 
219
221
  # @api private
220
- def initialize(configuration_version=nil, environment=nil, transaction_uuid=nil, job_id=nil)
222
+ def initialize(configuration_version=nil, environment=nil, transaction_uuid=nil, job_id=nil, start_time=Time.now)
221
223
  @metrics = {}
222
224
  @logs = []
223
225
  @resource_statuses = {}
224
226
  @external_times ||= {}
225
227
  @host = Puppet[:node_name_value]
226
- @time = Time.now
227
- @report_format = 10
228
+ @time = start_time
229
+ @report_format = 11
228
230
  @puppet_version = Puppet.version
229
231
  @configuration_version = configuration_version
230
232
  @transaction_uuid = transaction_uuid
@@ -232,7 +234,7 @@ class Puppet::Transaction::Report
232
234
  @job_id = job_id
233
235
  @catalog_uuid = nil
234
236
  @cached_catalog_status = nil
235
- @master_used = nil
237
+ @server_used = nil
236
238
  @environment = environment
237
239
  @status = 'failed' # assume failed until the report is finalized
238
240
  @noop = Puppet[:noop]
@@ -256,8 +258,10 @@ class Puppet::Transaction::Report
256
258
  @time = data['time']
257
259
  @corrective_change = data['corrective_change']
258
260
 
259
- if data['master_used']
260
- @master_used = data['master_used']
261
+ if data['server_used']
262
+ @server_used = data['server_used']
263
+ elsif data['master_used']
264
+ @server_used = data['master_used']
261
265
  end
262
266
 
263
267
  if data['catalog_uuid']
@@ -322,7 +326,7 @@ class Puppet::Transaction::Report
322
326
  }
323
327
 
324
328
  # The following is include only when set
325
- hash['master_used'] = @master_used unless @master_used.nil?
329
+ hash['master_used'] = hash['server_used'] = @server_used unless @server_used.nil?
326
330
  hash['catalog_uuid'] = @catalog_uuid unless @catalog_uuid.nil?
327
331
  hash['code_id'] = @code_id unless @code_id.nil?
328
332
  hash['job_id'] = @job_id unless @job_id.nil?
@@ -3,11 +3,39 @@ module Puppet::TrustedExternal
3
3
  def retrieve(certname)
4
4
  command = Puppet[:trusted_external_command]
5
5
  return nil unless command
6
+ Puppet.debug { _("Retrieving trusted external data from %{command}") % {command: command} }
7
+ setting_type = Puppet.settings.setting(:trusted_external_command).type
8
+ if setting_type == :file
9
+ return fetch_data(command, certname)
10
+ end
11
+ # command is a directory. Thus, data is a hash of <basename> => <data> for
12
+ # each executable file in command. For example, if the files 'servicenow.rb',
13
+ # 'unicorn.sh' are in command, then data is the following hash:
14
+ # { 'servicenow' => <servicenow.rb output>, 'unicorn' => <unicorn.sh output> }
15
+ data = {}
16
+ Puppet::FileSystem.children(command).each do |file|
17
+ abs_path = Puppet::FileSystem.expand_path(file)
18
+ executable_file = Puppet::FileSystem.file?(abs_path) && Puppet::FileSystem.executable?(abs_path)
19
+ unless executable_file
20
+ Puppet.debug { _("Skipping non-executable file %{file}") % { file: abs_path } }
21
+ next
22
+ end
23
+ basename = file.basename(file.extname).to_s
24
+ unless data[basename].nil?
25
+ raise Puppet::Error, _("There is more than one '%{basename}' script in %{dir}") % { basename: basename, dir: command }
26
+ end
27
+ data[basename] = fetch_data(abs_path, certname)
28
+ end
29
+ data
30
+ end
31
+ module_function :retrieve
32
+
33
+ def fetch_data(command, certname)
6
34
  result = Puppet::Util::Execution.execute([command, certname], {
7
35
  :combine => false,
8
36
  :failonfail => true,
9
37
  })
10
38
  JSON.parse(result)
11
39
  end
12
- module_function :retrieve
40
+ module_function :fetch_data
13
41
  end
@@ -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.
@@ -110,8 +116,10 @@ class Type
110
116
 
111
117
  # Allow declaring that a type is actually a capability
112
118
  class << self
119
+ # @deprecated application orchestration will be removed in puppet 7
113
120
  attr_accessor :is_capability
114
121
 
122
+ # @deprecated application orchestration will be removed in puppet 7
115
123
  def is_capability?
116
124
  c = is_capability
117
125
  c.nil? ? false : c
@@ -123,6 +131,8 @@ class Type
123
131
  # represent application instances, this implementation always returns
124
132
  # +false+. Having this method though makes code checking whether a
125
133
  # resource is an application instance simpler
134
+ #
135
+ # @deprecated application orchestration will be removed in puppet 7
126
136
  def self.application?
127
137
  false
128
138
  end
@@ -743,7 +753,7 @@ class Type
743
753
  # @param options [Hash] options merged with a fixed set of options defined by this method, passed on to {Puppet::Transaction::Event}.
744
754
  # @return [Puppet::Transaction::Event] the created event
745
755
  def event(options = {})
746
- Puppet::Transaction::Event.new({:resource => self, :file => file, :line => line, :tags => tags}.merge(options))
756
+ Puppet::Transaction::Event.new(**{:resource => self, :file => file, :line => line, :tags => tags}.merge(options))
747
757
  end
748
758
 
749
759
  # @return [Object, nil] Returns the 'should' (wanted state) value for a specified property, or nil if the
@@ -1199,15 +1209,17 @@ class Type
1199
1209
  provider.instances.collect do |instance|
1200
1210
  # We always want to use the "first" provider instance we find, unless the resource
1201
1211
  # is already managed and has a different provider set
1202
- other = provider_instances[instance.name]
1212
+ title = instance.respond_to?(:title) ? instance.title : instance.name
1213
+ other = provider_instances[title]
1203
1214
  if other
1204
- Puppet.debug "%s %s found in both %s and %s; skipping the %s version" %
1205
- [self.name.to_s.capitalize, instance.name, other.class.name, instance.class.name, instance.class.name]
1215
+ Puppet.debug {
1216
+ "%s %s found in both %s and %s; skipping the %s version" % [self.name.to_s.capitalize, title, other.class.name, instance.class.name, instance.class.name]
1217
+ }
1206
1218
  next
1207
1219
  end
1208
- provider_instances[instance.name] = instance
1220
+ provider_instances[title] = instance
1209
1221
 
1210
- result = new(:name => instance.name, :provider => instance)
1222
+ result = new(:name => instance.name, :provider => instance, :title => title)
1211
1223
  properties.each { |name| result.newattr(name) }
1212
1224
  result
1213
1225
  end
@@ -1708,6 +1720,7 @@ class Type
1708
1720
  }
1709
1721
  end
1710
1722
 
1723
+ # @deprecated application orchestration will be removed in puppet 7
1711
1724
  newmetaparam(:export, :parent => RelationshipMetaparam, :attributes => {:direction => :out, :events => :NONE}) do
1712
1725
  desc <<EOS
1713
1726
  Export a capability resource.
@@ -1733,6 +1746,7 @@ web { server:
1733
1746
  EOS
1734
1747
  end
1735
1748
 
1749
+ # @deprecated application orchestration will be removed in puppet 7
1736
1750
  newmetaparam(:consume, :parent => RelationshipMetaparam, :attributes => {:direction => :in, :events => :NONE}) do
1737
1751
  desc <<EOS
1738
1752
  Consume a capability resource.
@@ -1882,7 +1896,7 @@ end
1882
1896
  name = name.intern
1883
1897
 
1884
1898
  if unprovide(name)
1885
- Puppet.debug "Reloading #{name} #{self.name} provider"
1899
+ Puppet.debug { "Reloading #{name} #{self.name} provider" }
1886
1900
  end
1887
1901
 
1888
1902
  pname = options[:parent]
@@ -2284,7 +2298,6 @@ end
2284
2298
  #
2285
2299
  attr_accessor :self_refresh
2286
2300
  include Enumerable, Puppet::Util::ClassGen
2287
- include Puppet::MetaType::Manager
2288
2301
 
2289
2302
  include Puppet::Util
2290
2303
  include Puppet::Util::Logging
@@ -116,9 +116,9 @@ Puppet::Type.newtype(:file) do
116
116
  that sufficient disk space is available for the file backups. Generally, you
117
117
  can implement this using one of the following two options:
118
118
  - Use a `find` command and `crontab` entry to retain only the last X days
119
- of file backups. For example,
119
+ of file backups. For example:
120
120
 
121
- ```shell script
121
+ ```
122
122
  find /opt/puppetlabs/server/data/puppetserver/bucket -type f -mtime +45 -atime +45 -print0 | xargs -0 rm
123
123
  ```
124
124
 
@@ -401,8 +401,12 @@ Puppet::Type.newtype(:file) do
401
401
  end
402
402
  end
403
403
 
404
- CREATORS = [:content, :source, :target]
405
- SOURCE_ONLY_CHECKSUMS = [:none, :ctime, :mtime]
404
+ # mutually exclusive ways to create files
405
+ CREATORS = [:content, :source, :target].freeze
406
+
407
+ # This is both "checksum types that can't be used with the content property"
408
+ # and "checksum types that are not digest based"
409
+ SOURCE_ONLY_CHECKSUMS = [:none, :ctime, :mtime].freeze
406
410
 
407
411
  validate do
408
412
  creator_count = 0
@@ -428,7 +432,7 @@ Puppet::Type.newtype(:file) do
428
432
  @parameters[:content].value = @parameters[:checksum].sum(@parameters[:content].actual_content)
429
433
  end
430
434
 
431
- if self[:checksum] && self[:checksum_value] && !send("#{self[:checksum]}?", self[:checksum_value])
435
+ if self[:checksum] && self[:checksum_value] && !valid_checksum?(self[:checksum], self[:checksum_value])
432
436
  self.fail _("Checksum value '%{value}' is not a valid checksum type %{checksum}") % { value: self[:checksum_value], checksum: self[:checksum] }
433
437
  end
434
438
 
@@ -930,7 +934,7 @@ Puppet::Type.newtype(:file) do
930
934
  # that out.
931
935
  end
932
936
 
933
- fail_if_checksum_is_wrong(file.path, content_checksum) if validate_checksum?
937
+ fail_if_checksum_is_wrong(property, file.path, content_checksum)
934
938
  end
935
939
  else
936
940
  umask = mode ? 000 : 022
@@ -1040,17 +1044,38 @@ Puppet::Type.newtype(:file) do
1040
1044
  end
1041
1045
  end
1042
1046
 
1043
- # Should we validate the checksum of the file we're writing?
1044
- def validate_checksum?
1045
- self[:checksum] !~ /time/
1046
- end
1047
-
1048
1047
  # Make sure the file we wrote out is what we think it is.
1049
- def fail_if_checksum_is_wrong(path, content_checksum)
1050
- newsum = parameter(:checksum).sum_file(path)
1051
- return if [:absent, nil, content_checksum].include?(newsum)
1048
+ # @param [Puppet::Parameter] property the param or property that wrote the file, or nil
1049
+ # @param [String] path to the file
1050
+ # @param [String] the checksum for the local file
1051
+ #
1052
+ # @api private
1053
+ #
1054
+ def fail_if_checksum_is_wrong(property, path, content_checksum)
1055
+ desired_checksum = desired_checksum(property, path)
1052
1056
 
1053
- self.fail _("File written to disk did not match checksum; discarding changes (%{content_checksum} vs %{newsum})") % { content_checksum: content_checksum, newsum: newsum }
1057
+ if desired_checksum && content_checksum != desired_checksum
1058
+ self.fail _("File written to disk did not match desired checksum; discarding changes (%{content_checksum} vs %{desired_checksum})") % { content_checksum: content_checksum, desired_checksum: desired_checksum }
1059
+ end
1060
+ end
1061
+
1062
+ # Return the desired checksum or nil
1063
+ def desired_checksum(property, path)
1064
+ return if SOURCE_ONLY_CHECKSUMS.include?(self[:checksum])
1065
+
1066
+ if self[:checksum] && self[:checksum_value]
1067
+ "{#{self[:checksum]}}#{self[:checksum_value]}"
1068
+ elsif property && property.name == :source
1069
+ meta = property.metadata
1070
+ return unless meta
1071
+
1072
+ # due to HttpMetadata the checksum type may fallback to mtime, so recheck
1073
+ return if SOURCE_ONLY_CHECKSUMS.include?(meta.checksum_type)
1074
+ meta.checksum
1075
+ elsif property && property.name == :content
1076
+ str = property.actual_content
1077
+ str ? parameter(:checksum).sum(str) : nil
1078
+ end
1054
1079
  end
1055
1080
 
1056
1081
  def write_temporary_file?
@@ -9,7 +9,7 @@ Puppet::Type.type(:file).newparam(:checksum) do
9
9
 
10
10
  The default checksum type is md5."
11
11
 
12
- newvalues "md5", "md5lite", "sha224", "sha256", "sha256lite", "sha384", "sha512", "mtime", "ctime", "none"
12
+ newvalues(*Puppet::Util::Checksums.known_checksum_types)
13
13
 
14
14
  defaultto do
15
15
  Puppet[:digest_algorithm].to_sym
@@ -23,18 +23,18 @@ Puppet::Type.type(:file).newparam(:checksum) do
23
23
 
24
24
  def sum(content)
25
25
  content = content.is_a?(Puppet::Pops::Types::PBinaryType::Binary) ? content.binary_buffer : content
26
- type = digest_algorithm()
26
+ type = digest_algorithm
27
27
  "{#{type}}" + send(type, content)
28
28
  end
29
29
 
30
30
  def sum_file(path)
31
- type = digest_algorithm()
31
+ type = digest_algorithm
32
32
  method = type.to_s + "_file"
33
33
  "{#{type}}" + send(method, path).to_s
34
34
  end
35
35
 
36
36
  def sum_stream(&block)
37
- type = digest_algorithm()
37
+ type = digest_algorithm
38
38
  method = type.to_s + "_stream"
39
39
  checksum = send(method, &block)
40
40
  "{#{type}}#{checksum}"
@@ -23,7 +23,7 @@ module Puppet
23
23
  * Fully qualified paths to locally available files (including files on NFS
24
24
  shares or Windows mapped drives).
25
25
  * `file:` URIs, which behave the same as local file paths.
26
- * `http:` URIs, which point to files served by common web servers.
26
+ * `http(s):` URIs, which point to files served by common web servers.
27
27
 
28
28
  The normal form of a `puppet:` URI is:
29
29
 
@@ -44,9 +44,26 @@ module Puppet
44
44
  because HTTP servers do not transfer any metadata that translates to
45
45
  ownership or permission details.
46
46
 
47
- The `http` source uses the server `Content-MD5` header as a checksum to
48
- determine if the remote file has changed. If the server response does not
49
- include that header, Puppet defaults to using the `Last-Modified` header.
47
+ Puppet determines if file content is synchronized by computing a checksum
48
+ for the local file and comparing it against the `checksum_value`
49
+ parameter. If the `checksum_value` parameter is not specified for
50
+ `puppet` and `file` sources, Puppet computes a checksum based on its
51
+ `Puppet[:digest_algorithm]`. For `http(s)` sources, Puppet uses the
52
+ first HTTP header it recognizes out of the following list:
53
+ `X-Checksum-Sha256`, `X-Checksum-Sha1`, `X-Checksum-Md5` or `Content-MD5`.
54
+ If the server response does not include one of these headers, Puppet
55
+ defaults to using the `Last-Modified` header. Puppet updates the local
56
+ file if the header is newer than the modified time (mtime) of the local
57
+ file.
58
+
59
+ _HTTP_ URIs can include a user information component so that Puppet can
60
+ retrieve file metadata and content from HTTP servers that require HTTP Basic
61
+ authentication. For example `https://<user>:<pass>@<server>:<port>/path/to/file.`
62
+
63
+ When connecting to _HTTPS_ servers, Puppet trusts CA certificates in the
64
+ puppet-agent certificate bundle and the Puppet CA. You can configure Puppet
65
+ to trust additional CA certificates using the `Puppet[:ssl_trust_store]`
66
+ setting.
50
67
 
51
68
  Multiple `source` values can be specified as an array, and Puppet will
52
69
  use the first source that exists. This can be used to serve different
@@ -96,8 +113,8 @@ module Puppet
96
113
  # Ruby 1.9.3 and earlier have a URI bug in URI
97
114
  # to_s returns an ASCII string despite UTF-8 fragments
98
115
  # since its escaped its safe to universally call encode
99
- # URI.unescape always returns strings in the original encoding
100
- URI.unescape(uri_string.encode(Encoding::UTF_8))
116
+ # Puppet::Util.uri_unescape always returns strings in the original encoding
117
+ Puppet::Util.uri_unescape(uri_string.encode(Encoding::UTF_8))
101
118
  else
102
119
  source
103
120
  end
@@ -208,7 +225,7 @@ module Puppet
208
225
  end
209
226
 
210
227
  def port
211
- (uri and uri.port) or Puppet.settings[:masterport]
228
+ (uri and uri.port) or Puppet.settings[:serverport]
212
229
  end
213
230
 
214
231
  def uri
@@ -255,7 +272,7 @@ module Puppet
255
272
 
256
273
  def each_chunk_from(&block)
257
274
  if Puppet[:default_file_terminus] == :file_server && scheme == 'puppet' && (uri.host.nil? || uri.host.empty?)
258
- chunk_file_from_disk(metadata.path, &block)
275
+ chunk_file_from_disk(metadata.full_path, &block)
259
276
  elsif local?
260
277
  chunk_file_from_disk(full_path, &block)
261
278
  else
@@ -276,7 +293,7 @@ module Puppet
276
293
  api = session.route_to(:fileserver, url: url)
277
294
 
278
295
  api.get_static_file_content(
279
- path: URI.unescape(url.path),
296
+ path: Puppet::Util.uri_unescape(url.path),
280
297
  environment: resource.catalog.environment_instance.to_s,
281
298
  code_id: resource.catalog.code_id,
282
299
  &block
@@ -288,15 +305,15 @@ module Puppet
288
305
  api = session.route_to(:fileserver, url: url)
289
306
 
290
307
  api.get_file_content(
291
- path: URI.unescape(url.path),
308
+ path: Puppet::Util.uri_unescape(url.path),
292
309
  environment: resource.catalog.environment_instance.to_s,
293
310
  &block
294
311
  )
295
312
  end
296
313
 
297
314
  def get_from_http_source(url, &block)
298
- client = Puppet.runtime['http']
299
- client.get(url) do |response|
315
+ client = Puppet.runtime[:http]
316
+ client.get(url, options: {include_system_store: true}) do |response|
300
317
  raise Puppet::HTTP::ResponseError.new(response) unless response.success?
301
318
 
302
319
  response.read_body(&block)
@@ -305,7 +322,12 @@ module Puppet
305
322
 
306
323
  def chunk_file_from_source(&block)
307
324
  if uri.scheme =~ /^https?/
308
- get_from_http_source(uri, &block)
325
+ # Historically puppet has not encoded the http(s) source URL before parsing
326
+ # it, for example, if the path contains spaces, then it must be URL encoded
327
+ # as %20 in the manifest. Puppet behaves the same when retrieving file
328
+ # metadata via http(s), see Puppet::Indirector::FileMetadata::Http#find.
329
+ url = URI.parse(metadata.source)
330
+ get_from_http_source(url, &block)
309
331
  elsif metadata.content_uri
310
332
  content_url = URI.parse(Puppet::Util.uri_encode(metadata.content_uri))
311
333
  get_from_content_uri_source(content_url, &block)