puppet 6.16.0-x64-mingw32 → 6.20.0-x64-mingw32

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

Potentially problematic release.


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

Files changed (458) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -16
  3. data/Gemfile +6 -2
  4. data/Gemfile.lock +40 -36
  5. data/README.md +3 -4
  6. data/Rakefile +4 -12
  7. data/lib/puppet/agent.rb +2 -2
  8. data/lib/puppet/agent/locker.rb +0 -7
  9. data/lib/puppet/application.rb +10 -6
  10. data/lib/puppet/application/agent.rb +23 -6
  11. data/lib/puppet/application/apply.rb +20 -21
  12. data/lib/puppet/application/device.rb +1 -0
  13. data/lib/puppet/application/doc.rb +1 -1
  14. data/lib/puppet/application/filebucket.rb +2 -2
  15. data/lib/puppet/application/lookup.rb +16 -4
  16. data/lib/puppet/application/script.rb +1 -0
  17. data/lib/puppet/application_support.rb +7 -0
  18. data/lib/puppet/configurer.rb +70 -20
  19. data/lib/puppet/configurer/downloader.rb +31 -10
  20. data/lib/puppet/confine.rb +2 -2
  21. data/lib/puppet/confine/any.rb +1 -1
  22. data/lib/puppet/defaults.rb +113 -46
  23. data/lib/puppet/environments.rb +84 -59
  24. data/lib/puppet/face/catalog.rb +1 -1
  25. data/lib/puppet/face/config.rb +56 -16
  26. data/lib/puppet/face/epp.rb +12 -2
  27. data/lib/puppet/face/facts.rb +60 -0
  28. data/lib/puppet/face/node.rb +3 -3
  29. data/lib/puppet/face/node/clean.rb +2 -2
  30. data/lib/puppet/face/status.rb +1 -1
  31. data/lib/puppet/feature/base.rb +1 -1
  32. data/lib/puppet/ffi/posix.rb +10 -0
  33. data/lib/puppet/ffi/posix/constants.rb +14 -0
  34. data/lib/puppet/ffi/posix/functions.rb +24 -0
  35. data/lib/puppet/file_bucket/dipper.rb +1 -1
  36. data/lib/puppet/file_serving/http_metadata.rb +13 -1
  37. data/lib/puppet/file_serving/metadata.rb +4 -1
  38. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  39. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  40. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  41. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  42. data/lib/puppet/file_system/file_impl.rb +4 -4
  43. data/lib/puppet/file_system/uniquefile.rb +8 -16
  44. data/lib/puppet/forge.rb +1 -1
  45. data/lib/puppet/forge/cache.rb +1 -1
  46. data/lib/puppet/forge/repository.rb +3 -7
  47. data/lib/puppet/functions/epp.rb +1 -0
  48. data/lib/puppet/functions/inline_epp.rb +1 -0
  49. data/lib/puppet/functions/lstrip.rb +4 -4
  50. data/lib/puppet/functions/new.rb +8 -3
  51. data/lib/puppet/functions/reverse_each.rb +1 -1
  52. data/lib/puppet/functions/rstrip.rb +4 -4
  53. data/lib/puppet/functions/step.rb +1 -1
  54. data/lib/puppet/functions/strip.rb +4 -4
  55. data/lib/puppet/gettext/config.rb +5 -5
  56. data/lib/puppet/gettext/module_translations.rb +4 -4
  57. data/lib/puppet/http.rb +1 -0
  58. data/lib/puppet/http/client.rb +6 -1
  59. data/lib/puppet/http/redirector.rb +9 -7
  60. data/lib/puppet/http/resolver.rb +5 -8
  61. data/lib/puppet/http/resolver/server_list.rb +18 -36
  62. data/lib/puppet/http/resolver/settings.rb +4 -4
  63. data/lib/puppet/http/resolver/srv.rb +5 -5
  64. data/lib/puppet/http/response.rb +19 -0
  65. data/lib/puppet/http/service.rb +3 -1
  66. data/lib/puppet/http/service/compiler.rb +1 -1
  67. data/lib/puppet/http/service/file_server.rb +1 -1
  68. data/lib/puppet/http/service/puppetserver.rb +39 -0
  69. data/lib/puppet/http/session.rb +5 -4
  70. data/lib/puppet/indirector.rb +1 -1
  71. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  72. data/lib/puppet/indirector/exec.rb +1 -1
  73. data/lib/puppet/indirector/fact_search.rb +60 -0
  74. data/lib/puppet/indirector/facts/facter.rb +3 -3
  75. data/lib/puppet/indirector/facts/json.rb +27 -0
  76. data/lib/puppet/indirector/facts/yaml.rb +4 -59
  77. data/lib/puppet/indirector/file_content/rest.rb +1 -1
  78. data/lib/puppet/indirector/file_metadata/http.rb +25 -5
  79. data/lib/puppet/indirector/file_metadata/rest.rb +2 -2
  80. data/lib/puppet/indirector/hiera.rb +4 -0
  81. data/lib/puppet/indirector/indirection.rb +1 -1
  82. data/lib/puppet/indirector/json.rb +5 -1
  83. data/lib/puppet/indirector/msgpack.rb +1 -1
  84. data/lib/puppet/indirector/node/json.rb +8 -0
  85. data/lib/puppet/indirector/report/json.rb +34 -0
  86. data/lib/puppet/indirector/report/processor.rb +2 -2
  87. data/lib/puppet/indirector/request.rb +5 -5
  88. data/lib/puppet/indirector/yaml.rb +1 -1
  89. data/lib/puppet/module.rb +1 -2
  90. data/lib/puppet/module_tool/applications/installer.rb +48 -2
  91. data/lib/puppet/module_tool/errors/shared.rb +17 -2
  92. data/lib/puppet/network/format_support.rb +2 -2
  93. data/lib/puppet/network/formats.rb +2 -1
  94. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  95. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  96. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  97. data/lib/puppet/network/http/connection_adapter.rb +6 -4
  98. data/lib/puppet/network/http/route.rb +2 -2
  99. data/lib/puppet/node/environment.rb +12 -5
  100. data/lib/puppet/node/facts.rb +17 -0
  101. data/lib/puppet/pal/pal_impl.rb +90 -13
  102. data/lib/puppet/parameter.rb +1 -1
  103. data/lib/puppet/parser/ast/leaf.rb +7 -6
  104. data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
  105. data/lib/puppet/parser/compiler.rb +1 -1
  106. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  107. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  108. data/lib/puppet/parser/environment_compiler.rb +4 -1
  109. data/lib/puppet/parser/functions.rb +21 -17
  110. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  111. data/lib/puppet/parser/resource.rb +3 -2
  112. data/lib/puppet/parser/resource/param.rb +6 -0
  113. data/lib/puppet/parser/templatewrapper.rb +1 -1
  114. data/lib/puppet/parser/type_loader.rb +2 -2
  115. data/lib/puppet/pops/adaptable.rb +7 -13
  116. data/lib/puppet/pops/adapters.rb +8 -4
  117. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  118. data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
  119. data/lib/puppet/pops/evaluator/evaluator_impl.rb +27 -8
  120. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  121. data/lib/puppet/pops/issues.rb +5 -0
  122. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  123. data/lib/puppet/pops/loaders.rb +18 -11
  124. data/lib/puppet/pops/lookup/context.rb +1 -1
  125. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  126. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  127. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  128. data/lib/puppet/pops/types/iterable.rb +34 -8
  129. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  130. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  131. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  132. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  133. data/lib/puppet/provider/file/windows.rb +1 -1
  134. data/lib/puppet/provider/package/apt.rb +38 -0
  135. data/lib/puppet/provider/package/aptitude.rb +1 -1
  136. data/lib/puppet/provider/package/dpkg.rb +1 -1
  137. data/lib/puppet/provider/package/gem.rb +4 -2
  138. data/lib/puppet/provider/package/pip2.rb +17 -0
  139. data/lib/puppet/provider/package/puppet_gem.rb +5 -0
  140. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  141. data/lib/puppet/provider/package/yum.rb +2 -1
  142. data/lib/puppet/provider/package/zypper.rb +3 -0
  143. data/lib/puppet/provider/service/windows.rb +23 -7
  144. data/lib/puppet/provider/user/aix.rb +3 -3
  145. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  146. data/lib/puppet/provider/user/useradd.rb +11 -4
  147. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  148. data/lib/puppet/reference/configuration.rb +6 -5
  149. data/lib/puppet/reports/http.rb +2 -0
  150. data/lib/puppet/resource.rb +2 -1
  151. data/lib/puppet/resource/type.rb +10 -1
  152. data/lib/puppet/rest/route.rb +2 -2
  153. data/lib/puppet/settings.rb +63 -21
  154. data/lib/puppet/settings/alias_setting.rb +37 -0
  155. data/lib/puppet/settings/base_setting.rb +26 -2
  156. data/lib/puppet/ssl/ssl_context.rb +2 -2
  157. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  158. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  159. data/lib/puppet/test/test_helper.rb +18 -13
  160. data/lib/puppet/transaction.rb +2 -2
  161. data/lib/puppet/transaction/persistence.rb +1 -1
  162. data/lib/puppet/transaction/report.rb +12 -8
  163. data/lib/puppet/trusted_external.rb +29 -1
  164. data/lib/puppet/type.rb +15 -7
  165. data/lib/puppet/type/file.rb +40 -15
  166. data/lib/puppet/type/file/checksum.rb +4 -4
  167. data/lib/puppet/type/file/source.rb +32 -12
  168. data/lib/puppet/type/filebucket.rb +1 -1
  169. data/lib/puppet/type/notify.rb +2 -2
  170. data/lib/puppet/type/service.rb +53 -0
  171. data/lib/puppet/type/user.rb +18 -3
  172. data/lib/puppet/util.rb +41 -3
  173. data/lib/puppet/util/autoload.rb +10 -15
  174. data/lib/puppet/util/character_encoding.rb +9 -5
  175. data/lib/puppet/util/checksums.rb +19 -4
  176. data/lib/puppet/util/connection.rb +8 -8
  177. data/lib/puppet/util/execution.rb +2 -2
  178. data/lib/puppet/util/fact_dif.rb +62 -0
  179. data/lib/puppet/util/fileparsing.rb +2 -2
  180. data/lib/puppet/util/posix.rb +54 -5
  181. data/lib/puppet/util/provider_features.rb +1 -1
  182. data/lib/puppet/util/reference.rb +1 -1
  183. data/lib/puppet/util/rubygems.rb +5 -1
  184. data/lib/puppet/util/run_mode.rb +5 -1
  185. data/lib/puppet/util/windows.rb +1 -0
  186. data/lib/puppet/util/windows/api_types.rb +60 -33
  187. data/lib/puppet/util/windows/eventlog.rb +1 -6
  188. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  189. data/lib/puppet/util/windows/principal.rb +8 -6
  190. data/lib/puppet/util/windows/registry.rb +11 -11
  191. data/lib/puppet/util/windows/security.rb +4 -4
  192. data/lib/puppet/util/windows/service.rb +43 -26
  193. data/lib/puppet/util/windows/user.rb +242 -8
  194. data/lib/puppet/version.rb +1 -1
  195. data/locales/puppet.pot +501 -443
  196. data/man/man5/puppet.conf.5 +70 -24
  197. data/man/man8/puppet-agent.8 +8 -5
  198. data/man/man8/puppet-apply.8 +2 -2
  199. data/man/man8/puppet-catalog.8 +1 -1
  200. data/man/man8/puppet-config.8 +6 -6
  201. data/man/man8/puppet-describe.8 +1 -1
  202. data/man/man8/puppet-device.8 +2 -2
  203. data/man/man8/puppet-doc.8 +1 -1
  204. data/man/man8/puppet-epp.8 +1 -1
  205. data/man/man8/puppet-facts.8 +32 -1
  206. data/man/man8/puppet-filebucket.8 +3 -3
  207. data/man/man8/puppet-generate.8 +1 -1
  208. data/man/man8/puppet-help.8 +1 -1
  209. data/man/man8/puppet-key.8 +1 -1
  210. data/man/man8/puppet-lookup.8 +2 -2
  211. data/man/man8/puppet-man.8 +1 -1
  212. data/man/man8/puppet-module.8 +1 -1
  213. data/man/man8/puppet-node.8 +7 -4
  214. data/man/man8/puppet-parser.8 +1 -1
  215. data/man/man8/puppet-plugin.8 +1 -1
  216. data/man/man8/puppet-report.8 +4 -1
  217. data/man/man8/puppet-resource.8 +1 -1
  218. data/man/man8/puppet-script.8 +2 -2
  219. data/man/man8/puppet-ssl.8 +1 -1
  220. data/man/man8/puppet-status.8 +2 -2
  221. data/man/man8/puppet.8 +2 -2
  222. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
  223. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  224. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  225. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  226. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  227. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  228. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
  229. data/spec/integration/application/agent_spec.rb +263 -54
  230. data/spec/integration/application/apply_spec.rb +168 -149
  231. data/spec/integration/application/doc_spec.rb +16 -6
  232. data/spec/integration/application/filebucket_spec.rb +70 -21
  233. data/spec/integration/application/help_spec.rb +42 -0
  234. data/spec/integration/application/lookup_spec.rb +13 -0
  235. data/spec/integration/application/module_spec.rb +68 -0
  236. data/spec/integration/application/plugin_spec.rb +53 -3
  237. data/spec/integration/configurer_spec.rb +14 -0
  238. data/spec/integration/data_binding_spec.rb +82 -0
  239. data/spec/integration/defaults_spec.rb +20 -3
  240. data/spec/integration/directory_environments_spec.rb +17 -17
  241. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  242. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  243. data/spec/integration/network/http_pool_spec.rb +26 -9
  244. data/spec/integration/node/environment_spec.rb +1 -1
  245. data/spec/integration/parser/compiler_spec.rb +11 -0
  246. data/spec/integration/resource/type_collection_spec.rb +2 -6
  247. data/spec/integration/transaction_spec.rb +4 -9
  248. data/spec/integration/type/file_spec.rb +1 -1
  249. data/spec/integration/util/execution_spec.rb +22 -0
  250. data/spec/integration/util/windows/adsi_spec.rb +5 -3
  251. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  252. data/spec/integration/util/windows/process_spec.rb +26 -32
  253. data/spec/integration/util/windows/registry_spec.rb +7 -17
  254. data/spec/integration/util/windows/user_spec.rb +47 -5
  255. data/spec/integration/util_spec.rb +7 -33
  256. data/spec/lib/puppet_spec/matchers.rb +0 -80
  257. data/spec/lib/puppet_spec/puppetserver.rb +8 -0
  258. data/spec/lib/puppet_spec/settings.rb +6 -1
  259. data/spec/shared_contexts/types_setup.rb +2 -0
  260. data/spec/spec_helper.rb +1 -4
  261. data/spec/unit/agent_spec.rb +8 -6
  262. data/spec/unit/application/agent_spec.rb +3 -5
  263. data/spec/unit/application/config_spec.rb +224 -4
  264. data/spec/unit/application/doc_spec.rb +2 -2
  265. data/spec/unit/application/face_base_spec.rb +6 -4
  266. data/spec/unit/application/facts_spec.rb +41 -10
  267. data/spec/unit/application/filebucket_spec.rb +0 -2
  268. data/spec/unit/application/man_spec.rb +52 -0
  269. data/spec/unit/application/resource_spec.rb +3 -1
  270. data/spec/unit/application/ssl_spec.rb +15 -2
  271. data/spec/unit/application_spec.rb +60 -13
  272. data/spec/unit/configurer/downloader_spec.rb +10 -0
  273. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  274. data/spec/unit/configurer_spec.rb +86 -37
  275. data/spec/unit/confine/feature_spec.rb +1 -1
  276. data/spec/unit/confine_spec.rb +10 -3
  277. data/spec/unit/context/trusted_information_spec.rb +10 -4
  278. data/spec/unit/defaults_spec.rb +20 -1
  279. data/spec/unit/environments_spec.rb +176 -32
  280. data/spec/unit/face/config_spec.rb +65 -12
  281. data/spec/unit/face/node_spec.rb +2 -13
  282. data/spec/unit/file_serving/configuration/parser_spec.rb +0 -1
  283. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  284. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  285. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  286. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  287. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  288. data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
  289. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  290. data/spec/unit/file_system/uniquefile_spec.rb +18 -0
  291. data/spec/unit/file_system_spec.rb +1 -2
  292. data/spec/unit/forge/module_release_spec.rb +2 -7
  293. data/spec/unit/functions/inline_epp_spec.rb +26 -1
  294. data/spec/unit/http/client_spec.rb +64 -9
  295. data/spec/unit/http/resolver_spec.rb +24 -5
  296. data/spec/unit/http/response_spec.rb +6 -0
  297. data/spec/unit/http/service/ca_spec.rb +2 -3
  298. data/spec/unit/http/service/compiler_spec.rb +51 -3
  299. data/spec/unit/http/service/file_server_spec.rb +2 -3
  300. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  301. data/spec/unit/http/service/report_spec.rb +2 -3
  302. data/spec/unit/http/service_spec.rb +1 -2
  303. data/spec/unit/http/session_spec.rb +8 -21
  304. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  305. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  306. data/spec/unit/indirector/face_spec.rb +0 -1
  307. data/spec/unit/indirector/facts/facter_spec.rb +0 -1
  308. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  309. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  310. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
  311. data/spec/unit/indirector/file_metadata/http_spec.rb +27 -0
  312. data/spec/unit/indirector/indirection_spec.rb +8 -12
  313. data/spec/unit/indirector/json_spec.rb +8 -8
  314. data/spec/unit/indirector/key/file_spec.rb +0 -1
  315. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  316. data/spec/unit/indirector/node/json_spec.rb +33 -0
  317. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  318. data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
  319. data/spec/unit/indirector/report/yaml_spec.rb +72 -8
  320. data/spec/unit/indirector/request_spec.rb +5 -5
  321. data/spec/unit/indirector/rest_spec.rb +1 -1
  322. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  323. data/spec/unit/indirector/yaml_spec.rb +7 -7
  324. data/spec/unit/indirector_spec.rb +2 -2
  325. data/spec/unit/interface_spec.rb +3 -3
  326. data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
  327. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  328. data/spec/unit/network/authconfig_spec.rb +0 -3
  329. data/spec/unit/network/format_support_spec.rb +3 -2
  330. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -10
  331. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  332. data/spec/unit/network/http/connection_spec.rb +42 -32
  333. data/spec/unit/network/http/handler_spec.rb +0 -5
  334. data/spec/unit/node/environment_spec.rb +18 -1
  335. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  336. data/spec/unit/parser/compiler_spec.rb +3 -19
  337. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  338. data/spec/unit/parser/resource_spec.rb +14 -8
  339. data/spec/unit/parser/scope_spec.rb +1 -1
  340. data/spec/unit/parser/templatewrapper_spec.rb +4 -3
  341. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
  342. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  343. data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
  344. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  345. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  346. data/spec/unit/property_spec.rb +1 -0
  347. data/spec/unit/provider/exec_spec.rb +4 -3
  348. data/spec/unit/provider/nameservice_spec.rb +66 -65
  349. data/spec/unit/provider/package/apt_spec.rb +76 -3
  350. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  351. data/spec/unit/provider/package/base_spec.rb +6 -5
  352. data/spec/unit/provider/package/dpkg_spec.rb +22 -7
  353. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  354. data/spec/unit/provider/package/pacman_spec.rb +18 -12
  355. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  356. data/spec/unit/provider/package/pip_spec.rb +6 -11
  357. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
  358. data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
  359. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  360. data/spec/unit/provider/package/yum_spec.rb +31 -0
  361. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  362. data/spec/unit/provider/service/base_spec.rb +2 -4
  363. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  364. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  365. data/spec/unit/provider/service/debian_spec.rb +3 -5
  366. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  367. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  368. data/spec/unit/provider/service/init_spec.rb +45 -5
  369. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  370. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  371. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  372. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  373. data/spec/unit/provider/service/runit_spec.rb +2 -1
  374. data/spec/unit/provider/service/smf_spec.rb +1 -1
  375. data/spec/unit/provider/service/src_spec.rb +3 -5
  376. data/spec/unit/provider/service/systemd_spec.rb +3 -6
  377. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  378. data/spec/unit/provider/service/windows_spec.rb +50 -14
  379. data/spec/unit/provider/user/aix_spec.rb +5 -0
  380. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  381. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  382. data/spec/unit/provider/user/pw_spec.rb +2 -0
  383. data/spec/unit/provider/user/useradd_spec.rb +23 -16
  384. data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
  385. data/spec/unit/provider_spec.rb +8 -10
  386. data/spec/unit/puppet_pal_2pec.rb +40 -0
  387. data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
  388. data/spec/unit/reports/store_spec.rb +17 -13
  389. data/spec/unit/resource/capability_finder_spec.rb +6 -1
  390. data/spec/unit/resource/type_spec.rb +1 -1
  391. data/spec/unit/resource_spec.rb +14 -13
  392. data/spec/unit/rest/route_spec.rb +4 -4
  393. data/spec/unit/settings_spec.rb +576 -239
  394. data/spec/unit/ssl/base_spec.rb +0 -1
  395. data/spec/unit/ssl/host_spec.rb +0 -5
  396. data/spec/unit/ssl/ssl_provider_spec.rb +82 -50
  397. data/spec/unit/test/test_helper_spec.rb +17 -0
  398. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
  399. data/spec/unit/transaction/event_manager_spec.rb +14 -11
  400. data/spec/unit/transaction/persistence_spec.rb +15 -0
  401. data/spec/unit/transaction/report_spec.rb +3 -1
  402. data/spec/unit/transaction_spec.rb +13 -4
  403. data/spec/unit/type/file/content_spec.rb +0 -1
  404. data/spec/unit/type/file/selinux_spec.rb +0 -2
  405. data/spec/unit/type/file/source_spec.rb +4 -4
  406. data/spec/unit/type/file_spec.rb +122 -102
  407. data/spec/unit/type/filebucket_spec.rb +1 -1
  408. data/spec/unit/type/group_spec.rb +13 -6
  409. data/spec/unit/type/resources_spec.rb +7 -7
  410. data/spec/unit/type/service_spec.rb +210 -1
  411. data/spec/unit/type/tidy_spec.rb +0 -1
  412. data/spec/unit/type/user_spec.rb +31 -2
  413. data/spec/unit/type_spec.rb +52 -2
  414. data/spec/unit/util/at_fork_spec.rb +2 -2
  415. data/spec/unit/util/autoload_spec.rb +5 -1
  416. data/spec/unit/util/backups_spec.rb +1 -2
  417. data/spec/unit/util/character_encoding_spec.rb +4 -4
  418. data/spec/unit/util/checksums_spec.rb +16 -0
  419. data/spec/unit/util/command_line_spec.rb +11 -6
  420. data/spec/unit/util/execution_spec.rb +15 -11
  421. data/spec/unit/util/inifile_spec.rb +6 -14
  422. data/spec/unit/util/log_spec.rb +8 -7
  423. data/spec/unit/util/logging_spec.rb +3 -3
  424. data/spec/unit/util/posix_spec.rb +363 -15
  425. data/spec/unit/util/rubygems_spec.rb +2 -2
  426. data/spec/unit/util/run_mode_spec.rb +6 -6
  427. data/spec/unit/util/selinux_spec.rb +76 -52
  428. data/spec/unit/util/storage_spec.rb +3 -1
  429. data/spec/unit/util/suidmanager_spec.rb +44 -41
  430. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  431. data/spec/unit/util/windows/service_spec.rb +4 -4
  432. data/spec/unit/util_spec.rb +16 -9
  433. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  434. metadata +52 -53
  435. data/spec/integration/faces/config_spec.rb +0 -91
  436. data/spec/integration/faces/documentation_spec.rb +0 -57
  437. data/spec/integration/file_bucket/file_spec.rb +0 -50
  438. data/spec/integration/file_serving/content_spec.rb +0 -7
  439. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  440. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  441. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  442. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  443. data/spec/integration/module_tool/forge_spec.rb +0 -51
  444. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  445. data/spec/integration/provider/service/init_spec.rb +0 -48
  446. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  447. data/spec/integration/provider/service/windows_spec.rb +0 -50
  448. data/spec/integration/reference/providers_spec.rb +0 -21
  449. data/spec/integration/reports_spec.rb +0 -13
  450. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  451. data/spec/integration/ssl/host_spec.rb +0 -72
  452. data/spec/integration/ssl/key_spec.rb +0 -99
  453. data/spec/integration/test/test_helper_spec.rb +0 -31
  454. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  455. data/spec/unit/face/catalog_spec.rb +0 -6
  456. data/spec/unit/face/man_spec.rb +0 -25
  457. data/spec/unit/face/module_spec.rb +0 -3
  458. data/spec/unit/man_spec.rb +0 -31
