puppet 6.17.0 → 6.21.0

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

Potentially problematic release.


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

Files changed (401) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -16
  3. data/Gemfile +2 -0
  4. data/Gemfile.lock +38 -34
  5. data/README.md +1 -2
  6. data/Rakefile +4 -12
  7. data/lib/puppet/agent/locker.rb +0 -7
  8. data/lib/puppet/application.rb +10 -6
  9. data/lib/puppet/application/agent.rb +9 -3
  10. data/lib/puppet/application/apply.rb +20 -21
  11. data/lib/puppet/application/device.rb +1 -0
  12. data/lib/puppet/application/doc.rb +1 -1
  13. data/lib/puppet/application/filebucket.rb +2 -2
  14. data/lib/puppet/application/lookup.rb +16 -4
  15. data/lib/puppet/application/script.rb +1 -0
  16. data/lib/puppet/application_support.rb +7 -0
  17. data/lib/puppet/configurer.rb +50 -8
  18. data/lib/puppet/configurer/downloader.rb +31 -10
  19. data/lib/puppet/confine.rb +1 -1
  20. data/lib/puppet/confine/any.rb +1 -1
  21. data/lib/puppet/defaults.rb +88 -38
  22. data/lib/puppet/environments.rb +84 -59
  23. data/lib/puppet/face/catalog.rb +1 -1
  24. data/lib/puppet/face/config.rb +56 -16
  25. data/lib/puppet/face/epp.rb +12 -2
  26. data/lib/puppet/face/facts.rb +60 -0
  27. data/lib/puppet/face/node.rb +3 -3
  28. data/lib/puppet/face/node/clean.rb +2 -2
  29. data/lib/puppet/face/status.rb +1 -1
  30. data/lib/puppet/feature/base.rb +1 -1
  31. data/lib/puppet/ffi/posix.rb +10 -0
  32. data/lib/puppet/ffi/posix/constants.rb +14 -0
  33. data/lib/puppet/ffi/posix/functions.rb +24 -0
  34. data/lib/puppet/file_bucket/dipper.rb +1 -1
  35. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  36. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  37. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  38. data/lib/puppet/file_system/file_impl.rb +3 -3
  39. data/lib/puppet/functions/epp.rb +1 -0
  40. data/lib/puppet/functions/inline_epp.rb +1 -0
  41. data/lib/puppet/functions/lstrip.rb +4 -4
  42. data/lib/puppet/functions/new.rb +8 -3
  43. data/lib/puppet/functions/reverse_each.rb +1 -1
  44. data/lib/puppet/functions/rstrip.rb +4 -4
  45. data/lib/puppet/functions/step.rb +1 -1
  46. data/lib/puppet/functions/strip.rb +4 -4
  47. data/lib/puppet/gettext/config.rb +5 -5
  48. data/lib/puppet/gettext/module_translations.rb +4 -4
  49. data/lib/puppet/http.rb +1 -0
  50. data/lib/puppet/http/client.rb +1 -1
  51. data/lib/puppet/http/resolver.rb +5 -8
  52. data/lib/puppet/http/resolver/server_list.rb +18 -36
  53. data/lib/puppet/http/resolver/settings.rb +4 -4
  54. data/lib/puppet/http/resolver/srv.rb +5 -5
  55. data/lib/puppet/http/service.rb +3 -1
  56. data/lib/puppet/http/service/compiler.rb +1 -1
  57. data/lib/puppet/http/service/file_server.rb +1 -1
  58. data/lib/puppet/http/service/puppetserver.rb +39 -0
  59. data/lib/puppet/http/session.rb +5 -4
  60. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  61. data/lib/puppet/indirector/exec.rb +1 -1
  62. data/lib/puppet/indirector/fact_search.rb +60 -0
  63. data/lib/puppet/indirector/facts/facter.rb +3 -3
  64. data/lib/puppet/indirector/facts/json.rb +27 -0
  65. data/lib/puppet/indirector/facts/yaml.rb +4 -59
  66. data/lib/puppet/indirector/file_metadata/http.rb +1 -0
  67. data/lib/puppet/indirector/hiera.rb +4 -0
  68. data/lib/puppet/indirector/indirection.rb +1 -1
  69. data/lib/puppet/indirector/json.rb +5 -1
  70. data/lib/puppet/indirector/msgpack.rb +1 -1
  71. data/lib/puppet/indirector/node/json.rb +8 -0
  72. data/lib/puppet/indirector/report/json.rb +34 -0
  73. data/lib/puppet/indirector/report/processor.rb +2 -2
  74. data/lib/puppet/indirector/request.rb +4 -4
  75. data/lib/puppet/indirector/yaml.rb +1 -1
  76. data/lib/puppet/module.rb +1 -2
  77. data/lib/puppet/module_tool/applications/installer.rb +48 -2
  78. data/lib/puppet/module_tool/errors/shared.rb +17 -2
  79. data/lib/puppet/network/format_support.rb +2 -2
  80. data/lib/puppet/network/formats.rb +2 -1
  81. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  82. data/lib/puppet/network/http/route.rb +2 -2
  83. data/lib/puppet/node/environment.rb +12 -5
  84. data/lib/puppet/node/facts.rb +17 -0
  85. data/lib/puppet/pal/pal_impl.rb +90 -13
  86. data/lib/puppet/parameter.rb +1 -1
  87. data/lib/puppet/parser/ast/leaf.rb +3 -2
  88. data/lib/puppet/parser/functions.rb +21 -17
  89. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  90. data/lib/puppet/parser/templatewrapper.rb +1 -1
  91. data/lib/puppet/parser/type_loader.rb +2 -2
  92. data/lib/puppet/pops/adaptable.rb +7 -13
  93. data/lib/puppet/pops/adapters.rb +8 -4
  94. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  95. data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
  96. data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -3
  97. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  98. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  99. data/lib/puppet/pops/loaders.rb +18 -11
  100. data/lib/puppet/pops/lookup/context.rb +1 -1
  101. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  102. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  103. data/lib/puppet/pops/types/iterable.rb +34 -8
  104. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  105. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  106. data/lib/puppet/pops/validation/checker4_0.rb +19 -15
  107. data/lib/puppet/property/list.rb +1 -1
  108. data/lib/puppet/provider/file/windows.rb +1 -1
  109. data/lib/puppet/provider/group/groupadd.rb +13 -8
  110. data/lib/puppet/provider/package/apt.rb +67 -1
  111. data/lib/puppet/provider/package/aptitude.rb +6 -0
  112. data/lib/puppet/provider/package/dpkg.rb +1 -1
  113. data/lib/puppet/provider/package/gem.rb +4 -2
  114. data/lib/puppet/provider/package/pip2.rb +17 -0
  115. data/lib/puppet/provider/package/puppet_gem.rb +5 -0
  116. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  117. data/lib/puppet/provider/package/yum.rb +1 -0
  118. data/lib/puppet/provider/package/zypper.rb +3 -0
  119. data/lib/puppet/provider/service/debian.rb +2 -0
  120. data/lib/puppet/provider/user/aix.rb +3 -3
  121. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  122. data/lib/puppet/provider/user/useradd.rb +55 -8
  123. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  124. data/lib/puppet/reference/configuration.rb +6 -5
  125. data/lib/puppet/resource/type.rb +2 -1
  126. data/lib/puppet/rest/route.rb +2 -2
  127. data/lib/puppet/settings.rb +63 -21
  128. data/lib/puppet/settings/alias_setting.rb +37 -0
  129. data/lib/puppet/settings/base_setting.rb +26 -2
  130. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  131. data/lib/puppet/test/test_helper.rb +10 -3
  132. data/lib/puppet/transaction.rb +2 -2
  133. data/lib/puppet/transaction/persistence.rb +1 -1
  134. data/lib/puppet/transaction/report.rb +12 -8
  135. data/lib/puppet/trusted_external.rb +2 -2
  136. data/lib/puppet/type.rb +4 -3
  137. data/lib/puppet/type/file.rb +2 -2
  138. data/lib/puppet/type/file/source.rb +28 -8
  139. data/lib/puppet/type/filebucket.rb +1 -1
  140. data/lib/puppet/type/notify.rb +2 -2
  141. data/lib/puppet/type/package.rb +3 -3
  142. data/lib/puppet/type/service.rb +4 -0
  143. data/lib/puppet/type/user.rb +18 -3
  144. data/lib/puppet/util.rb +26 -12
  145. data/lib/puppet/util/autoload.rb +10 -15
  146. data/lib/puppet/util/character_encoding.rb +9 -5
  147. data/lib/puppet/util/connection.rb +8 -8
  148. data/lib/puppet/util/execution.rb +2 -2
  149. data/lib/puppet/util/fact_dif.rb +62 -0
  150. data/lib/puppet/util/posix.rb +54 -5
  151. data/lib/puppet/util/rubygems.rb +5 -1
  152. data/lib/puppet/util/run_mode.rb +5 -1
  153. data/lib/puppet/util/windows.rb +1 -0
  154. data/lib/puppet/util/windows/api_types.rb +15 -1
  155. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  156. data/lib/puppet/util/windows/security.rb +4 -4
  157. data/lib/puppet/util/windows/service.rb +1 -1
  158. data/lib/puppet/util/windows/user.rb +219 -0
  159. data/lib/puppet/version.rb +1 -1
  160. data/locales/puppet.pot +342 -312
  161. data/man/man5/puppet.conf.5 +53 -18
  162. data/man/man8/puppet-agent.8 +7 -4
  163. data/man/man8/puppet-apply.8 +2 -2
  164. data/man/man8/puppet-catalog.8 +1 -1
  165. data/man/man8/puppet-config.8 +6 -6
  166. data/man/man8/puppet-describe.8 +1 -1
  167. data/man/man8/puppet-device.8 +2 -2
  168. data/man/man8/puppet-doc.8 +1 -1
  169. data/man/man8/puppet-epp.8 +1 -1
  170. data/man/man8/puppet-facts.8 +32 -1
  171. data/man/man8/puppet-filebucket.8 +3 -3
  172. data/man/man8/puppet-generate.8 +1 -1
  173. data/man/man8/puppet-help.8 +1 -1
  174. data/man/man8/puppet-key.8 +1 -1
  175. data/man/man8/puppet-lookup.8 +2 -2
  176. data/man/man8/puppet-man.8 +1 -1
  177. data/man/man8/puppet-module.8 +1 -1
  178. data/man/man8/puppet-node.8 +7 -4
  179. data/man/man8/puppet-parser.8 +1 -1
  180. data/man/man8/puppet-plugin.8 +1 -1
  181. data/man/man8/puppet-report.8 +4 -1
  182. data/man/man8/puppet-resource.8 +1 -1
  183. data/man/man8/puppet-script.8 +2 -2
  184. data/man/man8/puppet-ssl.8 +1 -1
  185. data/man/man8/puppet-status.8 +2 -2
  186. data/man/man8/puppet.8 +2 -2
  187. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
  188. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  189. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  190. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  191. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  192. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  193. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
  194. data/spec/integration/application/agent_spec.rb +208 -55
  195. data/spec/integration/application/apply_spec.rb +168 -149
  196. data/spec/integration/application/doc_spec.rb +16 -6
  197. data/spec/integration/application/filebucket_spec.rb +70 -21
  198. data/spec/integration/application/help_spec.rb +42 -0
  199. data/spec/integration/application/lookup_spec.rb +13 -0
  200. data/spec/integration/application/module_spec.rb +68 -0
  201. data/spec/integration/application/plugin_spec.rb +53 -3
  202. data/spec/integration/configurer_spec.rb +14 -0
  203. data/spec/integration/data_binding_spec.rb +82 -0
  204. data/spec/integration/defaults_spec.rb +19 -1
  205. data/spec/integration/directory_environments_spec.rb +17 -17
  206. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  207. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  208. data/spec/integration/node/environment_spec.rb +1 -1
  209. data/spec/integration/resource/type_collection_spec.rb +2 -6
  210. data/spec/integration/transaction_spec.rb +4 -9
  211. data/spec/integration/util/execution_spec.rb +22 -0
  212. data/spec/integration/util/windows/adsi_spec.rb +5 -3
  213. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  214. data/spec/integration/util/windows/process_spec.rb +26 -32
  215. data/spec/integration/util/windows/registry_spec.rb +0 -10
  216. data/spec/integration/util/windows/user_spec.rb +7 -0
  217. data/spec/integration/util_spec.rb +7 -33
  218. data/spec/lib/puppet_spec/matchers.rb +0 -80
  219. data/spec/lib/puppet_spec/puppetserver.rb +8 -0
  220. data/spec/lib/puppet_spec/settings.rb +6 -1
  221. data/spec/shared_contexts/types_setup.rb +2 -0
  222. data/spec/spec_helper.rb +1 -4
  223. data/spec/unit/agent_spec.rb +8 -6
  224. data/spec/unit/application/agent_spec.rb +3 -5
  225. data/spec/unit/application/config_spec.rb +224 -4
  226. data/spec/unit/application/doc_spec.rb +2 -2
  227. data/spec/unit/application/face_base_spec.rb +6 -4
  228. data/spec/unit/application/facts_spec.rb +41 -10
  229. data/spec/unit/application/filebucket_spec.rb +0 -2
  230. data/spec/unit/application/man_spec.rb +52 -0
  231. data/spec/unit/application/resource_spec.rb +3 -1
  232. data/spec/unit/application/ssl_spec.rb +15 -2
  233. data/spec/unit/application_spec.rb +60 -13
  234. data/spec/unit/configurer/downloader_spec.rb +10 -0
  235. data/spec/unit/configurer_spec.rb +86 -37
  236. data/spec/unit/confine/feature_spec.rb +1 -1
  237. data/spec/unit/confine_spec.rb +10 -3
  238. data/spec/unit/defaults_spec.rb +20 -1
  239. data/spec/unit/environments_spec.rb +176 -32
  240. data/spec/unit/face/config_spec.rb +65 -12
  241. data/spec/unit/face/node_spec.rb +2 -13
  242. data/spec/unit/file_serving/configuration/parser_spec.rb +0 -1
  243. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  244. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  245. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  246. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  247. data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
  248. data/spec/unit/file_system/uniquefile_spec.rb +18 -0
  249. data/spec/unit/file_system_spec.rb +1 -2
  250. data/spec/unit/forge/module_release_spec.rb +2 -7
  251. data/spec/unit/functions/inline_epp_spec.rb +26 -1
  252. data/spec/unit/http/client_spec.rb +0 -1
  253. data/spec/unit/http/resolver_spec.rb +24 -5
  254. data/spec/unit/http/service/ca_spec.rb +2 -3
  255. data/spec/unit/http/service/compiler_spec.rb +51 -3
  256. data/spec/unit/http/service/file_server_spec.rb +2 -3
  257. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  258. data/spec/unit/http/service/report_spec.rb +2 -3
  259. data/spec/unit/http/service_spec.rb +1 -2
  260. data/spec/unit/http/session_spec.rb +8 -21
  261. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  262. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  263. data/spec/unit/indirector/face_spec.rb +0 -1
  264. data/spec/unit/indirector/facts/facter_spec.rb +0 -1
  265. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  266. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  267. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
  268. data/spec/unit/indirector/indirection_spec.rb +8 -12
  269. data/spec/unit/indirector/json_spec.rb +8 -8
  270. data/spec/unit/indirector/key/file_spec.rb +0 -1
  271. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  272. data/spec/unit/indirector/node/json_spec.rb +33 -0
  273. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  274. data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
  275. data/spec/unit/indirector/report/yaml_spec.rb +72 -8
  276. data/spec/unit/indirector/request_spec.rb +4 -4
  277. data/spec/unit/indirector/rest_spec.rb +1 -1
  278. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  279. data/spec/unit/indirector/yaml_spec.rb +7 -7
  280. data/spec/unit/indirector_spec.rb +2 -2
  281. data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
  282. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  283. data/spec/unit/network/authconfig_spec.rb +0 -3
  284. data/spec/unit/network/format_support_spec.rb +3 -2
  285. data/spec/unit/network/http/api/indirected_routes_spec.rb +0 -9
  286. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  287. data/spec/unit/network/http/handler_spec.rb +0 -5
  288. data/spec/unit/node/environment_spec.rb +18 -1
  289. data/spec/unit/parser/compiler_spec.rb +3 -19
  290. data/spec/unit/parser/resource_spec.rb +14 -8
  291. data/spec/unit/parser/templatewrapper_spec.rb +4 -3
  292. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
  293. data/spec/unit/pops/loaders/loaders_spec.rb +70 -0
  294. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  295. data/spec/unit/property_spec.rb +1 -0
  296. data/spec/unit/provider/exec_spec.rb +4 -3
  297. data/spec/unit/provider/group/groupadd_spec.rb +5 -2
  298. data/spec/unit/provider/nameservice_spec.rb +66 -65
  299. data/spec/unit/provider/package/apt_spec.rb +85 -3
  300. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  301. data/spec/unit/provider/package/base_spec.rb +6 -5
  302. data/spec/unit/provider/package/dpkg_spec.rb +22 -7
  303. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  304. data/spec/unit/provider/package/pacman_spec.rb +18 -12
  305. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  306. data/spec/unit/provider/package/pip_spec.rb +6 -11
  307. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
  308. data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
  309. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  310. data/spec/unit/provider/package/yum_spec.rb +31 -0
  311. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  312. data/spec/unit/provider/service/base_spec.rb +2 -4
  313. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  314. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  315. data/spec/unit/provider/service/debian_spec.rb +3 -5
  316. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  317. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  318. data/spec/unit/provider/service/init_spec.rb +45 -5
  319. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  320. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  321. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  322. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  323. data/spec/unit/provider/service/runit_spec.rb +2 -1
  324. data/spec/unit/provider/service/smf_spec.rb +1 -1
  325. data/spec/unit/provider/service/src_spec.rb +3 -5
  326. data/spec/unit/provider/service/systemd_spec.rb +3 -6
  327. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  328. data/spec/unit/provider/service/windows_spec.rb +28 -0
  329. data/spec/unit/provider/user/aix_spec.rb +5 -0
  330. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  331. data/spec/unit/provider/user/pw_spec.rb +2 -0
  332. data/spec/unit/provider/user/useradd_spec.rb +56 -3
  333. data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
  334. data/spec/unit/provider_spec.rb +8 -10
  335. data/spec/unit/puppet_pal_2pec.rb +40 -0
  336. data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
  337. data/spec/unit/reports/store_spec.rb +17 -13
  338. data/spec/unit/resource/capability_finder_spec.rb +6 -1
  339. data/spec/unit/resource/type_spec.rb +1 -1
  340. data/spec/unit/resource_spec.rb +11 -10
  341. data/spec/unit/rest/route_spec.rb +4 -4
  342. data/spec/unit/settings_spec.rb +576 -239
  343. data/spec/unit/ssl/base_spec.rb +0 -1
  344. data/spec/unit/ssl/host_spec.rb +0 -5
  345. data/spec/unit/ssl/ssl_provider_spec.rb +14 -8
  346. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
  347. data/spec/unit/transaction/event_manager_spec.rb +14 -11
  348. data/spec/unit/transaction/persistence_spec.rb +15 -0
  349. data/spec/unit/transaction/report_spec.rb +2 -0
  350. data/spec/unit/transaction_spec.rb +13 -4
  351. data/spec/unit/type/file/content_spec.rb +0 -1
  352. data/spec/unit/type/file/selinux_spec.rb +0 -2
  353. data/spec/unit/type/file/source_spec.rb +1 -1
  354. data/spec/unit/type/file_spec.rb +0 -6
  355. data/spec/unit/type/filebucket_spec.rb +1 -1
  356. data/spec/unit/type/group_spec.rb +13 -6
  357. data/spec/unit/type/resources_spec.rb +7 -7
  358. data/spec/unit/type/service_spec.rb +36 -3
  359. data/spec/unit/type/tidy_spec.rb +0 -1
  360. data/spec/unit/type/user_spec.rb +31 -2
  361. data/spec/unit/type_spec.rb +2 -2
  362. data/spec/unit/util/at_fork_spec.rb +2 -2
  363. data/spec/unit/util/autoload_spec.rb +5 -1
  364. data/spec/unit/util/backups_spec.rb +1 -2
  365. data/spec/unit/util/character_encoding_spec.rb +4 -4
  366. data/spec/unit/util/command_line_spec.rb +11 -6
  367. data/spec/unit/util/execution_spec.rb +15 -11
  368. data/spec/unit/util/inifile_spec.rb +6 -14
  369. data/spec/unit/util/log_spec.rb +8 -7
  370. data/spec/unit/util/logging_spec.rb +3 -3
  371. data/spec/unit/util/posix_spec.rb +363 -15
  372. data/spec/unit/util/rubygems_spec.rb +2 -2
  373. data/spec/unit/util/run_mode_spec.rb +6 -6
  374. data/spec/unit/util/selinux_spec.rb +76 -52
  375. data/spec/unit/util/storage_spec.rb +3 -1
  376. data/spec/unit/util/suidmanager_spec.rb +44 -41
  377. data/spec/unit/util_spec.rb +13 -6
  378. metadata +49 -50
  379. data/spec/integration/faces/config_spec.rb +0 -91
  380. data/spec/integration/faces/documentation_spec.rb +0 -57
  381. data/spec/integration/file_bucket/file_spec.rb +0 -50
  382. data/spec/integration/file_serving/content_spec.rb +0 -7
  383. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  384. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  385. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  386. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  387. data/spec/integration/module_tool/forge_spec.rb +0 -51
  388. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  389. data/spec/integration/provider/service/init_spec.rb +0 -48
  390. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  391. data/spec/integration/provider/service/windows_spec.rb +0 -50
  392. data/spec/integration/reference/providers_spec.rb +0 -21
  393. data/spec/integration/reports_spec.rb +0 -13
  394. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  395. data/spec/integration/ssl/host_spec.rb +0 -72
  396. data/spec/integration/ssl/key_spec.rb +0 -99
  397. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  398. data/spec/unit/face/catalog_spec.rb +0 -6
  399. data/spec/unit/face/man_spec.rb +0 -25
  400. data/spec/unit/face/module_spec.rb +0 -3
  401. data/spec/unit/man_spec.rb +0 -31
