puppet 7.8.0 → 7.12.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 (379) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +5 -5
  3. data/Gemfile +2 -2
  4. data/Gemfile.lock +15 -15
  5. data/README.md +4 -4
  6. data/{ext → examples/enc}/regexp_nodes/classes/databases +0 -0
  7. data/{ext → examples/enc}/regexp_nodes/classes/webservers +0 -0
  8. data/{ext → examples/enc}/regexp_nodes/environment/development +0 -0
  9. data/{ext → examples/enc}/regexp_nodes/parameters/service/prod +0 -0
  10. data/{ext → examples/enc}/regexp_nodes/parameters/service/qa +0 -0
  11. data/{ext → examples/enc}/regexp_nodes/parameters/service/sandbox +0 -0
  12. data/{ext → examples/enc}/regexp_nodes/regexp_nodes.rb +0 -0
  13. data/{ext → examples}/nagios/check_puppet.rb +2 -2
  14. data/ext/README.md +13 -0
  15. data/ext/project_data.yaml +1 -0
  16. data/install.rb +0 -4
  17. data/lib/puppet/application/agent.rb +4 -0
  18. data/lib/puppet/application/apply.rb +20 -2
  19. data/lib/puppet/application/filebucket.rb +1 -0
  20. data/lib/puppet/application/resource.rb +30 -15
  21. data/lib/puppet/application/ssl.rb +1 -0
  22. data/lib/puppet/concurrent/thread_local_singleton.rb +1 -0
  23. data/lib/puppet/configurer.rb +176 -58
  24. data/lib/puppet/confine/variable.rb +1 -1
  25. data/lib/puppet/defaults.rb +67 -29
  26. data/lib/puppet/environments.rb +75 -25
  27. data/lib/puppet/face/help/action.erb +1 -0
  28. data/lib/puppet/face/help/face.erb +1 -0
  29. data/lib/puppet/face/node/clean.rb +1 -1
  30. data/lib/puppet/facter_impl.rb +96 -0
  31. data/lib/puppet/file_serving/configuration/parser.rb +2 -0
  32. data/lib/puppet/file_serving/configuration.rb +2 -0
  33. data/lib/puppet/file_serving/mount/file.rb +4 -4
  34. data/lib/puppet/file_serving/mount/scripts.rb +24 -0
  35. data/lib/puppet/file_system/file_impl.rb +3 -1
  36. data/lib/puppet/file_system/windows.rb +2 -2
  37. data/lib/puppet/file_system.rb +2 -1
  38. data/lib/puppet/forge/cache.rb +1 -1
  39. data/lib/puppet/forge.rb +4 -4
  40. data/lib/puppet/functions/empty.rb +8 -0
  41. data/lib/puppet/functions/find_template.rb +2 -2
  42. data/lib/puppet/functions/strftime.rb +1 -0
  43. data/lib/puppet/functions/unwrap.rb +17 -2
  44. data/lib/puppet/http/service/compiler.rb +6 -1
  45. data/lib/puppet/indirector/catalog/compiler.rb +24 -6
  46. data/lib/puppet/indirector/catalog/rest.rb +1 -0
  47. data/lib/puppet/indirector/facts/facter.rb +6 -6
  48. data/lib/puppet/indirector/indirection.rb +1 -1
  49. data/lib/puppet/indirector/resource/ral.rb +6 -1
  50. data/lib/puppet/indirector/terminus.rb +4 -0
  51. data/lib/puppet/interface/documentation.rb +1 -0
  52. data/lib/puppet/module/plan.rb +0 -1
  53. data/lib/puppet/module/task.rb +1 -1
  54. data/lib/puppet/module_tool/applications/installer.rb +12 -4
  55. data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
  56. data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
  57. data/lib/puppet/module_tool/errors/shared.rb +17 -0
  58. data/lib/puppet/module_tool/tar/mini.rb +1 -1
  59. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  60. data/lib/puppet/node/environment.rb +10 -11
  61. data/lib/puppet/pal/pal_impl.rb +1 -1
  62. data/lib/puppet/parser/scope.rb +8 -7
  63. data/lib/puppet/parser/templatewrapper.rb +1 -0
  64. data/lib/puppet/pops/evaluator/closure.rb +7 -5
  65. data/lib/puppet/pops/lookup/lookup_adapter.rb +3 -2
  66. data/lib/puppet/pops/model/ast.rb +1 -0
  67. data/lib/puppet/pops/model/factory.rb +14 -13
  68. data/lib/puppet/pops/parser/egrammar.ra +2 -2
  69. data/lib/puppet/pops/parser/eparser.rb +752 -753
  70. data/lib/puppet/pops/parser/lexer2.rb +69 -68
  71. data/lib/puppet/pops/parser/slurp_support.rb +1 -0
  72. data/lib/puppet/pops/serialization/to_data_converter.rb +18 -6
  73. data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
  74. data/lib/puppet/pops/types/type_formatter.rb +7 -6
  75. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  76. data/lib/puppet/pops/types/types.rb +1 -1
  77. data/lib/puppet/provider/aix_object.rb +1 -1
  78. data/lib/puppet/provider/exec/posix.rb +16 -4
  79. data/lib/puppet/provider/group/groupadd.rb +5 -2
  80. data/lib/puppet/provider/package/pip.rb +15 -3
  81. data/lib/puppet/provider/package/pkg.rb +19 -2
  82. data/lib/puppet/provider/package/puppet_gem.rb +1 -1
  83. data/lib/puppet/provider/package/puppetserver_gem.rb +1 -1
  84. data/lib/puppet/provider/package/windows/exe_package.rb +30 -1
  85. data/lib/puppet/provider/package/windows/package.rb +2 -1
  86. data/lib/puppet/provider/package/windows.rb +14 -1
  87. data/lib/puppet/provider/package/yum.rb +1 -1
  88. data/lib/puppet/provider/parsedfile.rb +3 -0
  89. data/lib/puppet/provider/service/base.rb +1 -1
  90. data/lib/puppet/provider/service/init.rb +5 -5
  91. data/lib/puppet/provider/service/launchd.rb +2 -2
  92. data/lib/puppet/provider/service/redhat.rb +1 -1
  93. data/lib/puppet/provider/service/smf.rb +3 -3
  94. data/lib/puppet/provider/service/systemd.rb +2 -2
  95. data/lib/puppet/provider/service/upstart.rb +5 -5
  96. data/lib/puppet/provider/user/aix.rb +44 -1
  97. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  98. data/lib/puppet/provider/user/useradd.rb +72 -16
  99. data/lib/puppet/provider.rb +1 -1
  100. data/lib/puppet/reference/providers.rb +2 -2
  101. data/lib/puppet/resource/type_collection.rb +4 -1
  102. data/lib/puppet/runtime.rb +11 -1
  103. data/lib/puppet/settings/config_file.rb +1 -8
  104. data/lib/puppet/settings/file_setting.rb +3 -8
  105. data/lib/puppet/settings/value_translator.rb +0 -1
  106. data/lib/puppet/settings.rb +32 -9
  107. data/lib/puppet/test/test_helper.rb +4 -1
  108. data/lib/puppet/transaction/persistence.rb +11 -1
  109. data/lib/puppet/transaction/report.rb +15 -1
  110. data/lib/puppet/type/exec.rb +35 -5
  111. data/lib/puppet/type/file/mode.rb +6 -0
  112. data/lib/puppet/type/file.rb +6 -6
  113. data/lib/puppet/type/filebucket.rb +2 -2
  114. data/lib/puppet/type/group.rb +0 -1
  115. data/lib/puppet/type/resources.rb +1 -1
  116. data/lib/puppet/type/service.rb +8 -3
  117. data/lib/puppet/type/tidy.rb +1 -1
  118. data/lib/puppet/type/user.rb +1 -2
  119. data/lib/puppet/type.rb +1 -1
  120. data/lib/puppet/util/autoload.rb +1 -1
  121. data/lib/puppet/util/command_line.rb +1 -1
  122. data/lib/puppet/util/filetype.rb +2 -2
  123. data/lib/puppet/util/json.rb +3 -0
  124. data/lib/puppet/util/log.rb +1 -2
  125. data/lib/puppet/util/logging.rb +1 -25
  126. data/lib/puppet/util/monkey_patches.rb +2 -17
  127. data/lib/puppet/util/pidlock.rb +1 -1
  128. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  129. data/lib/puppet/util/suidmanager.rb +1 -2
  130. data/lib/puppet/util/symbolic_file_mode.rb +29 -17
  131. data/lib/puppet/util/tagging.rb +1 -0
  132. data/lib/puppet/util/windows/sid.rb +3 -1
  133. data/lib/puppet/util/windows/user.rb +0 -1
  134. data/lib/puppet/util.rb +4 -3
  135. data/lib/puppet/version.rb +1 -1
  136. data/lib/puppet/x509/cert_provider.rb +3 -21
  137. data/lib/puppet.rb +5 -9
  138. data/locales/puppet.pot +409 -329
  139. data/man/man5/puppet.conf.5 +73 -25
  140. data/man/man8/puppet-agent.8 +4 -1
  141. data/man/man8/puppet-apply.8 +1 -1
  142. data/man/man8/puppet-catalog.8 +9 -9
  143. data/man/man8/puppet-config.8 +1 -1
  144. data/man/man8/puppet-describe.8 +1 -1
  145. data/man/man8/puppet-device.8 +1 -1
  146. data/man/man8/puppet-doc.8 +1 -1
  147. data/man/man8/puppet-epp.8 +1 -1
  148. data/man/man8/puppet-facts.8 +7 -7
  149. data/man/man8/puppet-filebucket.8 +1 -1
  150. data/man/man8/puppet-generate.8 +1 -1
  151. data/man/man8/puppet-help.8 +1 -1
  152. data/man/man8/puppet-lookup.8 +1 -1
  153. data/man/man8/puppet-module.8 +3 -3
  154. data/man/man8/puppet-node.8 +5 -5
  155. data/man/man8/puppet-parser.8 +1 -1
  156. data/man/man8/puppet-plugin.8 +1 -1
  157. data/man/man8/puppet-report.8 +5 -5
  158. data/man/man8/puppet-resource.8 +1 -1
  159. data/man/man8/puppet-script.8 +1 -1
  160. data/man/man8/puppet-ssl.8 +1 -1
  161. data/man/man8/puppet.8 +2 -2
  162. data/spec/fixtures/integration/application/agent/lib/facter/agent_spec_role.rb +3 -0
  163. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Gemfile +4 -0
  164. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Rakefile +3 -0
  165. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/lib/puppet/functions/l10n.rb +8 -0
  166. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/config.yaml +25 -0
  167. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/ja/puppet-l10n.po +19 -0
  168. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/puppet-l10n.pot +20 -0
  169. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/metadata.json +8 -0
  170. data/spec/fixtures/ssl/127.0.0.1-key.pem +106 -106
  171. data/spec/fixtures/ssl/127.0.0.1.pem +48 -48
  172. data/spec/fixtures/ssl/bad-basic-constraints.pem +54 -54
  173. data/spec/fixtures/ssl/bad-int-basic-constraints.pem +51 -51
  174. data/spec/fixtures/ssl/ca.pem +52 -52
  175. data/spec/fixtures/ssl/crl.pem +25 -25
  176. data/spec/fixtures/ssl/ec-key-openssl.pem +8 -0
  177. data/spec/fixtures/ssl/ec-key-pk8.pem +5 -0
  178. data/spec/fixtures/ssl/ec-key.pem +11 -11
  179. data/spec/fixtures/ssl/ec.pem +32 -32
  180. data/spec/fixtures/ssl/encrypted-ec-key.pem +12 -12
  181. data/spec/fixtures/ssl/encrypted-key.pem +107 -107
  182. data/spec/fixtures/ssl/intermediate-agent-crl.pem +25 -25
  183. data/spec/fixtures/ssl/intermediate-agent.pem +54 -54
  184. data/spec/fixtures/ssl/intermediate-crl.pem +28 -28
  185. data/spec/fixtures/ssl/intermediate.pem +51 -51
  186. data/spec/fixtures/ssl/oid-key.pem +117 -0
  187. data/spec/fixtures/ssl/oid.pem +69 -0
  188. data/spec/fixtures/ssl/pluto-key.pem +106 -106
  189. data/spec/fixtures/ssl/pluto.pem +50 -50
  190. data/spec/fixtures/ssl/request-key.pem +106 -106
  191. data/spec/fixtures/ssl/request.pem +45 -45
  192. data/spec/fixtures/ssl/revoked-key.pem +106 -106
  193. data/spec/fixtures/ssl/revoked.pem +49 -49
  194. data/spec/fixtures/ssl/signed-key.pem +106 -106
  195. data/spec/fixtures/ssl/signed.pem +47 -47
  196. data/spec/fixtures/ssl/tampered-cert.pem +49 -49
  197. data/spec/fixtures/ssl/tampered-csr.pem +45 -45
  198. data/spec/fixtures/ssl/trusted_oid_mapping.yaml +5 -0
  199. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +106 -106
  200. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -48
  201. data/spec/fixtures/ssl/unknown-ca-key.pem +106 -106
  202. data/spec/fixtures/ssl/unknown-ca.pem +52 -52
  203. data/spec/integration/application/agent_spec.rb +118 -52
  204. data/spec/integration/application/filebucket_spec.rb +16 -0
  205. data/spec/integration/application/module_spec.rb +21 -0
  206. data/spec/integration/application/resource_spec.rb +35 -1
  207. data/spec/integration/application/ssl_spec.rb +20 -0
  208. data/spec/integration/configurer_spec.rb +18 -2
  209. data/spec/integration/defaults_spec.rb +5 -0
  210. data/spec/integration/environments/settings_interpolation_spec.rb +0 -4
  211. data/spec/integration/indirector/facts/facter_spec.rb +93 -39
  212. data/spec/integration/l10n/compiler_spec.rb +37 -0
  213. data/spec/integration/transaction/report_spec.rb +1 -1
  214. data/spec/integration/type/exec_spec.rb +70 -45
  215. data/spec/integration/type/file_spec.rb +2 -2
  216. data/spec/integration/type/package_spec.rb +6 -6
  217. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  218. data/spec/integration/util/windows/process_spec.rb +1 -9
  219. data/spec/lib/puppet/test_ca.rb +5 -0
  220. data/spec/lib/puppet_spec/modules.rb +13 -2
  221. data/spec/lib/puppet_spec/puppetserver.rb +15 -0
  222. data/spec/lib/puppet_spec/settings.rb +1 -0
  223. data/spec/shared_behaviours/documentation_on_faces.rb +0 -2
  224. data/spec/shared_contexts/l10n.rb +27 -0
  225. data/spec/spec_helper.rb +1 -10
  226. data/spec/unit/application/apply_spec.rb +76 -56
  227. data/spec/unit/application/resource_spec.rb +29 -0
  228. data/spec/unit/configurer_spec.rb +291 -56
  229. data/spec/unit/environments_spec.rb +184 -0
  230. data/spec/unit/facter_impl_spec.rb +31 -0
  231. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  232. data/spec/unit/file_serving/configuration/parser_spec.rb +23 -0
  233. data/spec/unit/file_serving/configuration_spec.rb +12 -4
  234. data/spec/unit/file_serving/mount/scripts_spec.rb +69 -0
  235. data/spec/unit/file_system_spec.rb +13 -0
  236. data/spec/unit/functions/assert_type_spec.rb +1 -1
  237. data/spec/unit/functions/empty_spec.rb +10 -0
  238. data/spec/unit/functions/logging_spec.rb +1 -0
  239. data/spec/unit/functions/lookup_spec.rb +87 -0
  240. data/spec/unit/functions/unwrap_spec.rb +8 -0
  241. data/spec/unit/functions4_spec.rb +2 -2
  242. data/spec/unit/http/service/compiler_spec.rb +8 -0
  243. data/spec/unit/indirector/catalog/compiler_spec.rb +87 -0
  244. data/spec/unit/indirector/catalog/rest_spec.rb +8 -0
  245. data/spec/unit/indirector/indirection_spec.rb +10 -3
  246. data/spec/unit/indirector/resource/ral_spec.rb +40 -75
  247. data/spec/unit/interface/action_spec.rb +0 -9
  248. data/spec/unit/module_spec.rb +14 -0
  249. data/spec/unit/module_tool/applications/installer_spec.rb +52 -14
  250. data/spec/unit/network/formats_spec.rb +6 -0
  251. data/spec/unit/parser/compiler_spec.rb +29 -0
  252. data/spec/unit/parser/templatewrapper_spec.rb +12 -2
  253. data/spec/unit/pops/loaders/dependency_loader_spec.rb +0 -9
  254. data/spec/unit/pops/parser/lexer2_spec.rb +0 -4
  255. data/spec/unit/pops/parser/parse_containers_spec.rb +0 -11
  256. data/spec/unit/pops/serialization/to_from_hr_spec.rb +58 -0
  257. data/spec/unit/pops/serialization/to_stringified_spec.rb +5 -0
  258. data/spec/unit/pops/types/type_calculator_spec.rb +6 -0
  259. data/spec/unit/provider/package/gem_spec.rb +1 -1
  260. data/spec/unit/provider/package/pip2_spec.rb +1 -1
  261. data/spec/unit/provider/package/pip3_spec.rb +1 -1
  262. data/spec/unit/provider/package/pip_spec.rb +38 -1
  263. data/spec/unit/provider/package/pkg_spec.rb +34 -5
  264. data/spec/unit/provider/package/puppet_gem_spec.rb +1 -1
  265. data/spec/unit/provider/package/puppetserver_gem_spec.rb +1 -1
  266. data/spec/unit/provider/package/windows/exe_package_spec.rb +17 -0
  267. data/spec/unit/provider/parsedfile_spec.rb +10 -0
  268. data/spec/unit/provider/service/launchd_spec.rb +11 -0
  269. data/spec/unit/provider/service/systemd_spec.rb +1 -1
  270. data/spec/unit/provider/user/aix_spec.rb +100 -0
  271. data/spec/unit/provider/user/directoryservice_spec.rb +1 -1
  272. data/spec/unit/provider/user/useradd_spec.rb +43 -2
  273. data/spec/unit/provider_spec.rb +4 -4
  274. data/spec/unit/puppet_spec.rb +12 -4
  275. data/spec/unit/resource/type_collection_spec.rb +16 -0
  276. data/spec/unit/resource/type_spec.rb +2 -2
  277. data/spec/unit/settings/config_file_spec.rb +1 -11
  278. data/spec/unit/settings/file_setting_spec.rb +10 -7
  279. data/spec/unit/settings/value_translator_spec.rb +4 -5
  280. data/spec/unit/settings_spec.rb +120 -79
  281. data/spec/unit/ssl/ssl_provider_spec.rb +18 -16
  282. data/spec/unit/type/exec_spec.rb +76 -29
  283. data/spec/unit/type/file/source_spec.rb +4 -4
  284. data/spec/unit/type/service_spec.rb +27 -0
  285. data/spec/unit/type/tidy_spec.rb +7 -0
  286. data/spec/unit/type_spec.rb +2 -2
  287. data/spec/unit/util/autoload_spec.rb +25 -8
  288. data/spec/unit/util/ldap/connection_spec.rb +10 -10
  289. data/spec/unit/util/ldap/manager_spec.rb +2 -2
  290. data/spec/unit/util/logging_spec.rb +2 -0
  291. data/spec/unit/util/windows/sid_spec.rb +39 -4
  292. data/spec/unit/util_spec.rb +1 -3
  293. data/spec/unit/x509/cert_provider_spec.rb +9 -1
  294. data/tasks/generate_cert_fixtures.rake +10 -1
  295. data/tasks/parallel.rake +3 -3
  296. metadata +51 -95
  297. data/ext/README.environment +0 -8
  298. data/ext/dbfix.sql +0 -132
  299. data/ext/debian/README.Debian +0 -8
  300. data/ext/debian/README.source +0 -2
  301. data/ext/debian/TODO.Debian +0 -1
  302. data/ext/debian/changelog.erb +0 -1122
  303. data/ext/debian/compat +0 -1
  304. data/ext/debian/control +0 -144
  305. data/ext/debian/copyright +0 -339
  306. data/ext/debian/docs +0 -1
  307. data/ext/debian/fileserver.conf +0 -41
  308. data/ext/debian/puppet-common.dirs +0 -13
  309. data/ext/debian/puppet-common.install +0 -3
  310. data/ext/debian/puppet-common.lintian-overrides +0 -5
  311. data/ext/debian/puppet-common.manpages +0 -28
  312. data/ext/debian/puppet-common.postinst +0 -35
  313. data/ext/debian/puppet-common.postrm +0 -33
  314. data/ext/debian/puppet-el.dirs +0 -1
  315. data/ext/debian/puppet-el.emacsen-install +0 -25
  316. data/ext/debian/puppet-el.emacsen-remove +0 -11
  317. data/ext/debian/puppet-el.emacsen-startup +0 -9
  318. data/ext/debian/puppet-el.install +0 -1
  319. data/ext/debian/puppet-testsuite.install +0 -2
  320. data/ext/debian/puppet-testsuite.lintian-overrides +0 -4
  321. data/ext/debian/puppet.lintian-overrides +0 -3
  322. data/ext/debian/puppet.logrotate +0 -20
  323. data/ext/debian/puppet.postinst +0 -20
  324. data/ext/debian/puppet.postrm +0 -20
  325. data/ext/debian/puppet.preinst +0 -20
  326. data/ext/debian/puppetmaster-common.install +0 -2
  327. data/ext/debian/puppetmaster-common.manpages +0 -2
  328. data/ext/debian/puppetmaster-common.postinst +0 -6
  329. data/ext/debian/puppetmaster-passenger.dirs +0 -4
  330. data/ext/debian/puppetmaster-passenger.postinst +0 -162
  331. data/ext/debian/puppetmaster-passenger.postrm +0 -61
  332. data/ext/debian/puppetmaster.README.debian +0 -17
  333. data/ext/debian/puppetmaster.default +0 -14
  334. data/ext/debian/puppetmaster.init +0 -137
  335. data/ext/debian/puppetmaster.lintian-overrides +0 -3
  336. data/ext/debian/puppetmaster.postinst +0 -20
  337. data/ext/debian/puppetmaster.postrm +0 -5
  338. data/ext/debian/puppetmaster.preinst +0 -22
  339. data/ext/debian/rules +0 -132
  340. data/ext/debian/source/format +0 -1
  341. data/ext/debian/source/options +0 -1
  342. data/ext/debian/vim-puppet.README.Debian +0 -13
  343. data/ext/debian/vim-puppet.dirs +0 -5
  344. data/ext/debian/vim-puppet.yaml +0 -7
  345. data/ext/debian/watch +0 -2
  346. data/ext/freebsd/puppetd +0 -26
  347. data/ext/freebsd/puppetmasterd +0 -26
  348. data/ext/gentoo/conf.d/puppet +0 -5
  349. data/ext/gentoo/conf.d/puppetmaster +0 -12
  350. data/ext/gentoo/init.d/puppet +0 -38
  351. data/ext/gentoo/init.d/puppetmaster +0 -51
  352. data/ext/gentoo/puppet/fileserver.conf +0 -41
  353. data/ext/ips/puppet-agent +0 -44
  354. data/ext/ips/puppet-master +0 -44
  355. data/ext/ips/puppet.p5m.erb +0 -12
  356. data/ext/ips/puppetagent.xml +0 -42
  357. data/ext/ips/puppetmaster.xml +0 -42
  358. data/ext/ips/rules +0 -19
  359. data/ext/ips/transforms +0 -34
  360. data/ext/ldap/puppet.schema +0 -24
  361. data/ext/logcheck/puppet +0 -23
  362. data/ext/osx/file_mapping.yaml +0 -28
  363. data/ext/osx/postflight.erb +0 -109
  364. data/ext/osx/preflight.erb +0 -52
  365. data/ext/osx/prototype.plist.erb +0 -38
  366. data/ext/redhat/fileserver.conf +0 -41
  367. data/ext/redhat/logrotate +0 -21
  368. data/ext/redhat/puppet.spec.erb +0 -841
  369. data/ext/redhat/server.init +0 -128
  370. data/ext/redhat/server.sysconfig +0 -13
  371. data/ext/solaris/pkginfo +0 -6
  372. data/ext/solaris/smf/puppetd.xml +0 -77
  373. data/ext/solaris/smf/puppetmasterd.xml +0 -77
  374. data/ext/solaris/smf/svc-puppetd +0 -71
  375. data/ext/solaris/smf/svc-puppetmasterd +0 -67
  376. data/ext/suse/puppet.spec +0 -310
  377. data/ext/suse/server.init +0 -173
  378. data/ext/yaml_nodes.rb +0 -105
  379. data/spec/unit/indirector/store_configs_spec.rb +0 -7