@@ -0,0 +1,37 @@
1
+ class Puppet::Settings::AliasSetting
2
+ attr_reader :name, :alias_name
3
+
4
+ def initialize(args = {})
5
+ @name = args[:name]
6
+ @alias_name = args[:alias_for]
7
+ @alias_for = Puppet.settings.setting(alias_name)
8
+ end
9
+
10
+ def optparse_args
11
+ args = @alias_for.optparse_args
12
+ args[0].gsub!(alias_name.to_s, name.to_s)
13
+ args
14
+ end
15
+
16
+ def getopt_args
17
+ args = @alias_for.getopt_args
18
+ args[0].gsub!(alias_name.to_s, name.to_s)
19
+ args
20
+ end
21
+
22
+ def type
23
+ :alias
24
+ end
25
+
26
+ def method_missing(method, *args)
27
+ begin
28
+ alias_for.send(method, *args)
29
+ rescue => e
30
+ Puppet.log_exception(self.class, e.message)
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ attr_reader :alias_for
37
+ end
@@ -1,3 +1,4 @@
1
+ require 'set'
1
2
  require 'puppet/settings/errors'
2
3
 
3
4
  # The base setting type
@@ -5,27 +6,50 @@ class Puppet::Settings::BaseSetting
5
6
  attr_accessor :name, :desc, :section, :default, :call_hook