@@ -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
@@ -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}"
@@ -120,8 +120,11 @@ module Puppet::Test
120
120
  indirections = Puppet::Indirector::Indirection.send(:class_variable_get, :@@indirections)
121
121
  indirections.each do |indirector|
122
122
  $saved_indirection_state[indirector.name] = {
123
- :@terminus_class => indirector.instance_variable_get(:@terminus_class).value,
124
- :@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
125
128
  }
126
129
  end
127
130
 
@@ -176,7 +179,11 @@ module Puppet::Test
176
179
  indirections = Puppet::Indirector::Indirection.send(:class_variable_get, :@@indirections)
177
180
  indirections.each do |indirector|
178
181
  $saved_indirection_state.fetch(indirector.name, {}).each do |variable, value|
179
- 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
180
187
  end
181
188
  end
182
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,7 +3,7 @@ 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}
6
+ Puppet.debug { _("Retrieving trusted external data from %{command}") % {command: command} }
7
7
  setting_type = Puppet.settings.setting(:trusted_external_command).type
8
8
  if setting_type == :file
9
9
  return fetch_data(command, certname)
@@ -17,7 +17,7 @@ module Puppet::TrustedExternal
17
17
  abs_path = Puppet::FileSystem.expand_path(file)
18
18
  executable_file = Puppet::FileSystem.file?(abs_path) && Puppet::FileSystem.executable?(abs_path)