@@ -70,7 +70,7 @@ Puppet::Type.type(:service).provide :launchd, :parent => :base do
70
70
  #
71
71
  # @api private
72
72
  def self.get_os_version
73
- @os_version ||= Facter.value(:operatingsystemmajrelease).to_i
73
+ @os_version ||= Puppet.runtime[:facter].value(:operatingsystemmajrelease).to_i
74
74
  end
75
75
 
76
76
  # Defines the path to the overrides plist file where service enabling
@@ -138,7 +138,7 @@ Puppet::Type.type(:service).provide :launchd, :parent => :base do
138
138
  Puppet.debug("Reading launchd plist #{filepath}")
139
139
  job = read_plist(filepath)
140
140
  next if job.nil?
141
- if job.has_key?("Label")
141
+ if job.respond_to?(:key) && job.key?("Label")
142
142
  @label_to_path_map[job["Label"]] = filepath
143
143
  else
144
144
  #TRANSLATORS 'plist' and label' should not be translated
@@ -35,7 +35,7 @@ Puppet::Type.type(:service).provide :redhat, :parent => :init, :source => :init
35
35
  # For Suse OS family, chkconfig returns 0 even if the service is disabled or non-existent
36
36
  # Therefore, check the output for '<name> on' (or '<name> B for boot services)