6
7
  attr_reader :short, :deprecated
7
8
 
9
+ # Hooks are called during different parts of the settings lifecycle:
10
+ #
11
+ # * :on_write_only - This is the default hook type. The hook will be called
12
+ # if its value is set in `main` or programmatically. If its value is set in
13
+ # a section that doesn't match the application's run mode, it will be
14
+ # ignored entirely. If the section does match the run mode, the value will
15
+ # be used, but the hook will not be called!
16
+ #
17
+ # * :on_define_and_write - The hook behaves the same as above, except it is
18
+ # also called immediately when the setting is defined in
19
+ # {Puppet::Settings.define_settings}. In that case, the hook receives the
20
+ # default value as specified.
21
+ #
22
+ # * :on_initialize_and_write - The hook will be called if the value is set in
23
+ # `main`, the section that matches the run mode, or programmatically.
24
+ #
25
+ HOOK_TYPES = Set.new([:on_define_and_write, :on_initialize_and_write, :on_write_only]).freeze
26
+
8
27
  def self.available_call_hook_values
9
- [:on_define_and_write, :on_initialize_and_write, :on_write_only]
28
+ HOOK_TYPES.to_a
10
29
  end
11
30
 
31
+ # Registers a hook to be called later based on the type of hook specified in `value`.
32
+ #
33
+ # @param value [Symbol] One of {HOOK_TYPES}
12
34
  def call_hook=(value)
