puppet 6.16.0-x86-mingw32 → 6.20.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 (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
@@ -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,11 +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.
50
- Puppet will update the local file if the header is newer than the modified
51
- time (mtime) of the local file.
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.
52
67
 
53
68
  Multiple `source` values can be specified as an array, and Puppet will
54
69
  use the first source that exists. This can be used to serve different
@@ -98,8 +113,8 @@ module Puppet
98
113
  # Ruby 1.9.3 and earlier have a URI bug in URI
99
114
  # to_s returns an ASCII string despite UTF-8 fragments
100
115
  # since its escaped its safe to universally call encode
101
- # URI.unescape always returns strings in the original encoding
102
- 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))
103
118
  else
104
119
  source
105
120
  end
@@ -210,7 +225,7 @@ module Puppet
210
225
  end
211
226
 
212
227
  def port
213
- (uri and uri.port) or Puppet.settings[:masterport]
228
+ (uri and uri.port) or Puppet.settings[:serverport]
214
229
  end
215
230
 
216
231
  def uri
@@ -278,7 +293,7 @@ module Puppet
278
293
  api = session.route_to(:fileserver, url: url)
279
294
 
280
295
  api.get_static_file_content(
281
- path: URI.unescape(url.path),
296
+ path: Puppet::Util.uri_unescape(url.path),
282
297
  environment: resource.catalog.environment_instance.to_s,
283
298
  code_id: resource.catalog.code_id,
284
299
  &block
@@ -290,7 +305,7 @@ module Puppet
290
305
  api = session.route_to(:fileserver, url: url)
291
306
 
292
307
  api.get_file_content(
293
- path: URI.unescape(url.path),
308
+ path: Puppet::Util.uri_unescape(url.path),
294
309
  environment: resource.catalog.environment_instance.to_s,
295
310
  &block
296
311
  )
@@ -307,7 +322,12 @@ module Puppet
307
322
 
308
323
  def chunk_file_from_source(&block)
309
324
  if uri.scheme =~ /^https?/
310
- 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)
311
331
  elsif metadata.content_uri
312
332
  content_url = URI.parse(Puppet::Util.uri_encode(metadata.content_uri))
313
333
  get_from_content_uri_source(content_url, &block)
@@ -57,7 +57,7 @@ module Puppet
57
57
  This setting is _only_ consulted if the `path` attribute is set to `false`.
58
58
 
59
59
  If this attribute is not specified, the first entry in the `server_list`
60
- configuration setting is used, followed by the value of the `masterport`
60
+ configuration setting is used, followed by the value of the `serverport`
61
61
  setting if `server_list` is not set."
62
62
  end
63
63
 
@@ -4,12 +4,12 @@
4
4
 
5
5
  module Puppet
6
6
  Type.newtype(:notify) do
7
- @doc = "Sends an arbitrary message to the agent run-time log. It's important to note that the notify resource type is not idempotent. As a result, notifications are shown as a change on every Puppet run."
7
+ @doc = "Sends an arbitrary message, specified as a string, to the agent run-time log. It's important to note that the notify resource type is not idempotent. As a result, notifications are shown as a change on every Puppet run."
8
8
 
9
9
  apply_to_all
10
10
 
11
11
  newproperty(:message, :idempotent => false) do
12
- desc "The message to be sent to the log."
12
+ desc "The message to be sent to the log. Note that the value specified must be a string."
13
13
  def sync
14
14
  message = @sensitive ? 'Sensitive [value redacted]' : self.should
15
15
  case @resource["withpath"]
@@ -47,6 +47,8 @@ module Puppet
47
47
 
48
48
  feature :configurable_timeout, "The provider can specify a minumum timeout for syncing service properties"
49
49
 
50
+ feature :manages_logon_credentials, "The provider can specify the logon credentials used for a service"
51
+
50
52
  newproperty(:enable, :required_features => :enableable) do
51
53
  desc "Whether a service should be enabled to start at boot.
52
54
  This property behaves differently depending on the platform;
@@ -116,6 +118,12 @@ module Puppet
116
118
  end
117
119
 
118
120
  def sync
121
+ property = @resource.property(:logonaccount)
122
+ if property
123
+ val = property.retrieve
124
+ property.sync unless property.safe_insync?(val)
125
+ end
126
+
119
127
  event = super()
120
128
 
121
129
  property = @resource.property(:enable)
@@ -128,6 +136,51 @@ module Puppet
128
136
  end
129
137
  end
130
138
 