37
37
  # to see if it is enabled
38
- return :false unless Facter.value(:osfamily) != 'Suse' || output =~ /^#{name}\s+(on|B)$/
38
+ return :false unless Puppet.runtime[:facter].value(:osfamily) != 'Suse' || output =~ /^#{name}\s+(on|B)$/
39
39
 
40
40
  :true
41
41
  end
@@ -101,14 +101,14 @@ Puppet::Type.type(:service).provide :smf, :parent => :base do
101
101
 
102
102
  # Returns true if the provider supports incomplete services.
103
103
  def supports_incomplete_services?
104
- Puppet::Util::Package.versioncmp(Facter.value(:operatingsystemrelease), '11.1') >= 0
104
+ Puppet::Util::Package.versioncmp(Puppet.runtime[:facter].value(:operatingsystemrelease), '11.1') >= 0
105
105
  end
106
106
 
107
107
  # Returns true if the service is complete. A complete service is a service that
108
108
  # has the general/complete property defined.
109
109
  def complete_service?
110
110
  unless supports_incomplete_services?
111
- raise Puppet::Error, _("Cannot query if the %{service} service is complete: The concept of complete/incomplete services was introduced in Solaris 11.1. You are on a Solaris %{release} machine.") % { service: @resource[:name], release: Facter.value(:operatingsystemrelease) }
111
+ raise Puppet::Error, _("Cannot query if the %{service} service is complete: The concept of complete/incomplete services was introduced in Solaris 11.1. You are on a Solaris %{release} machine.") % { service: @resource[:name], release: Puppet.runtime[:facter].value(:operatingsystemrelease) }
112
112
  end