13
35
  if value.nil?
14
36
  #TRANSLATORS ':%{name}', ':call_hook', and ':on_write_only' should not be translated
15
37
  Puppet.warning _("Setting :%{name} :call_hook is nil, defaulting to :on_write_only") % { name: name }
16
38
  value = :on_write_only
17
39
  end
18
- unless self.class.available_call_hook_values.include?(value)
40
+ unless HOOK_TYPES.include?(value)
19
41
  #TRANSLATORS 'call_hook' is a Puppet option name and should not be translated
20
42
  raise ArgumentError, _("Invalid option %{value} for call_hook") % { value: value }
21
43
  end
22
44
  @call_hook = value
23
45
  end
24
46
 
47
+ # @see {HOOK_TYPES}
25
48
  def call_hook_on_define?
26
49
  call_hook == :on_define_and_write
27
50
  end
28
51
 
52
+ # @see {HOOK_TYPES}
29
53
  def call_hook_on_initialize?
30
54
  call_hook == :on_initialize_and_write
31
55
  end
@@ -22,9 +22,9 @@ module Puppet::SSL
22
22
  # This is an idiom to initialize a Struct from keyword
23
23
  # arguments. Ruby 2.5 introduced `keyword_init: true` for
24
24
  # that purpose, but we need to support older versions.