19
19
  unless executable_file
20
- Puppet.debug _("Skipping non-executable file %{file}") % { file: abs_path }
20
+ Puppet.debug { _("Skipping non-executable file %{file}") % { file: abs_path } }
21
21
  next
22
22
  end
23
23
  basename = file.basename(file.extname).to_s
data/lib/puppet/type.rb CHANGED
@@ -1212,8 +1212,9 @@ class Type
1212
1212
  title = instance.respond_to?(:title) ? instance.title : instance.name
1213
1213
  other = provider_instances[title]
1214
1214
  if other
1215
- Puppet.debug "%s %s found in both %s and %s; skipping the %s version" %
1216
- [self.name.to_s.capitalize, title, 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
+ }
1217
1218
  next
1218
1219
  end
1219
1220
  provider_instances[title] = instance
@@ -1895,7 +1896,7 @@ end
1895
1896
  name = name.intern
1896
1897
 
1897
1898
  if unprovide(name)
1898
- Puppet.debug "Reloading #{name} #{self.name} provider"
1899
+ Puppet.debug { "Reloading #{name} #{self.name} provider" }
1899
1900
  end
1900
1901
 
1901
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
 
@@ -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
@@ -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
@@ -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"]
@@ -426,10 +426,10 @@ module Puppet
426
426
  end