113
113
 
114
114
  return @complete_service if @complete_service
@@ -138,7 +138,7 @@ Puppet::Type.type(:service).provide :smf, :parent => :base do
138
138
  end
139
139
 
140
140
  def restartcmd
141
- if Puppet::Util::Package.versioncmp(Facter.value(:operatingsystemrelease), '11.2') >= 0
141
+ if Puppet::Util::Package.versioncmp(Puppet.runtime[:facter].value(:operatingsystemrelease), '11.2') >= 0
142
142
  [command(:adm), :restart, "-s", self.service_fmri]
143
143
  else
144
144
  # Synchronous restart only supported in Solaris 11.2 and above
@@ -14,7 +14,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
14
14
  confine :true => Puppet::FileSystem.exist?('/proc/1/comm') && Puppet::FileSystem.read('/proc/1/comm').include?('systemd')
15
15
 
16
16
  defaultfor :osfamily => [:archlinux]
17
- defaultfor :osfamily => :redhat, :operatingsystemmajrelease => ["7", "8"]
17
+ defaultfor :osfamily => :redhat, :operatingsystemmajrelease => ["7", "8", "9"]
18
18
  defaultfor :osfamily => :redhat, :operatingsystem => :fedora
19
19
  defaultfor :osfamily => :suse
20
20
  defaultfor :osfamily => :coreos