25
- def initialize(**kwargs)
25
+ def initialize(kwargs = {})
26
26
  super({})
27
- DEFAULTS.merge(kwargs).each { |k,v| self[k] = v }
27
+ DEFAULTS.merge(**kwargs).each { |k,v| self[k] = v }
28
28
  end
29
29
  end
30
30
  end
@@ -46,13 +46,32 @@ class Puppet::SSL::SSLProvider
46
46
  # perform revocation checking.
47
47
  #
48
48
  # @param cacerts [Array<OpenSSL::X509::Certificate>] Array of trusted CA certs
49
+ # @param path [String, nil] A file containing additional trusted CA certs.
49
50
  # @return [Puppet::SSL::SSLContext] A context to use to create connections
50
51
  # @raise (see #create_context)
51
52
  # @api private
52
- def create_system_context(cacerts:)
53
+ def create_system_context(cacerts:, path: Puppet[:ssl_trust_store])
53
54
  store = create_x509_store(cacerts, [], false)
54
55
  store.set_default_paths
55
56
 
57
+ if path
58
+ stat = Puppet::FileSystem.stat(path)
59
+ if stat
60
+ if stat.ftype == 'file'
61
+ # don't add empty files as ruby/openssl will raise
62
+ if stat.size > 0
63
+ begin
64
+ store.add_file(path)
65
+ rescue => e
66
+ Puppet.err(_("Failed to add '%{path}' as a trusted CA file: %{detail}" % { path: path, detail: e.message }, e))
67
+ end
68
+ end
69
+ else
70
+ Puppet.warning(_("The 'ssl_trust_store' setting does not refer to a file and will be ignored: '%{path}'" % { path: path }))
71
+ end
72
+ end
73
+ end
74
+
56
75
  Puppet::SSL::SSLContext.new(store: store, cacerts: cacerts, crls: [], revocation: false).freeze