427
427
 
428
428
  newparam(:source) do
429
- desc "Where to find the package file. This is only used by providers that don't
429
+ desc "Where to find the package file. This is mostly used by providers that don't
430
430
  automatically download packages from a central repository. (For example:
431
- the `yum` and `apt` providers ignore this attribute, but the `rpm` and
432
- `dpkg` providers require it.)
431
+ the `yum` provider ignores this attribute, `apt` provider uses it if present
432
+ and the `rpm` and `dpkg` providers require it.)
433
433
 
434
434
  Different providers accept different values for `source`. Most providers
435
435
  accept paths to local files stored on the target system. Some providers
@@ -147,6 +147,10 @@ module Puppet
147
147
  user_information = Puppet::Util::Windows::SID.name_to_principal(value)
148
148
  raise Puppet::Error.new("\"#{value}\" is not a valid account") unless user_information && [:SidTypeUser, :SidTypeWellKnownGroup].include?(user_information.account_type)
149
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
+
150
154
  if user_information.domain == Puppet::Util::Windows::ADSI.computer_name
151
155
  ".\\#{user_information.account}"
152
156
  else
@@ -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**
data/lib/puppet/util.rb CHANGED
@@ -26,20 +26,21 @@ module Util
26
26
 
27
27
  extend Puppet::Util::SymbolicFileMode