@@ -110,7 +110,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
110
110
  # The indirect state indicates that the unit is not enabled.
111
111
  return :false if output == 'indirect'
112
112
  return :true if (code == 0)
113
- if (output.empty?) && (code > 0) && (Facter.value(:osfamily).casecmp('debian').zero?)
113
+ if (output.empty?) && (code > 0) && (Puppet.runtime[:facter].value(:osfamily).casecmp('debian').zero?)
114
114
  ret = debian_enabled?
115
115
  return ret if ret
116
116
  end
@@ -10,10 +10,10 @@ Puppet::Type.type(:service).provide :upstart, :parent => :debian do
10
10
  "
11
11
 
12
12
  confine :any => [
13
- Facter.value(:operatingsystem) == 'Ubuntu',
14
- (Facter.value(:osfamily) == 'RedHat' and Facter.value(:operatingsystemrelease) =~ /^6\./),
15
- (Facter.value(:operatingsystem) == 'Amazon' and Facter.value(:operatingsystemmajrelease) =~ /\d{4}/),
16
- Facter.value(:operatingsystem) == 'LinuxMint',
13
+ Puppet.runtime[:facter].value(:operatingsystem) == 'Ubuntu',
14
+ (Puppet.runtime[:facter].value(:osfamily) == 'RedHat' and Puppet.runtime[:facter].value(:operatingsystemrelease) =~ /^6\./),
15
+ (Puppet.runtime[:facter].value(:operatingsystem) == 'Amazon' and Puppet.runtime[:facter].value(:operatingsystemmajrelease) =~ /\d{4}/),
16
+ Puppet.runtime[:facter].value(:operatingsystem) == 'LinuxMint',
17
17
  ]
18
18
 
19
19
  defaultfor :operatingsystem => :ubuntu, :operatingsystemmajrelease => ["10.04", "12.04", "14.04", "14.10"]
@@ -57,7 +57,7 @@ Puppet::Type.type(:service).provide :upstart, :parent => :debian do
57
57
 
58
58
  def self.excludes
59
59
  excludes = super
60
- if Facter.value(:osfamily) == 'RedHat'
60
+ if Puppet.runtime[:facter].value(:osfamily) == 'RedHat'
61
61
  # Puppet cannot deal with services that have instances, so we have to
62
62
  # ignore these services using instances on redhat based systems.
63
63
  excludes += %w[serial tty]
@@ -265,6 +265,50 @@ Puppet::Type.type(:user).provide :aix, :parent => Puppet::Provider::AixObject do
265
265
  end
266
266
  end
267
267
 
268
+ # Lists all instances of the given object, taking in an optional set
269
+ # of ia_module arguments. Returns an array of hashes, each hash
270
+ # having the schema
271
+ # {
272
+ # :name => <object_name>
273
+ # :home => <object_home>
274
+ # }
275
+ def list_all_homes(ia_module_args = [])
276
+ cmd = [command(:list), '-c', *ia_module_args, '-a', 'home', 'ALL']
277
+ parse_aix_objects(execute(cmd)).to_a.map do |object|
278
+ name = object[:name]
279
+ home = object[:attributes].delete(:home)
280
+
281
+ { name: name, home: home }
282
+ end
283
+ rescue => e
284
+ Puppet.debug("Could not list home of all users: #{e.message}")
285
+ {}
286
+ end
287
+
288
+ # Deletes this instance resource
289
+ def delete
290
+ homedir = home
291
+ super
292
+ return unless @resource.managehome?
293
+
294
+ if !Puppet::Util.absolute_path?(homedir) || File.realpath(homedir) == '/' || Puppet::FileSystem.symlink?(homedir)
295
+ Puppet.debug("Can not remove home directory '#{homedir}' of user '#{@resource[:name]}'. Please make sure the path is not relative, symlink or '/'.")
296
+ return
297
+ end
298
+
299
+ affected_home = list_all_homes.find { |info| info[:home].start_with?(File.realpath(homedir)) }
300
+ if affected_home
301
+ Puppet.debug("Can not remove home directory '#{homedir}' of user '#{@resource[:name]}' as it would remove the home directory '#{affected_home[:home]}' of user '#{affected_home[:name]}' also.")
302
+ return
303
+ end
304
+
305
+ FileUtils.remove_entry_secure(homedir, true)
306
+ end
307
+
308
+ def deletecmd
309
+ [self.class.command(:delete), '-p'] + ia_module_args + [@resource[:name]]
310
+ end
311
+
268
312
  # UNSUPPORTED
269
313
  #- **profile_membership**
270
314
  # Whether specified roles should be treated as the only roles
@@ -314,5 +358,4 @@ Puppet::Type.type(:user).provide :aix, :parent => Puppet::Provider::AixObject do
314
358
  # be treated as the minimum membership list. Valid values are
315
359
  # `inclusive`, `minimum`.
316
360
  # UNSUPPORTED
317
-
318
361
  end
@@ -159,7 +159,7 @@ Puppet::Type.type(:user).provide :directoryservice do
159
159
  end
160
160
 
161
161
  def self.get_os_version