57
76
  end
58
77
 
@@ -104,7 +104,7 @@ class Puppet::SSL::Validator::DefaultValidator #< class Puppet::SSL::Validator
104
104
  crl = store_context.current_crl
105
105
  if crl
106
106
  if crl.last_update && crl.last_update < Time.now + FIVE_MINUTES_AS_SECONDS
107
- Puppet.debug("Ignoring CRL not yet valid, current time #{Time.now.utc}, CRL last updated #{crl.last_update.utc}")
107
+ Puppet.debug { "Ignoring CRL not yet valid, current time #{Time.now.utc}, CRL last updated #{crl.last_update.utc}" }
108
108
  preverify_ok = true
109
109
  else
110
110
  @verify_errors << "#{error_string} for #{crl.issuer.to_utf8}"
@@ -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
 
@@ -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
@@ -224,7 +226,7 @@ class Puppet::Transaction::Report
224
226
  @external_times ||= {}
225
227
  @host = Puppet[:node_name_value]
226
228
  @time = start_time
227
- @report_format = 10
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
@@ -116,8 +116,10 @@ class Type
116
116
 
117
117
  # Allow declaring that a type is actually a capability
118
118
  class << self
119
+ # @deprecated application orchestration will be removed in puppet 7
119
120
  attr_accessor :is_capability