139
+ newproperty(:logonaccount, :required_features => :manages_logon_credentials) do
140
+ desc "Specify an account for service logon"
141
+
142
+ munge do |value|
143
+ return value unless Puppet::Util::Platform.windows?
144
+ return 'LocalSystem' if Puppet::Util::Windows::User::localsystem?(value)
145
+
146
+ value.sub!(/^\.\\/, "#{Puppet::Util::Windows::ADSI.computer_name}\\")
147
+ user_information = Puppet::Util::Windows::SID.name_to_principal(value)
148
+ raise Puppet::Error.new("\"#{value}\" is not a valid account") unless user_information && [:SidTypeUser, :SidTypeWellKnownGroup].include?(user_information.account_type)
149
+
150
+ user_rights = Puppet::Util::Windows::User::get_rights(user_information.domain_account) unless Puppet::Util::Windows::User::default_system_account?(value)
151
+ raise Puppet::Error.new("\"#{user_information.domain_account}\" has the 'Log On As A Service' right set to denied.") if user_rights =~ /SeDenyServiceLogonRight/
152
+ raise Puppet::Error.new("\"#{user_information.domain_account}\" is missing the 'Log On As A Service' right.") unless user_rights.nil? || user_rights =~ /SeServiceLogonRight/
153
+
154
+ if user_information.domain == Puppet::Util::Windows::ADSI.computer_name
155
+ ".\\#{user_information.account}"
156
+ else
157
+ user_information.domain_account
158
+ end
159
+ end
160
+ end
161
+
162
+ newparam(:logonpassword, :required_features => :manages_logon_credentials) do
163
+ desc "Specify a password for service logon. Default value is an empty string (when logonaccount is specified)."
164
+
165
+ validate do |value|
166
+ raise Puppet::Error.new(_"The 'logonaccount' parameter is mandatory when setting 'logonpassword'.") unless @resource[:logonaccount]
167
+ raise ArgumentError, _("Passwords cannot include ':'") if value.is_a?(String) and value.include?(":")
168
+ return unless Puppet::Util::Platform.windows?
169
+
170
+ is_a_predefined_local_account = Puppet::Util::Windows::User::default_system_account?(@resource[:logonaccount]) || @resource[:logonaccount] == 'LocalSystem'
171
+
172
+ account_info = @resource[:logonaccount].split("\\")
173
+ able_to_logon = Puppet::Util::Windows::User.password_is?(account_info[1], value, account_info[0]) unless is_a_predefined_local_account
174
+
175
+ raise Puppet::Error.new("The given password is invalid for user '#{@resource[:logonaccount]}'.") unless is_a_predefined_local_account || able_to_logon
176
+
177
+ provider.logonpassword=(value)
178
+ end
179
+
180
+ sensitive true
181
+ defaultto { @resource[:logonaccount] ? "" : nil }
182
+ end
183
+
131
184
  newproperty(:flags, :required_features => :flaggable) do
132
185
  desc "Specify a string of flags to pass to the startup script."
133
186
  end
@@ -40,7 +40,10 @@ module Puppet
40
40
  implement PBKDF2 passwords with salt properties."
41
41
 
42
42
  feature :manages_solaris_rbac,
43
- "The provider can manage roles and normal users"
43
+ "The provider can manage normal users"
44
+
45
+ feature :manages_roles,
46
+ "The provider can manage roles"
44
47
 
45
48
  feature :manages_expiry,
46
49
  "The provider can manage the expiry date for a user."
@@ -97,6 +100,18 @@ module Puppet
97
100
  return :absent
98
101
  end
99
102
  end
103
+
104
+ def sync
105
+ event = super
106
+
107
+ property = @resource.property(:roles)
108
+ if property
109
+ val = property.retrieve
110
+ property.sync unless property.safe_insync?(val)
111
+ end
112
+
113
+ event
114
+ end
100
115
  end
101
116
 
102
117
  newproperty(:home) do
@@ -493,7 +508,7 @@ module Puppet
493
508
  provider.exists?
494
509
  end
495
510
 
496
- newproperty(:roles, :parent => Puppet::Property::List, :required_features => :manages_solaris_rbac) do
511
+ newproperty(:roles, :parent => Puppet::Property::List, :required_features => :manages_roles) do
497
512
  desc "The roles the user has. Multiple roles should be
498
513
  specified as an array."
499
514
 
@@ -520,7 +535,7 @@ module Puppet
520
535
  end
521
536
 
522
537
  reqs
523
- end
538
+ end unless Puppet::Util::Platform.windows?
524
539
 
525
540
  newparam(:role_membership) do
526
541
  desc "Whether specified roles should be considered the **complete list**
@@ -27,7 +27,7 @@ module Util
27
27
  extend Puppet::Util::SymbolicFileMode
28
28
 
29
29
  def default_env
30
- Puppet::Util::Platform.windows? ?
30
+ Puppet.features.microsoft_windows? ?
31
31
  :windows :
32
32
  :posix
33
33
  end