162
- @os_version ||= Facter.value(:macosx_productversion_major)
162
+ @os_version ||= Puppet.runtime[:facter].value(:macosx_productversion_major)
163
163
  end
164
164
 
165
165
  # Use dscl to retrieve an array of hashes containing attributes about all
@@ -7,9 +7,12 @@ require_relative '../../../puppet/error'
7
7
  Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameService::ObjectAdd do
8
8
  desc "User management via `useradd` and its ilk. Note that you will need to
9
9
  install Ruby's shadow password library (often known as `ruby-libshadow`)
10
- if you wish to manage user passwords."
10
+ if you wish to manage user passwords.
11
11
 
12
- commands :add => "useradd", :delete => "userdel", :modify => "usermod", :password => "chage"
12
+ To use the `forcelocal` parameter, you need to install the `libuser` package (providing
13
+ `/usr/sbin/lgroupadd` and `/usr/sbin/luseradd`)."
14
+
15
+ commands :add => "useradd", :delete => "userdel", :modify => "usermod", :password => "chage", :chpasswd => "chpasswd"
13
16
 
14
17
  options :home, :flag => "-d", :method => :dir
15
18
  options :comment, :method => :gecos
@@ -21,13 +24,13 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
21
24
  options :expiry, :method => :sp_expire,
22
25
  :munge => proc { |value|
23
26
  if value == :absent
24
- if Facter.value(:operatingsystem)=='SLES' && Facter.value(:operatingsystemmajrelease) == "11"
27
+ if Puppet.runtime[:facter].value(:operatingsystem)=='SLES' && Puppet.runtime[:facter].value(:operatingsystemmajrelease) == "11"
25
28
  -1
26
29
  else
27
30
  ''
28
31
  end
29
32
  else
30
- case Facter.value(:operatingsystem)
33
+ case Puppet.runtime[:facter].value(:operatingsystem)
31
34
  when 'Solaris'
32
35
  # Solaris uses %m/%d/%Y for useradd/usermod
33
36
  expiry_year, expiry_month, expiry_day = value.split('-')
@@ -69,6 +72,16 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
69
72
  get(:comment)
70
73
  end
71
74
 
75
+ def shell
76
+ return localshell if @resource.forcelocal?
77
+ get(:shell)
78
+ end
79
+
80
+ def home
81
+ return localhome if @resource.forcelocal?
82
+ get(:home)
83
+ end
84
+
72
85
  def groups
73
86
  return localgroups if @resource.forcelocal?
74
87
  super
@@ -120,6 +133,16 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
120
133
  user[:gecos]
121
134
  end
122
135
 
136
+ def localshell
137
+ user = finduser(:account, resource[:name])
138
+ user[:shell]
139
+ end
140
+
141
+ def localhome
142
+ user = finduser(:account, resource[:name])
143
+ user[:directory]
144
+ end
145
+
123
146
  def localgroups
124
147
  @groups_of ||= {}
125
148
  group_file = '/etc/group'
@@ -152,6 +175,38 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
152
175
  set(:groups, value)
153
176
  end
154
177
 
178
+ def password=(value)
179
+ user = @resource[:name]
180
+ tempfile = Tempfile.new('puppet', :encoding => Encoding::UTF_8)
181
+ begin
182
+ # Puppet execute does not support strings as input, only files.
183
+ # The password is expected to be in an encrypted format given -e is specified:
184
+ tempfile << "#{user}:#{value}\n"
185
+ tempfile.flush
186
+
187
+ # Options '-e' use encrypted password
188
+ # Must receive "user:enc_password" as input
189
+ # command, arguments = {:failonfail => true, :combine => true}
190
+ cmd = [command(:chpasswd), '-e']
191
+ execute_options = {
192
+ :failonfail => false,
193
+ :combine => true,
194
+ :stdinfile => tempfile.path,
195
+ :sensitive => has_sensitive_data?
196
+ }
197
+ output = execute(cmd, execute_options)
198
+
199
+ rescue => detail
200
+ tempfile.close
201
+ tempfile.delete
202
+ raise Puppet::Error, "Could not set password on #{@resource.class.name}[#{@resource.name}]: #{detail}", detail.backtrace
203
+ end
204
+
205
+ # chpasswd can return 1, even on success (at least on AIX 6.1); empty output
206
+ # indicates success
207
+ raise Puppet::ExecutionFailure, "chpasswd said #{output}" if output != ''
208
+ end
209
+
155
210
  verify :gid, "GID must be an integer" do |value|
156
211
  value.is_a? Integer
157
212
  end
@@ -161,7 +216,7 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
161
216
  end
162
217
 
163
218
  has_features :manages_homedir, :allows_duplicates, :manages_expiry
164
- has_features :system_users unless %w{HP-UX Solaris}.include? Facter.value(:operatingsystem)
219
+ has_features :system_users unless %w{HP-UX Solaris}.include? Puppet.runtime[:facter].value(:operatingsystem)
165
220
 
166
221
  has_features :manages_passwords, :manages_password_age if Puppet.features.libshadow?
167
222
  has_features :manages_shell
@@ -196,8 +251,8 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
196
251
  # libuser does not implement the -m flag
197
252
  cmd << "-m" unless @resource.forcelocal?
198
253
  else
199
- osfamily = Facter.value(:osfamily)
200
- osversion = Facter.value(:operatingsystemmajrelease).to_i
254
+ osfamily = Puppet.runtime[:facter].value(:osfamily)
255
+ osversion = Puppet.runtime[:facter].value(:operatingsystemmajrelease).to_i
201
256
  # SLES 11 uses pwdutils instead of shadow, which does not have -M
202
257
  # Solaris and OpenBSD use different useradd flavors
203
258
  unless osfamily =~ /Solaris|OpenBSD/ || osfamily == 'Suse' && osversion <= 11
@@ -215,13 +270,15 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
215
270
  end
216
271
  end
217
272
 
273
+ # Add properties and flags but skipping password related properties due to
274
+ # security risks
218
275
  def add_properties
219
276
  cmd = []
220
277
  # validproperties is a list of properties in undefined order
221
278
  # sort them to have a predictable command line in tests
222
279
  Puppet::Type.type(:user).validproperties.sort.each do |property|
223
280
  value = get_value_for_property(property)
224
- next if value.nil?
281
+ next if value.nil? || property == :password
225
282
  # the value needs to be quoted, mostly because -c might
226
283
  # have spaces in it
227
284
  cmd << flag(property) << munge(property, value)
@@ -293,7 +350,7 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
293
350
  cmd = [command(:delete)]
294
351
  end
295
352
  # Solaris `userdel -r` will fail if the homedir does not exist.
296
- if @resource.managehome? && (('Solaris' != Facter.value(:operatingsystem)) || Dir.exist?(Dir.home(@resource[:name])))
353
+ if @resource.managehome? && (('Solaris' != Puppet.runtime[:facter].value(:operatingsystem)) || Dir.exist?(Dir.home(@resource[:name])))
297
354
  cmd << '-r'
298
355
  end
299
356
  cmd << @resource[:name]
@@ -331,13 +388,12 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
331
388
  if @resource[:shell]
332
389
  check_valid_shell
333
390
  end
334
- super
335
- if @resource.forcelocal? && self.groups?
336
- set(:groups, @resource[:groups])
337
- end
338
- if @resource.forcelocal? && @resource[:expiry]
339
- set(:expiry, @resource[:expiry])
340
- end
391
+ super
392
+ if @resource.forcelocal?
393
+ set(:groups, @resource[:groups]) if self.groups?
394
+ set(:expiry, @resource[:expiry]) if @resource[:expiry]
395
+ end
396
+ set(:password, @resource[:password]) if @resource[:password]
341
397
  end
342
398
 
343
399
  def groups?
@@ -289,7 +289,7 @@ class Puppet::Provider
289
289
  # values. Given one or more Regexp instances, fact is compared via the basic
290
290
  # pattern-matching operator.
291
291
  def self.fact_match(fact, values)
292
- fact_val = Facter.value(fact).to_s.downcase
292
+ fact_val = Puppet.runtime[:facter].value(fact).to_s.downcase
293
293
  if fact_val.empty?
294
294
  return false
295
295
  else
@@ -15,7 +15,7 @@ providers = Puppet::Util::Reference.newreference :providers, :title => "Provider
15
15
  # Throw some facts in there, so we know where the report is from.
16
16
  ["Ruby Version", "Puppet Version", "Operating System", "Operating System Release"].each do |label|
17
17
  name = label.gsub(/\s+/, '')
18
- value = Facter.value(name)
18
+ value = Puppet.runtime[:facter].value(name)
19
19
  ret << option(label, value)
20
20
  end
21
21
  ret << "\n"
@@ -61,7 +61,7 @@ providers = Puppet::Util::Reference.newreference :providers, :title => "Provider
61
61
  if Puppet.settings.valid?(name)
62
62
  details << _(" - Setting %{name} (currently %{value}) not in list %{facts}\n") % { name: name, value: Puppet.settings.value(name).inspect, facts: facts.join(", ") }
63
63
  else
64
- details << _(" - Fact %{name} (currently %{value}) not in list %{facts}\n") % { name: name, value: Facter.value(name).inspect, facts: facts.join(", ") }
64
+ details << _(" - Fact %{name} (currently %{value}) not in list %{facts}\n") % { name: name, value: Puppet.runtime[:facter].value(name).inspect, facts: facts.join(", ") }
65
65
  end
66
66
  end
67
67
  when :true
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require_relative '../../puppet/parser/type_loader'
2
3
  require_relative '../../puppet/util/file_watcher'
3
4
  require_relative '../../puppet/util/warnings'
@@ -61,6 +62,7 @@ class Puppet::Resource::TypeCollection
61
62
  def add_hostclass(instance)
62
63
  handle_hostclass_merge(instance)
63
64
  dupe_check(instance, @hostclasses) { |dupe| _("Class '%{klass}' is already defined%{error}; cannot redefine") % { klass: instance.name, error: dupe.error_context } }
65
+ dupe_check(instance, @nodes) { |dupe| _("Node '%{klass}' is already defined%{error}; cannot be redefined as a class") % { klass: instance.name, error: dupe.error_context } }
64
66
  dupe_check(instance, @definitions) { |dupe| _("Definition '%{klass}' is already defined%{error}; cannot be redefined as a class") % { klass: instance.name, error: dupe.error_context } }
65
67
 
66
68
  @hostclasses[instance.name] = instance
@@ -93,6 +95,7 @@ class Puppet::Resource::TypeCollection
93
95
 
94
96
  def add_node(instance)
95
97
  dupe_check(instance, @nodes) { |dupe| _("Node '%{name}' is already defined%{error}; cannot redefine") % { name: instance.name, error: dupe.error_context } }
98
+ dupe_check(instance, @hostclasses) { |dupe| _("Class '%{klass}' is already defined%{error}; cannot be redefined as a node") % { klass: instance.name, error: dupe.error_context } }
96
99
 
97
100
  @node_list << instance
98
101
  @nodes[instance.name] = instance
@@ -177,7 +180,7 @@ class Puppet::Resource::TypeCollection
177
180
 
178
181
  private
179
182
 
180
- COLON_COLON = "::".freeze
183
+ COLON_COLON = "::"
181
184
 
182
185
  # Resolve namespaces and find the given object. Autoload it if
183
186
  # necessary.
@@ -1,4 +1,5 @@
1
1
  require_relative '../puppet/http'
2
+ require_relative '../puppet/facter_impl'
2
3
  require 'singleton'
3
4
 
4
5
  # Provides access to runtime implementations.
@@ -16,11 +17,20 @@ class Puppet::Runtime
16
17
  else
17
18
  Puppet::HTTP::ExternalClient.new(klass)
18
19
  end
19
- end
20
+ end,
21
+ facter: proc { Puppet::FacterImpl.new }
20
22
  }