28
28
 
29
- DEFAULT_ENV = if Puppet::Util::Platform.windows?
30
- :windows
31
- else
32
- :posix
33
- end.freeze
29
+ def default_env
30
+ Puppet.features.microsoft_windows? ?
31
+ :windows :
32
+ :posix
33
+ end
34
+ module_function :default_env
34
35
 
35
36
  # @param name [String] The name of the environment variable to retrieve
36
37
  # @param mode [Symbol] Which operating system mode to use e.g. :posix or :windows. Use nil to autodetect
37
38
  # @return [String] Value of the specified environment variable. nil if it does not exist
38
39
  # @api private
39
- def get_env(name, mode = DEFAULT_ENV)
40
+ def get_env(name, mode = default_env)
40
41
  if mode == :windows
41
- Puppet::Util::Windows::Process.get_environment_strings.find do |key, value|
42
- if name.casecmp(key) == 0
42
+ Puppet::Util::Windows::Process.get_environment_strings.each do |key, value |
43
+ if name.casecmp(key) == 0 then
43
44
  return value
44
45
  end
45
46
  end
@@ -53,7 +54,7 @@ module Util
53
54
  # @param mode [Symbol] Which operating system mode to use e.g. :posix or :windows. Use nil to autodetect
54
55
  # @return [Hash] A hashtable of all environment variables