120
121
 
122
+ # @deprecated application orchestration will be removed in puppet 7
121
123
  def is_capability?
122
124
  c = is_capability
123
125
  c.nil? ? false : c
@@ -129,6 +131,8 @@ class Type
129
131
  # represent application instances, this implementation always returns
130
132
  # +false+. Having this method though makes code checking whether a
131
133
  # resource is an application instance simpler
134
+ #
135
+ # @deprecated application orchestration will be removed in puppet 7
132
136
  def self.application?
133
137
  false
134
138
  end
@@ -749,7 +753,7 @@ class Type
749
753
  # @param options [Hash] options merged with a fixed set of options defined by this method, passed on to {Puppet::Transaction::Event}.
750
754
  # @return [Puppet::Transaction::Event] the created event
751
755
  def event(options = {})
752
- 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))
753
757
  end
754
758
 
755
759
  # @return [Object, nil] Returns the 'should' (wanted state) value for a specified property, or nil if the
@@ -1205,15 +1209,17 @@ class Type
1205
1209
  provider.instances.collect do |instance|
1206
1210
  # We always want to use the "first" provider instance we find, unless the resource
1207
1211
  # is already managed and has a different provider set
1208
- other = provider_instances[instance.name]
1212
+ title = instance.respond_to?(:title) ? instance.title : instance.name
1213
+ other = provider_instances[title]
1209
1214
  if other