21
23
  end
22
24
  private :initialize
23
25
 
26
+ # Loads all runtime implementations.
27
+ #
28
+ # @return Array[Symbol] the names of loaded implementations
29
+ # @api private
30
+ def load_services
31
+ @runtime_services.keys.each { |key| self[key] }
32
+ end
33
+
24
34
  # Get a runtime implementation.
25
35
  #
26
36
  # @param name [Symbol] the name of the implementation
@@ -98,14 +98,7 @@ private
98
98
 
99
99
  def parse_setting(setting, section)
100
100
  var = setting.name.intern
101
-
102
- # We don't want to munge modes, because they're specified in octal, so we'll
103
- # just leave them as a String, since Puppet handles that case correctly.
104
- if var == :mode
105
- value = setting.value
106
- else
107
- value = @value_converter[setting.value]
108
- end
101
+ value = @value_converter[setting.value]
109
102
 
110
103
  # Check to see if this is a file argument and it has extra options
111
104
  begin
@@ -53,7 +53,7 @@ class Puppet::Settings::FileSetting < Puppet::Settings::StringSetting
53
53
  end
54
54
  end
55
55
 
56
- attr_accessor :mode, :create
56
+ attr_accessor :mode
57
57
 
58
58
  def initialize(args)
59
59
  @group = Unspecified.new
@@ -61,11 +61,6 @@ class Puppet::Settings::FileSetting < Puppet::Settings::StringSetting
61
61
  super(args)
62
62
  end
63
63
 
64
- # Should we create files, rather than just directories?
65
- def create_files?
66
- create
67
- end
68
-
69
64
  # @param value [String] the group to use on the created file (can only be "root" or "service")
70
65
  # @api public
71
66
  def group=(value)
@@ -135,8 +130,8 @@ class Puppet::Settings::FileSetting < Puppet::Settings::StringSetting
135
130
  # Make sure the paths are fully qualified.
136
131
  path = File.expand_path(path)
137
132
 