55
56
  # @api private
56
- def get_environment(mode = DEFAULT_ENV)
57
+ def get_environment(mode = default_env)
57
58
  case mode
58
59
  when :posix
59
60
  ENV.to_hash
@@ -68,7 +69,7 @@ module Util
68
69
  # Removes all environment variables
69
70
  # @param mode [Symbol] Which operating system mode to use e.g. :posix or :windows. Use nil to autodetect
70
71
  # @api private
71
- def clear_environment(mode = DEFAULT_ENV)
72
+ def clear_environment(mode = default_env)
72
73
  case mode
73
74
  when :posix
74
75
  ENV.clear
@@ -86,7 +87,7 @@ module Util
86
87
  # @param value [String] The value to set the variable to. nil deletes the environment variable
87
88
  # @param mode [Symbol] Which operating system mode to use e.g. :posix or :windows. Use nil to autodetect
88
89
  # @api private
89
- def set_env(name, value = nil, mode = DEFAULT_ENV)
90
+ def set_env(name, value = nil, mode = default_env)
90
91
  case mode
91
92
  when :posix
92
93
  ENV[name] = value
@@ -101,7 +102,7 @@ module Util
101
102
  # @param name [Hash] Environment variables to merge into the existing environment. nil values will remove the variable
102
103
  # @param mode [Symbol] Which operating system mode to use e.g. :posix or :windows. Use nil to autodetect
103
104
  # @api private
104
- def merge_environment(env_hash, mode = DEFAULT_ENV)
105
+ def merge_environment(env_hash, mode = default_env)
105
106
  case mode
106
107
  when :posix
107
108
  env_hash.each { |name, val| ENV[name.to_s] = val }
@@ -758,6 +759,19 @@ module Util
758
759
  Random.new(seed).rand(max)
759
760
  end
760
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
761
775
  end
762
776
  end
763
777