1210
- Puppet.debug "%s %s found in both %s and %s; skipping the %s version" %
1211
- [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
+ }
1212
1218
  next
1213
1219
  end
1214
- provider_instances[instance.name] = instance
1220
+ provider_instances[title] = instance
1215
1221
 
1216
- result = new(:name => instance.name, :provider => instance)
1222
+ result = new(:name => instance.name, :provider => instance, :title => title)
1217
1223
  properties.each { |name| result.newattr(name) }
1218
1224
  result
1219
1225
  end
@@ -1714,6 +1720,7 @@ class Type
1714
1720
  }
1715
1721
  end
1716
1722
 
1723
+ # @deprecated application orchestration will be removed in puppet 7
1717
1724
  newmetaparam(:export, :parent => RelationshipMetaparam, :attributes => {:direction => :out, :events => :NONE}) do
1718
1725
  desc <<EOS
1719
1726
  Export a capability resource.
@@ -1739,6 +1746,7 @@ web { server:
1739
1746
  EOS
1740
1747
  end
1741
1748
 
1749
+ # @deprecated application orchestration will be removed in puppet 7
1742
1750
  newmetaparam(:consume, :parent => RelationshipMetaparam, :attributes => {:direction => :in, :events => :NONE}) do
1743
1751
  desc <<EOS
1744
1752
  Consume a capability resource.
@@ -1888,7 +1896,7 @@ end
1888
1896
  name = name.intern
1889
1897
 
1890
1898
  if unprovide(name)
1891
- Puppet.debug "Reloading #{name} #{self.name} provider"
1899
+ Puppet.debug { "Reloading #{name} #{self.name} provider" }
1892
1900
  end
1893
1901
 
1894
1902
  pname = options[:parent]
@@ -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?