138
- return nil unless type == :directory or create_files? or Puppet::FileSystem.exist?(path)
139
- return nil if path =~ /^\/dev/ or path =~ /^[A-Z]:\/dev/i
133
+ return nil unless type == :directory || Puppet::FileSystem.exist?(path)
134
+ return nil if path =~ /^\/dev/ || path =~ /^[A-Z]:\/dev/i
140
135
 
141
136
  resource = Puppet::Resource.new(:file, path)
142
137
 
@@ -5,7 +5,6 @@ class Puppet::Settings::ValueTranslator
5
5
  return case value
6
6
  when /^false$/i; false
7
7
  when /^true$/i; true
8
- when /^\d+$/i; Integer(value)
9
8
  when true; true
10
9
  when false; false
11
10
  else
@@ -79,11 +79,11 @@ class Puppet::Settings
79
79
  end
80
80
 
81
81
  def self.hostname_fact()
82
- Facter.value :hostname
82
+ Puppet.runtime[:facter].value :hostname
83
83
  end
84
84
 
85
85
  def self.domain_fact()
86
- Facter.value :domain
86
+ Puppet.runtime[:facter].value :domain
87
87
  end
88
88
 
89
89
  def self.default_config_file_name
@@ -868,7 +868,11 @@ class Puppet::Settings
868
868
  if self[:user]
869
869
  user = Puppet::Type.type(:user).new :name => self[:user], :audit => :ensure
870
870
 
871
- @service_user_available = user.exists?
871
+ if user.suitable?
872
+ @service_user_available = user.exists?
873
+ else
874
+ raise Puppet::Error, (_("Cannot manage owner permissions, because the provider for '%{name}' is not functional") % { name: user })
875
+ end
872
876
  else
873
877
  @service_user_available = false
874
878
  end
@@ -880,7 +884,11 @@ class Puppet::Settings
880
884
  if self[:group]
881
885
  group = Puppet::Type.type(:group).new :name => self[:group], :audit => :ensure
882
886
 
883
- @service_group_available = group.exists?
887
+ if group.suitable?
888
+ @service_group_available = group.exists?
889
+ else
890
+ raise Puppet::Error, (_("Cannot manage group permissions, because the provider for '%{name}' is not functional") % { name: group })
891
+ end
884
892
  else
885
893
  @service_group_available = false
886
894
  end
@@ -889,9 +897,16 @@ class Puppet::Settings
889
897
  # Allow later inspection to determine if the setting was set on the
890
898
  # command line, or through some other code path. Used for the
891
899
  # `dns_alt_names` option during cert generate. --daniel 2011-10-18
892
- def set_by_cli?(param)
900
+ #
901
+ # @param param [String, Symbol] the setting to look up
902
+ # @return [Object, nil] the value of the setting or nil if unset
903
+ def set_by_cli(param)
893
904
  param = param.to_sym
894
- !@value_sets[:cli].lookup(param).nil?
905
+ @value_sets[:cli].lookup(param)
906
+ end
907
+
908
+ def set_by_cli?(param)
909
+ !!set_by_cli(param)
895
910
  end
896
911
 
897
912
  # Get values from a search path entry.
@@ -924,9 +939,13 @@ class Puppet::Settings
924
939
  end
925
940
  end
926
941
 
927
- # Allow later inspection to determine if the setting was set by user
928
- # config, rather than a default setting.
929
- def set_in_section?(param, section)
942
+ # Allow later inspection to determine if the setting was set in a specific
943
+ # section
944
+ #
945
+ # @param param [String, Symbol] the setting to look up
946
+ # @param section [Symbol] the section in which to look up the setting
947
+ # @return [Object, nil] the value of the setting or nil if unset
948
+ def set_in_section(param, section)
930
949
  param = param.to_sym
931
950
  vals = searchpath_values(SearchPathElement.new(section, :section))
932
951
  if vals
@@ -934,6 +953,10 @@ class Puppet::Settings
934
953
  end
935
954
  end
936
955
 
956
+ def set_in_section?(param, section)
957
+ !!set_in_section(param, section)
958
+ end
959
+
937
960
  # Patches the value for a param in a section.
938
961
  # This method is required to support the use case of unifying --dns-alt-names and
939
962
  # --dns_alt_names in the certificate face. Ideally this should be cleaned up.
@@ -142,7 +142,9 @@ module Puppet::Test
142
142
  },
143
143
  "Context for specs")
144
144
 
145
- Puppet.runtime.clear
145
+ # trigger `require 'facter'`
146
+ Puppet.runtime[:facter]
147
+
146
148
  Puppet::Parser::Functions.reset
147
149
  Puppet::Application.clear!
148
150
  Puppet::Util::Profiler.clear
@@ -166,6 +168,7 @@ module Puppet::Test
166
168
 
167
169
  Puppet::Util::Storage.clear
168
170
  Puppet::Util::ExecutionStub.reset
171
+ Puppet.runtime.clear
169
172
 
170
173
  Puppet.clear_deprecation_warnings
171
174
 
@@ -87,7 +87,17 @@ class Puppet::Transaction::Persistence
87
87
 
88
88
  # Save data from internal class to persistence store on disk.
89
89
  def save
90
- Puppet::Util::Yaml.dump(@new_data, Puppet[:transactionstorefile])
90
+ converted_data = Puppet::Pops::Serialization::ToDataConverter.convert(
91
+ @new_data, {
92
+ symbol_as_string: false,
93
+ local_reference: false,
94
+ type_by_reference: true,
95
+ force_symbol: true,
96
+ silence_warnings: true,
97
+ message_prefix: to_s
98
+ }
99
+ )
100
+ Puppet::Util::Yaml.dump(converted_data, Puppet[:transactionstorefile])
91
101
  end
92
102
 
93
103
  # Use the catalog and run_mode to determine if persistence should be enabled or not
@@ -75,6 +75,10 @@ class Puppet::Transaction::Report
75
75
  # @return [String] the environment name
76
76
  attr_accessor :environment
77
77
 
78
+ # The name of the environment the agent initially started in
79
+ # @return [String] the environment name
80
+ attr_accessor :initial_environment
81
+
78
82
  # Whether there are changes that we decided not to apply because of noop
79
83
  # @return [Boolean]
80
84
  #
@@ -375,7 +379,17 @@ class Puppet::Transaction::Report
375
379
  # @api public
376
380
  #
377
381
  def raw_summary
378
- report = { "version" => { "config" => configuration_version, "puppet" => Puppet.version } }
382
+ report = {
383
+ "version" => {
384
+ "config" => configuration_version,
385
+ "puppet" => Puppet.version
386
+ },
387
+ "application" => {
388
+ "run_mode" => Puppet.run_mode.name.to_s,
389
+ "initial_environment" => initial_environment,
390
+ "converged_environment" => environment
391
+ }
392
+ }
379
393
 
380
394
  @metrics.each do |name, metric|
381
395
  key = metric.name.to_s