puppet 6.13.0-x86-mingw32 → 6.18.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 (461) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -7
  3. data/CONTRIBUTING.md +7 -13
  4. data/Gemfile +4 -2
  5. data/Gemfile.lock +36 -32
  6. data/README.md +17 -24
  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/application/agent.rb +26 -17
  11. data/lib/puppet/application/apply.rb +18 -20
  12. data/lib/puppet/application/describe.rb +7 -5
  13. data/lib/puppet/application/device.rb +2 -2
  14. data/lib/puppet/application/filebucket.rb +19 -15
  15. data/lib/puppet/application/lookup.rb +16 -4
  16. data/lib/puppet/application/plugin.rb +1 -0
  17. data/lib/puppet/application/ssl.rb +4 -4
  18. data/lib/puppet/configurer.rb +58 -57
  19. data/lib/puppet/configurer/downloader.rb +31 -10
  20. data/lib/puppet/configurer/plugin_handler.rb +10 -1
  21. data/lib/puppet/confine.rb +2 -2
  22. data/lib/puppet/confine/any.rb +1 -1
  23. data/lib/puppet/context/trusted_information.rb +14 -8
  24. data/lib/puppet/daemon.rb +13 -27
  25. data/lib/puppet/defaults.rb +92 -12
  26. data/lib/puppet/environments.rb +4 -5
  27. data/lib/puppet/face/facts.rb +1 -1
  28. data/lib/puppet/face/help.rb +29 -3
  29. data/lib/puppet/face/module/search.rb +5 -0
  30. data/lib/puppet/face/plugin.rb +2 -2
  31. data/lib/puppet/feature/base.rb +1 -1
  32. data/lib/puppet/file_serving/http_metadata.rb +14 -2
  33. data/lib/puppet/file_serving/metadata.rb +4 -1
  34. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  35. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  36. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  37. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  38. data/lib/puppet/file_system/file_impl.rb +17 -13
  39. data/lib/puppet/file_system/uniquefile.rb +12 -16
  40. data/lib/puppet/forge.rb +1 -1
  41. data/lib/puppet/forge/cache.rb +1 -1
  42. data/lib/puppet/forge/repository.rb +4 -7
  43. data/lib/puppet/functions/call.rb +1 -1
  44. data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
  45. data/lib/puppet/functions/filter.rb +1 -0
  46. data/lib/puppet/functions/lstrip.rb +4 -4
  47. data/lib/puppet/functions/reduce.rb +2 -4
  48. data/lib/puppet/functions/reverse_each.rb +1 -1
  49. data/lib/puppet/functions/rstrip.rb +4 -4
  50. data/lib/puppet/functions/step.rb +1 -1
  51. data/lib/puppet/functions/strip.rb +4 -4
  52. data/lib/puppet/gettext/config.rb +5 -5
  53. data/lib/puppet/gettext/module_translations.rb +4 -4
  54. data/lib/puppet/http.rb +3 -0
  55. data/lib/puppet/http/client.rb +263 -73
  56. data/lib/puppet/http/external_client.rb +90 -0
  57. data/lib/puppet/http/redirector.rb +43 -7
  58. data/lib/puppet/http/resolver.rb +46 -3
  59. data/lib/puppet/http/resolver/server_list.rb +76 -16
  60. data/lib/puppet/http/resolver/settings.rb +23 -3
  61. data/lib/puppet/http/resolver/srv.rb +29 -3
  62. data/lib/puppet/http/response.rb +87 -1
  63. data/lib/puppet/http/retry_after_handler.rb +39 -0
  64. data/lib/puppet/http/service.rb +97 -12
  65. data/lib/puppet/http/service/ca.rb +76 -14
  66. data/lib/puppet/http/service/compiler.rb +249 -16
  67. data/lib/puppet/http/service/file_server.rb +141 -20
  68. data/lib/puppet/http/service/report.rb +47 -17
  69. data/lib/puppet/http/session.rb +96 -7
  70. data/lib/puppet/indirector.rb +1 -1
  71. data/lib/puppet/indirector/catalog/rest.rb +34 -0
  72. data/lib/puppet/indirector/exec.rb +1 -1
  73. data/lib/puppet/indirector/facts/facter.rb +3 -3
  74. data/lib/puppet/indirector/facts/rest.rb +42 -0
  75. data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
  76. data/lib/puppet/indirector/file_content/http.rb +5 -0
  77. data/lib/puppet/indirector/file_content/rest.rb +30 -0
  78. data/lib/puppet/indirector/file_metadata/http.rb +28 -8
  79. data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
  80. data/lib/puppet/indirector/hiera.rb +4 -0
  81. data/lib/puppet/indirector/indirection.rb +1 -1
  82. data/lib/puppet/indirector/node/rest.rb +24 -0
  83. data/lib/puppet/indirector/report/processor.rb +2 -2
  84. data/lib/puppet/indirector/report/rest.rb +19 -0
  85. data/lib/puppet/indirector/report/yaml.rb +23 -0
  86. data/lib/puppet/indirector/request.rb +1 -1
  87. data/lib/puppet/indirector/rest.rb +12 -0
  88. data/lib/puppet/indirector/status/rest.rb +18 -0
  89. data/lib/puppet/loaders.rb +6 -0
  90. data/lib/puppet/metatype/manager.rb +80 -80
  91. data/lib/puppet/module.rb +1 -2
  92. data/lib/puppet/network/format_support.rb +2 -2
  93. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  94. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  95. data/lib/puppet/network/http/base_pool.rb +7 -2
  96. data/lib/puppet/network/http/compression.rb +7 -0
  97. data/lib/puppet/network/http/connection.rb +2 -0
  98. data/lib/puppet/network/http/connection_adapter.rb +184 -0
  99. data/lib/puppet/network/http/nocache_pool.rb +1 -0
  100. data/lib/puppet/network/http/pool.rb +8 -5
  101. data/lib/puppet/network/http/route.rb +2 -2
  102. data/lib/puppet/network/http_pool.rb +2 -1
  103. data/lib/puppet/node/environment.rb +22 -5
  104. data/lib/puppet/pal/catalog_compiler.rb +5 -0
  105. data/lib/puppet/pal/pal_impl.rb +30 -31
  106. data/lib/puppet/parameter.rb +1 -1
  107. data/lib/puppet/parser/ast/leaf.rb +5 -5
  108. data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
  109. data/lib/puppet/parser/compiler.rb +43 -33
  110. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  111. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  112. data/lib/puppet/parser/environment_compiler.rb +4 -1
  113. data/lib/puppet/parser/functions.rb +18 -9
  114. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  115. data/lib/puppet/parser/functions/filter.rb +1 -0
  116. data/lib/puppet/parser/resource.rb +3 -2
  117. data/lib/puppet/parser/resource/param.rb +6 -0
  118. data/lib/puppet/parser/type_loader.rb +2 -2
  119. data/lib/puppet/pops/adaptable.rb +7 -13
  120. data/lib/puppet/pops/adapters.rb +8 -4
  121. data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -5
  122. data/lib/puppet/pops/issues.rb +5 -0
  123. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  124. data/lib/puppet/pops/loaders.rb +24 -15
  125. data/lib/puppet/pops/lookup/context.rb +1 -1
  126. data/lib/puppet/pops/lookup/hiera_config.rb +14 -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/validation/checker4_0.rb +29 -15
  130. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  131. data/lib/puppet/provider/file/windows.rb +1 -1
  132. data/lib/puppet/provider/group/groupadd.rb +9 -4
  133. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  134. data/lib/puppet/provider/package/aix.rb +17 -2
  135. data/lib/puppet/provider/package/apt.rb +98 -1
  136. data/lib/puppet/provider/package/aptitude.rb +1 -1
  137. data/lib/puppet/provider/package/dnfmodule.rb +61 -14
  138. data/lib/puppet/provider/package/gem.rb +45 -9
  139. data/lib/puppet/provider/package/pacman.rb +2 -5
  140. data/lib/puppet/provider/package/pip.rb +143 -48
  141. data/lib/puppet/provider/package/pip3.rb +0 -2
  142. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  143. data/lib/puppet/provider/package/pkgng.rb +16 -4
  144. data/lib/puppet/provider/package/portage.rb +2 -2
  145. data/lib/puppet/provider/package/puppet_gem.rb +11 -2
  146. data/lib/puppet/provider/package/rpm.rb +6 -213
  147. data/lib/puppet/provider/package/yum.rb +100 -20
  148. data/lib/puppet/provider/package/zypper.rb +62 -1
  149. data/lib/puppet/provider/service/systemd.rb +22 -4
  150. data/lib/puppet/provider/service/windows.rb +23 -7
  151. data/lib/puppet/provider/user/aix.rb +1 -1
  152. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  153. data/lib/puppet/provider/user/useradd.rb +16 -5
  154. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  155. data/lib/puppet/reports/http.rb +15 -9
  156. data/lib/puppet/resource.rb +2 -1
  157. data/lib/puppet/resource/type.rb +8 -0
  158. data/lib/puppet/resource/type_collection.rb +20 -16
  159. data/lib/puppet/runtime.rb +31 -1
  160. data/lib/puppet/settings.rb +3 -1
  161. data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
  162. data/lib/puppet/ssl.rb +1 -0
  163. data/lib/puppet/ssl/host.rb +4 -4
  164. data/lib/puppet/ssl/oids.rb +1 -0
  165. data/lib/puppet/ssl/ssl_context.rb +2 -2
  166. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  167. data/lib/puppet/ssl/state_machine.rb +81 -35
  168. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  169. data/lib/puppet/ssl/verifier_adapter.rb +9 -1
  170. data/lib/puppet/test/test_helper.rb +21 -14
  171. data/lib/puppet/transaction.rb +2 -2
  172. data/lib/puppet/transaction/persistence.rb +1 -1
  173. data/lib/puppet/transaction/report.rb +3 -3
  174. data/lib/puppet/trusted_external.rb +29 -1
  175. data/lib/puppet/type.rb +21 -8
  176. data/lib/puppet/type/file.rb +51 -13
  177. data/lib/puppet/type/file/checksum.rb +4 -4
  178. data/lib/puppet/type/file/source.rb +75 -64
  179. data/lib/puppet/type/notify.rb +2 -2
  180. data/lib/puppet/type/package.rb +41 -3
  181. data/lib/puppet/type/service.rb +59 -8
  182. data/lib/puppet/type/user.rb +19 -29
  183. data/lib/puppet/util.rb +41 -3
  184. data/lib/puppet/util/at_fork.rb +1 -1
  185. data/lib/puppet/util/autoload.rb +13 -25
  186. data/lib/puppet/util/character_encoding.rb +9 -5
  187. data/lib/puppet/util/checksums.rb +19 -4
  188. data/lib/puppet/util/execution.rb +2 -2
  189. data/lib/puppet/util/fileparsing.rb +2 -2
  190. data/lib/puppet/util/instance_loader.rb +14 -10
  191. data/lib/puppet/util/log/destinations.rb +1 -10
  192. data/lib/puppet/util/package/version/debian.rb +175 -0
  193. data/lib/puppet/util/package/version/gem.rb +15 -0
  194. data/lib/puppet/util/package/version/pip.rb +167 -0
  195. data/lib/puppet/util/package/version/range.rb +53 -0
  196. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  197. data/lib/puppet/util/package/version/range/gt.rb +14 -0
  198. data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
  199. data/lib/puppet/util/package/version/range/lt.rb +14 -0
  200. data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
  201. data/lib/puppet/util/package/version/range/min_max.rb +21 -0
  202. data/lib/puppet/util/package/version/range/simple.rb +11 -0
  203. data/lib/puppet/util/package/version/rpm.rb +73 -0
  204. data/lib/puppet/util/pidlock.rb +13 -7
  205. data/lib/puppet/util/platform.rb +5 -0
  206. data/lib/puppet/util/provider_features.rb +1 -1
  207. data/lib/puppet/util/reference.rb +1 -1
  208. data/lib/puppet/util/rpm_compare.rb +193 -0
  209. data/lib/puppet/util/windows.rb +1 -0
  210. data/lib/puppet/util/windows/adsi.rb +2 -2
  211. data/lib/puppet/util/windows/api_types.rb +60 -33
  212. data/lib/puppet/util/windows/eventlog.rb +1 -6
  213. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  214. data/lib/puppet/util/windows/principal.rb +8 -6
  215. data/lib/puppet/util/windows/process.rb +15 -14
  216. data/lib/puppet/util/windows/registry.rb +11 -11
  217. data/lib/puppet/util/windows/security.rb +5 -4
  218. data/lib/puppet/util/windows/service.rb +43 -26
  219. data/lib/puppet/util/windows/sid.rb +3 -3
  220. data/lib/puppet/util/windows/user.rb +242 -8
  221. data/lib/puppet/version.rb +1 -1
  222. data/locales/puppet.pot +641 -511
  223. data/man/man5/puppet.conf.5 +75 -10
  224. data/man/man8/puppet-agent.8 +7 -7
  225. data/man/man8/puppet-apply.8 +1 -1
  226. data/man/man8/puppet-catalog.8 +1 -1
  227. data/man/man8/puppet-config.8 +1 -1
  228. data/man/man8/puppet-describe.8 +1 -1
  229. data/man/man8/puppet-device.8 +2 -2
  230. data/man/man8/puppet-doc.8 +1 -1
  231. data/man/man8/puppet-epp.8 +1 -1
  232. data/man/man8/puppet-facts.8 +1 -1
  233. data/man/man8/puppet-filebucket.8 +17 -2
  234. data/man/man8/puppet-generate.8 +1 -1
  235. data/man/man8/puppet-help.8 +6 -3
  236. data/man/man8/puppet-key.8 +1 -1
  237. data/man/man8/puppet-lookup.8 +2 -2
  238. data/man/man8/puppet-man.8 +1 -1
  239. data/man/man8/puppet-module.8 +4 -1
  240. data/man/man8/puppet-node.8 +1 -1
  241. data/man/man8/puppet-parser.8 +1 -1
  242. data/man/man8/puppet-plugin.8 +1 -1
  243. data/man/man8/puppet-report.8 +1 -1
  244. data/man/man8/puppet-resource.8 +1 -1
  245. data/man/man8/puppet-script.8 +1 -1
  246. data/man/man8/puppet-ssl.8 +2 -2
  247. data/man/man8/puppet-status.8 +1 -1
  248. data/man/man8/puppet.8 +2 -2
  249. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  250. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  251. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
  252. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
  253. data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
  254. data/spec/fixtures/ssl/unknown-ca.pem +59 -0
  255. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  256. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  257. data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
  258. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  259. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  260. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  261. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  262. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +1 -67
  263. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +1 -69
  264. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -69
  265. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -67
  266. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -65
  267. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -67
  268. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +1 -67
  269. data/spec/integration/application/agent_spec.rb +475 -0
  270. data/spec/integration/application/apply_spec.rb +279 -150
  271. data/spec/integration/application/config_spec.rb +74 -0
  272. data/spec/integration/application/doc_spec.rb +16 -6
  273. data/spec/integration/application/filebucket_spec.rb +239 -0
  274. data/spec/integration/application/help_spec.rb +42 -0
  275. data/spec/integration/application/lookup_spec.rb +13 -0
  276. data/spec/integration/application/module_spec.rb +68 -0
  277. data/spec/integration/application/plugin_spec.rb +123 -0
  278. data/spec/integration/data_binding_spec.rb +82 -0
  279. data/spec/integration/defaults_spec.rb +1 -2
  280. data/spec/integration/directory_environments_spec.rb +17 -17
  281. data/spec/integration/http/client_spec.rb +47 -37
  282. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  283. data/spec/integration/indirector/report/yaml.rb +83 -0
  284. data/spec/integration/network/http_pool_spec.rb +93 -20
  285. data/spec/integration/node/environment_spec.rb +15 -0
  286. data/spec/integration/parser/compiler_spec.rb +11 -0
  287. data/spec/integration/type/file_spec.rb +1 -1
  288. data/spec/integration/util/execution_spec.rb +22 -0
  289. data/spec/integration/util/windows/adsi_spec.rb +6 -1
  290. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  291. data/spec/integration/util/windows/process_spec.rb +26 -32
  292. data/spec/integration/util/windows/registry_spec.rb +7 -7
  293. data/spec/integration/util/windows/user_spec.rb +47 -5
  294. data/spec/integration/util_spec.rb +7 -33
  295. data/spec/lib/puppet/test_ca.rb +2 -2
  296. data/spec/lib/puppet_spec/https.rb +16 -7
  297. data/spec/lib/puppet_spec/matchers.rb +0 -80
  298. data/spec/lib/puppet_spec/puppetserver.rb +127 -0
  299. data/spec/shared_contexts/https.rb +29 -0
  300. data/spec/unit/agent_spec.rb +80 -26
  301. data/spec/unit/application/agent_spec.rb +12 -9
  302. data/spec/unit/application/describe_spec.rb +88 -50
  303. data/spec/unit/application/device_spec.rb +2 -2
  304. data/spec/unit/application/face_base_spec.rb +6 -4
  305. data/spec/unit/application/facts_spec.rb +39 -10
  306. data/spec/unit/application/filebucket_spec.rb +22 -2
  307. data/spec/unit/application/man_spec.rb +52 -0
  308. data/spec/unit/application/resource_spec.rb +3 -1
  309. data/spec/unit/application/ssl_spec.rb +15 -2
  310. data/spec/unit/configurer/downloader_spec.rb +10 -0
  311. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  312. data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
  313. data/spec/unit/configurer_spec.rb +64 -46
  314. data/spec/unit/confine_spec.rb +2 -1
  315. data/spec/unit/context/trusted_information_spec.rb +25 -2
  316. data/spec/unit/daemon_spec.rb +5 -64
  317. data/spec/unit/defaults_spec.rb +24 -1
  318. data/spec/unit/environments_spec.rb +8 -0
  319. data/spec/unit/face/config_spec.rb +3 -1
  320. data/spec/unit/face/module/search_spec.rb +17 -0
  321. data/spec/unit/face/plugin_spec.rb +12 -10
  322. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  323. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  324. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  325. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  326. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  327. data/spec/unit/file_system/uniquefile_spec.rb +29 -0
  328. data/spec/unit/file_system_spec.rb +10 -0
  329. data/spec/unit/functions/lookup_spec.rb +13 -0
  330. data/spec/unit/http/client_spec.rb +321 -36
  331. data/spec/unit/http/external_client_spec.rb +201 -0
  332. data/spec/unit/http/resolver_spec.rb +34 -3
  333. data/spec/unit/http/response_spec.rb +75 -0
  334. data/spec/unit/http/service/ca_spec.rb +53 -12
  335. data/spec/unit/http/service/compiler_spec.rb +332 -28
  336. data/spec/unit/http/service/file_server_spec.rb +100 -12
  337. data/spec/unit/http/service/report_spec.rb +19 -9
  338. data/spec/unit/http/service_spec.rb +94 -6
  339. data/spec/unit/http/session_spec.rb +159 -8
  340. data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
  341. data/spec/unit/indirector/catalog/rest_spec.rb +59 -2
  342. data/spec/unit/indirector/facts/rest_spec.rb +79 -24
  343. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
  344. data/spec/unit/indirector/file_content/rest_spec.rb +53 -2
  345. data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
  346. data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -2
  347. data/spec/unit/indirector/node/rest_spec.rb +57 -2
  348. data/spec/unit/indirector/report/rest_spec.rb +58 -51
  349. data/spec/unit/indirector/request_spec.rb +1 -1
  350. data/spec/unit/indirector/resource/ral_spec.rb +7 -8
  351. data/spec/unit/indirector/rest_spec.rb +13 -0
  352. data/spec/unit/indirector/status/rest_spec.rb +43 -2
  353. data/spec/unit/interface_spec.rb +3 -3
  354. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  355. data/spec/unit/network/format_support_spec.rb +3 -2
  356. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  357. data/spec/unit/network/http/connection_spec.rb +552 -190
  358. data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
  359. data/spec/unit/network/http/pool_spec.rb +59 -13
  360. data/spec/unit/network/http_pool_spec.rb +63 -57
  361. data/spec/unit/network/http_spec.rb +1 -1
  362. data/spec/unit/node/environment_spec.rb +33 -0
  363. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  364. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  365. data/spec/unit/parser/scope_spec.rb +1 -1
  366. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  367. data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
  368. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  369. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  370. data/spec/unit/provider/group/groupadd_spec.rb +22 -8
  371. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  372. data/spec/unit/provider/package/aix_spec.rb +29 -0
  373. data/spec/unit/provider/package/apt_spec.rb +107 -0
  374. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  375. data/spec/unit/provider/package/dnfmodule_spec.rb +54 -15
  376. data/spec/unit/provider/package/gem_spec.rb +40 -0
  377. data/spec/unit/provider/package/pacman_spec.rb +6 -21
  378. data/spec/unit/provider/package/pip_spec.rb +68 -19
  379. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  380. data/spec/unit/provider/package/pkgng_spec.rb +38 -0
  381. data/spec/unit/provider/package/portage_spec.rb +5 -0
  382. data/spec/unit/provider/package/puppet_gem_spec.rb +12 -1
  383. data/spec/unit/provider/package/rpm_spec.rb +0 -212
  384. data/spec/unit/provider/package/yum_spec.rb +243 -1
  385. data/spec/unit/provider/package/zypper_spec.rb +98 -0
  386. data/spec/unit/provider/service/init_spec.rb +42 -0
  387. data/spec/unit/provider/service/openbsd_spec.rb +9 -0
  388. data/spec/unit/provider/service/openwrt_spec.rb +1 -0
  389. data/spec/unit/provider/service/redhat_spec.rb +9 -0
  390. data/spec/unit/provider/service/systemd_spec.rb +93 -18
  391. data/spec/unit/provider/service/windows_spec.rb +50 -14
  392. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  393. data/spec/unit/provider/user/useradd_spec.rb +30 -16
  394. data/spec/unit/provider/user/windows_adsi_spec.rb +85 -3
  395. data/spec/unit/puppet_pal_2pec.rb +11 -0
  396. data/spec/unit/puppet_pal_catalog_spec.rb +43 -0
  397. data/spec/unit/puppet_spec.rb +33 -0
  398. data/spec/unit/reports/http_spec.rb +70 -52
  399. data/spec/unit/reports/store_spec.rb +17 -13
  400. data/spec/unit/resource_spec.rb +3 -3
  401. data/spec/unit/settings/autosign_setting_spec.rb +1 -1
  402. data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
  403. data/spec/unit/ssl/host_spec.rb +4 -2
  404. data/spec/unit/ssl/oids_spec.rb +1 -0
  405. data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
  406. data/spec/unit/ssl/state_machine_spec.rb +99 -13
  407. data/spec/unit/test/test_helper_spec.rb +17 -0
  408. data/spec/unit/transaction/persistence_spec.rb +15 -0
  409. data/spec/unit/transaction/report_spec.rb +5 -1
  410. data/spec/unit/transaction_spec.rb +0 -2
  411. data/spec/unit/type/file/ensure_spec.rb +1 -2
  412. data/spec/unit/type/file/source_spec.rb +89 -38
  413. data/spec/unit/type/file_spec.rb +122 -96
  414. data/spec/unit/type/service_spec.rb +218 -8
  415. data/spec/unit/type/user_spec.rb +32 -3
  416. data/spec/unit/type_spec.rb +50 -0
  417. data/spec/unit/util/at_fork_spec.rb +3 -2
  418. data/spec/unit/util/autoload_spec.rb +2 -1
  419. data/spec/unit/util/character_encoding_spec.rb +4 -4
  420. data/spec/unit/util/checksums_spec.rb +16 -0
  421. data/spec/unit/util/command_line_spec.rb +11 -6
  422. data/spec/unit/util/log/destinations_spec.rb +1 -29
  423. data/spec/unit/util/package/version/debian_spec.rb +83 -0
  424. data/spec/unit/util/package/version/pip_spec.rb +464 -0
  425. data/spec/unit/util/package/version/range_spec.rb +175 -0
  426. data/spec/unit/util/package/version/rpm_spec.rb +121 -0
  427. data/spec/unit/util/pidlock_spec.rb +102 -54
  428. data/spec/unit/util/rpm_compare_spec.rb +196 -0
  429. data/spec/unit/util/windows/adsi_spec.rb +4 -4
  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/windows/sid_spec.rb +2 -2
  433. data/spec/unit/util_spec.rb +3 -3
  434. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  435. data/tasks/generate_cert_fixtures.rake +15 -1
  436. data/tasks/manpages.rake +5 -35
  437. metadata +84 -52
  438. data/COMMITTERS.md +0 -244
  439. data/spec/integration/faces/config_spec.rb +0 -91
  440. data/spec/integration/faces/documentation_spec.rb +0 -57
  441. data/spec/integration/faces/plugin_spec.rb +0 -61
  442. data/spec/integration/file_bucket/file_spec.rb +0 -50
  443. data/spec/integration/file_serving/content_spec.rb +0 -7
  444. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  445. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  446. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  447. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  448. data/spec/integration/module_tool/forge_spec.rb +0 -64
  449. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  450. data/spec/integration/provider/service/init_spec.rb +0 -48
  451. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  452. data/spec/integration/provider/service/windows_spec.rb +0 -50
  453. data/spec/integration/reference/providers_spec.rb +0 -21
  454. data/spec/integration/reports_spec.rb +0 -13
  455. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  456. data/spec/integration/ssl/host_spec.rb +0 -72
  457. data/spec/integration/ssl/key_spec.rb +0 -99
  458. data/spec/integration/test/test_helper_spec.rb +0 -31
  459. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  460. data/spec/unit/face/man_spec.rb +0 -25
  461. data/spec/unit/man_spec.rb +0 -31