@@ -296,6 +296,11 @@ module Util
296
296
  AbsolutePathWindows = %r!^(?:(?:[A-Z]:#{slash})|(?:#{slash}#{slash}#{label}#{slash}#{label})|(?:#{slash}#{slash}\?#{slash}#{label}))!io
297
297
  AbsolutePathPosix = %r!^/!
298
298
  def absolute_path?(path, platform=nil)
299
+ unless path.is_a?(String)
300
+ Puppet.warning("Cannot check if #{path} is an absolute path because it is a '#{path.class}' and not a String'")
301
+ return false
302
+ end
303
+
299
304
  # Ruby only sets File::ALT_SEPARATOR on Windows and the Ruby standard
300
305
  # library uses that to test what platform it's on. Normally in Puppet we
301
306
  # would use Puppet.features.microsoft_windows?, but this method needs to
@@ -356,7 +361,7 @@ module Util
356
361
 
357
362
  # CGI.unescape doesn't handle space rules properly in uri paths
358
363
  # URI.unescape does, but returns strings in their original encoding
359
- path = URI.unescape(uri.path.encode(Encoding::UTF_8))
364
+ path = uri_unescape(uri.path.encode(Encoding::UTF_8))
360
365
 
361
366
  if Puppet::Util::Platform.windows? && uri.scheme == 'file'
362
367
  if uri.host && !uri.host.empty?
@@ -460,7 +465,18 @@ module Util
460
465
  # + should be left unencoded
461
466
  # URI::parse and URI::Generic.build don't like paths encoded with CGI.escape
462
467
  # URI.escape does not change / to %2F and : to %3A like CGI.escape
463
- encoded += URI.escape(parts[:path]) unless parts[:path].nil?
468
+ #
469
+ # URI.escape is obsolete in Ruby 2.7. Ignore this error until we're able to
470
+ # switch to a different escape mechanism. If this is JRuby, we can't mask
471
+ # the error message, because this isn't thread safe. JRuby shouldn't be
472
+ # using Ruby 2.7 or raising the warning anyway.
473
+ orig_verbose = $VERBOSE
474
+ $VERBOSE = nil unless Puppet::Util::Platform.jruby?
475
+ begin
476
+ encoded += URI.escape(parts[:path]) unless parts[:path].nil?
477
+ ensure
478
+ $VERBOSE = orig_verbose unless Puppet::Util::Platform.jruby?
479
+ end
464
480
 
465
481
  # each query parameter
466
482
  if !parts[:query].nil?
@@ -479,6 +495,15 @@ module Util
479
495
  end
480
496
  module_function :uri_encode
481
497
 
498
+ def uri_unescape(path)
499
+ orig_verbose = $VERBOSE
500
+ $VERBOSE = nil unless Puppet::Util::Platform.jruby?
501
+ return URI.unescape(path)
502
+ ensure
503
+ $VERBOSE = orig_verbose unless Puppet::Util::Platform.jruby?
504
+ end
505
+ module_function :uri_unescape
506
+
482
507
  def safe_posix_fork(stdin=$stdin, stdout=$stdout, stderr=$stderr, &block)
483
508
  child_pid = Kernel.fork do
484
509
  STDIN.reopen(stdin)
@@ -734,6 +759,19 @@ module Util
734
759
  Random.new(seed).rand(max)
735
760
  end
736
761
  module_function :deterministic_rand_int
762
+
763
+ # Executes a block of code, wrapped around Facter.load_external(false) and
764
+ # Facter.load_external(true) which will cause Facter to not evaluate external facts.
765
+ def skip_external_facts
766
+ return yield unless Facter.respond_to? :load_external
767
+ begin
768
+ Facter.load_external(false)
769
+ yield
770
+ ensure
771
+ Facter.load_external(true)
772
+ end
773
+ end
774
+ module_function :skip_external_facts
737
775
  end
738
776
  end
739
777
 
@@ -10,6 +10,14 @@ require 'puppet/concurrent/synchronized'
10
10
  # @api private
11
11
  class Puppet::Util::ModuleDirectoriesAdapter < Puppet::Pops::Adaptable::Adapter
12
12
  attr_accessor :directories
13
+
14
+ def self.create_adapter(env)
15
+ adapter = super(env)
16
+ adapter.directories = env.modulepath.flat_map do |dir|
17
+ Dir.glob(File.join(dir, '*', 'lib'))
18
+ end
19
+ adapter
20
+ end
13
21
  end
14
22
 
15
23
  # Autoload paths, either based on names or all at once.
@@ -119,13 +127,7 @@ class Puppet::Util::Autoload
119
127
  def module_directories(env)
120
128
  raise ArgumentError, "Autoloader requires an environment" unless env
121
129
 
122
- Puppet::Util::ModuleDirectoriesAdapter.adapt(env) do |a|
123
- a.directories ||= env.modulepath.collect do |dir|
124
- Dir.entries(dir).reject { |f| f =~ /^\./ }.collect { |f| File.join(dir, f, "lib") }
125
- end.flatten.find_all do |d|
126
- FileTest.directory?(d)
127
- end
128
- end.directories
130
+ Puppet::Util::ModuleDirectoriesAdapter.adapt(env).directories
129
131
  end
130
132
 
131
133
  # @api private
@@ -164,14 +166,7 @@ class Puppet::Util::Autoload
164
166
  # Normalize a path. This converts ALT_SEPARATOR to SEPARATOR on Windows
165
167
  # and eliminates unnecessary parts of a path.
166
168
  def cleanpath(path)
167
- # There are two cases here because cleanpath does not handle absolute
168
- # paths correctly on windows (c:\ and c:/ are treated as distinct) but
169
- # we don't want to convert relative paths to absolute
170
- if Puppet::Util.absolute_path?(path)
171
- File.expand_path(path)
172
- else
173
- Pathname.new(path).cleanpath.to_s
174
- end
169
+ Pathname.new(path).cleanpath.to_s
175
170
  end
176
171
  end
177
172
 
@@ -19,8 +19,9 @@ module Puppet::Util::CharacterEncoding
19
19
  begin
20
20
  if original_encoding == Encoding::UTF_8
21
21
  if !string_copy.valid_encoding?
22
- Puppet.debug(_("%{value} is already labeled as UTF-8 but this encoding is invalid. It cannot be transcoded by Puppet.") %
23
- { value: string.dump })
22
+ Puppet.debug {
23
+ _("%{value} is already labeled as UTF-8 but this encoding is invalid. It cannot be transcoded by Puppet.") % { value: string.dump }
24
+ }
24
25
  end
25
26
  # String is already valid UTF-8 - noop
26
27
  return string_copy
@@ -40,8 +41,9 @@ module Puppet::Util::CharacterEncoding
40
41
  # Catch both our own self-determined failure to transcode as well as any
41
42
  # error on ruby's part, ie Encoding::UndefinedConversionError on a
42
43
  # failure to encode!.
43
- Puppet.debug(_("%{error}: %{value} cannot be transcoded by Puppet.") %
44
- { error: detail.inspect, value: string.dump })
44
+ Puppet.debug {
45
+ _("%{error}: %{value} cannot be transcoded by Puppet.") % { error: detail.inspect, value: string.dump }
46
+ }
45
47
  return string_copy
46
48
  end
47
49
  end
@@ -67,7 +69,9 @@ module Puppet::Util::CharacterEncoding
67
69
  if string_copy.force_encoding(Encoding::UTF_8).valid_encoding?
68
70
  return string_copy
69
71
  else
70
- Puppet.debug(_("%{value} is not valid UTF-8 and result of overriding encoding would be invalid.") % { value: string.dump })
72
+ Puppet.debug {
73
+ _("%{value} is not valid UTF-8 and result of overriding encoding would be invalid.") % { value: string.dump }
74
+ }
71
75
  # Set copy back to its original encoding before returning
72
76
  return string_copy.force_encoding(original_encoding)
73
77
  end
@@ -7,11 +7,26 @@ require 'time'
7
7
  module Puppet::Util::Checksums
8
8
  module_function
9
9
 
10
+ KNOWN_CHECKSUMS = [
11
+ :sha256, :sha256lite,
12
+ :md5, :md5lite,
13
+ :sha1, :sha1lite,
14
+ :sha512,
15
+ :sha384,
16
+ :sha224,
17
+ :mtime, :ctime, :none
18
+ ].freeze
19
+
10
20
  # It's not a good idea to use some of these in some contexts: for example, I
11
21
  # wouldn't try bucketing a file using the :none checksum type.
12
22
  def known_checksum_types
13
- [:sha256, :sha256lite, :md5, :md5lite, :sha1, :sha1lite, :sha512, :sha384, :sha224,
14
- :mtime, :ctime, :none]
23
+ KNOWN_CHECKSUMS
24
+ end
25
+
26
+ def valid_checksum?(type, value)
27
+ !!send("#{type}?", value)
28
+ rescue NoMethodError
29
+ false
15
30
  end
16
31
 
17
32
  class FakeChecksum
@@ -223,7 +238,7 @@ module Puppet::Util::Checksums
223
238
 
224
239
  # Return the :mtime timestamp of a file.
225
240
  def mtime_file(filename)
226
- Puppet::FileSystem.stat(filename).send(:mtime)
241
+ Puppet::FileSystem.stat(filename).mtime
227
242
  end
228
243
 
229
244
  # by definition this doesn't exist
@@ -293,7 +308,7 @@ module Puppet::Util::Checksums
293
308
 
294
309
  # Return the :ctime of a file.
295
310
  def ctime_file(filename)
296
- Puppet::FileSystem.stat(filename).send(:ctime)
311
+ Puppet::FileSystem.stat(filename).ctime
297
312
  end
298
313
 
299
314
  def ctime_stream(&block)