@@ -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"]
@@ -51,6 +51,7 @@ module Puppet
51
51
  package database for installed version(s), and can select
52
52
  which out of a set of available versions of a package to
53
53
  install if asked."
54
+ feature :version_ranges, "The provider can ensure version ranges."
54
55
  feature :holdable, "The provider is capable of placing packages on hold
55
56
  such that they are not automatically upgraded as a result of
56
57
  other package dependencies unless explicit action is taken by
@@ -61,6 +62,9 @@ module Puppet
61
62
  passed to the installer command."
62
63
  feature :uninstall_options, "The provider accepts options to be
63
64
  passed to the uninstaller command."
65
+ feature :disableable, "The provider can disable packages. This feature is used by specifying `disabled` as the
66
+ desired value for the package.",
67
+ :methods => [:disable]
64
68
  feature :supports_flavors, "The provider accepts flavors, which are specific variants of packages."
65
69
  feature :package_settings, "The provider accepts package_settings to be
66
70
  ensured for the given package. The meaning and format of these settings is
@@ -80,10 +84,12 @@ module Puppet
80
84
  specifying `purged` as the ensure value. This defaults to `installed`.
81
85
 
82
86
  Version numbers must match the full version to install, including
83
- release if the provider uses a release moniker. Ranges or semver
84
- patterns are not accepted except for the `gem` package provider. For
87
+ release if the provider uses a release moniker. For
85
88
  example, to install the bash package from the rpm
86
89
  `bash-4.1.2-29.el6.x86_64.rpm`, use the string `'4.1.2-29.el6'`.
90
+
91
+ On supported providers, version ranges can also be ensured. For example,
92
+ inequalities: `<2.0.0`, or intersections: `>1.0.0 <2.0.0`.
87
93
  EOT
88
94
 
89
95
  attr_accessor :latest
@@ -104,6 +110,10 @@ module Puppet
104
110
  provider.deprecated_hold
105
111
  end
106
112
 
113
+ newvalue(:disabled, :required_features => :disableable) do
114
+ provider.disable
115
+ end
116
+
107
117
  # Alias the 'present' value.
108
118
  aliasvalue(:installed, :present)
109
119
 
@@ -151,7 +161,7 @@ module Puppet
151
161
  @should.each { |should|
152
162
  case should
153
163
  when :present
154
- return true unless [:absent, :purged, :held].include?(is)
164
+ return true unless [:absent, :purged, :held, :disabled].include?(is)
155
165
  when :latest
156
166
  # Short-circuit packages that are not present
157
167
  return false if is == :absent || is == :purged
@@ -408,6 +418,11 @@ module Puppet
408
418
  newproperty(:flavor, :required_features => :supports_flavors) do
409
419
  desc "OpenBSD and DNF modules support 'flavors', which are
410
420
  further specifications for which type of package you want."
421
+ validate do |value|
422
+ if [:disabled, "disabled"].include?(@resource[:ensure]) && value
423
+ raise ArgumentError, _('Cannot have both `ensure => disabled` and `flavor`')
424
+ end
425
+ end
411
426
  end
412
427
 
413
428
  newparam(:source) do
@@ -489,6 +504,29 @@ module Puppet
489
504
  newvalues(:true, :false)
490
505
  end
491
506
 
507
+ newparam(:enable_only, :boolean => false, :parent => Puppet::Parameter::Boolean) do
508
+ desc <<-EOT
509
+ Tells `dnf module` to only enable a specific module, instead
510
+ of installing its default profile.
511
+
512
+ Modules with no default profile will be enabled automatically
513
+ without the use of this parameter.
514
+
515
+ Conflicts with the `flavor` property, which selects a profile
516
+ to install.
517
+ EOT
518
+ defaultto false
519
+
520
+ validate do |value|
521
+ if [true, :true, "true"].include?(value) && @resource[:flavor]
522
+ raise ArgumentError, _('Cannot have both `enable_only => true` and `flavor`')
523
+ end
524
+ if [:disabled, "disabled"].include?(@resource[:ensure])
525
+ raise ArgumentError, _('Cannot have both `ensure => disabled` and `enable_only => true`')
526
+ end
527
+ end
528
+ end
529
+
492
530
  newparam(:install_only, :boolean => false, :parent => Puppet::Parameter::Boolean, :required_features => :install_only) do
493
531
  desc <<-EOT
494
532
  It should be set for packages that should only ever be installed,
@@ -47,11 +47,17 @@ 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;
53
55
  wherever possible, it relies on local tools to enable or disable
54
- a given service. Default values depend on the platform."
56
+ a given service. Default values depend on the platform.
57
+
58
+ If you don't specify a value for the `enable` attribute, Puppet leaves
59
+ that aspect of the service alone and your operating system determines
60
+ the behavior."
55
61
 
56
62
  newvalue(:true, :event => :service_enabled) do
57
63
  provider.enable
@@ -80,14 +86,8 @@ module Puppet
80
86
  provider.delayed_start
81
87
  end
82
88
 
83
- # This only makes sense on systemd systems. Static services cannot be enabled
84
- # or disabled manually.
85
89
  def insync?(current)
86
- if provider.respond_to?(:cached_enabled?) && provider.cached_enabled? == 'static'
87
- Puppet.debug("Unable to enable or disable static service #{@resource[:name]}")
88
- return true
89
- end
90
-
90
+ return provider.enabled_insync?(current) if provider.respond_to?(:enabled_insync?)
91
91
  super(current)
92
92
  end
93
93
 
@@ -118,6 +118,12 @@ module Puppet
118
118
  end
119
119
 
120
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
+
121
127
  event = super()
122
128
 
123
129
  property = @resource.property(:enable)
@@ -130,6 +136,51 @@ module Puppet
130
136
  end
131
137
  end
132
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
+
133
184
  newproperty(:flags, :required_features => :flaggable) do
134
185
  desc "Specify a string of flags to pass to the startup script."
135
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,26 +508,7 @@ module Puppet
493
508
  provider.exists?
494
509
  end
495
510
 
496
- def retrieve
497
- absent = false
498
- properties.inject({}) { |prophash, property|
499
- current_value = :absent
500
-
501
- if absent
502
- prophash[property] = :absent
503
- else
504
- current_value = property.retrieve
505
- prophash[property] = current_value
506
- end
507
-
508
- if property.name == :ensure and current_value == :absent
509
- absent = true
510
- end
511
- prophash
512
- }
513
- end
514
-
515
- newproperty(:roles, :parent => Puppet::Property::List, :required_features => :manages_solaris_rbac) do
511
+ newproperty(:roles, :parent => Puppet::Property::List, :required_features => :manages_roles) do
516
512
  desc "The roles the user has. Multiple roles should be
517
513
  specified as an array."
518
514
 
@@ -539,7 +535,7 @@ module Puppet
539
535
  end
540
536
 
541
537
  reqs
542
- end
538
+ end unless Puppet::Util::Platform.windows?
543
539
 
544
540
  newparam(:role_membership) do
545
541
  desc "Whether specified roles should be considered the **complete list**
@@ -755,17 +751,11 @@ module Puppet
755
751
  value = test_sym if [:true, :false].include? test_sym
756
752
 
757
753
  return [] if value == :false
758
- home = resource[:home]
759
- if value == :true and not home
760
- raise ArgumentError, _("purge_ssh_keys can only be true for users with a defined home directory")
761
- end
754
+ home = resource[:home] || Dir.home(resource[:name])
762
755
 
763
756
  return [ "#{home}/.ssh/authorized_keys" ] if value == :true
764
757
  # value is an array - munge each value
765
758
  [ value ].flatten.map do |entry|
766
- if entry =~ /^~|^%h/ and not home
767
- raise ArgumentError, _("purge_ssh_keys value '%{value}' meta character ~ or %{home_placeholder} only allowed for users with a defined home directory") % { value: value, home_placeholder: '%h' }
768
- end
769
759
  # make sure frozen value is duplicated by using a gsub, second mutating gsub! is then ok
770
760
  entry = entry.gsub(/^~\//, "#{home}/")
771
761
  entry.gsub!(/^%h\//, "#{home}/")
@@ -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
 
@@ -13,7 +13,7 @@ require 'puppet'
13
13
  # service.
14
14
  module Puppet::Util::AtFork
15
15
  @handler_class = loop do
16
- if Facter.value(:operatingsystem) == 'Solaris'
16
+ if Puppet::Util::Platform.solaris?
17
17
  begin
18
18
  require 'puppet/util/at_fork/solaris'
19
19
  # using break to return a value from the loop block
@@ -2,6 +2,7 @@ require 'pathname'
2
2
  require 'puppet/util/rubygems'
3
3
  require 'puppet/util/warnings'
4
4
  require 'puppet/pops/adaptable'
5
+ require 'puppet/concurrent/synchronized'
5
6
 
6
7
  # An adapter that ties the module_directories cache to the environment where the modules are parsed. This
7
8
  # adapter ensures that the life-cycle of this cache doesn't exceed the life-cycle of the environment.
@@ -9,10 +10,21 @@ require 'puppet/pops/adaptable'
9
10
  # @api private
10
11
  class Puppet::Util::ModuleDirectoriesAdapter < Puppet::Pops::Adaptable::Adapter
11
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
12
21
  end
13
22
 
14
23
  # Autoload paths, either based on names or all at once.
15
24
  class Puppet::Util::Autoload
25
+ include Puppet::Concurrent::Synchronized
26
+ extend Puppet::Concurrent::Synchronized
27
+
16
28
  @loaded = {}
17
29
 
18
30
  class << self
@@ -115,26 +127,7 @@ class Puppet::Util::Autoload
115
127
  def module_directories(env)
116
128
  raise ArgumentError, "Autoloader requires an environment" unless env
117
129
 
118
- Puppet::Util::ModuleDirectoriesAdapter.adapt(env) do |a|
119
- a.directories ||= env.modulepath.collect do |dir|
120
- Dir.entries(dir).reject { |f| f =~ /^\./ }.collect { |f| File.join(dir, f, "lib") }
121
- end.flatten.find_all do |d|
122
- FileTest.directory?(d)
123
- end
124
- end.directories
125
- end
126
-
127
- # @api private
128
- def vendored_modules
129
- dir = Puppet[:vendormoduledir]
130
- if dir && File.directory?(dir)
131
- Dir.entries(dir)
132
- .reject { |f| f =~ /^\./ }
133
- .collect { |f| File.join(dir, f, "lib") }
134
- .find_all { |d| FileTest.directory?(d) }
135
- else
136
- []
137
- end
130
+ Puppet::Util::ModuleDirectoriesAdapter.adapt(env).directories
138
131
  end
139
132
 
140
133
  # @api private
@@ -164,11 +157,6 @@ class Puppet::Util::Autoload
164
157
  # "app_defaults_initialized?" method on the main puppet Settings object.
165
158
  # --cprice 2012-03-16
166
159
  if Puppet.settings.app_defaults_initialized?
167
- unless @initialized
168
- $LOAD_PATH.unshift(Puppet[:libdir])
169
- $LOAD_PATH.concat(vendored_modules)
170
- @initialized = true
171
- end
172
160
  gem_directories + module_directories(env) + $LOAD_PATH
173
161
  else
174
162
  gem_directories + $LOAD_PATH