puppet 7.7.0 → 7.11.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 (386) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +7 -7
  3. data/Gemfile +4 -3
  4. data/Gemfile.lock +18 -18
  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/osx/puppet.plist +2 -0
  16. data/ext/project_data.yaml +1 -0
  17. data/install.rb +0 -4
  18. data/lib/puppet/application/agent.rb +4 -0
  19. data/lib/puppet/application/apply.rb +20 -2
  20. data/lib/puppet/application/filebucket.rb +1 -0
  21. data/lib/puppet/application/resource.rb +30 -15
  22. data/lib/puppet/application/ssl.rb +1 -0
  23. data/lib/puppet/concurrent/thread_local_singleton.rb +1 -0
  24. data/lib/puppet/configurer.rb +169 -50
  25. data/lib/puppet/confine/variable.rb +1 -1
  26. data/lib/puppet/defaults.rb +70 -30
  27. data/lib/puppet/environments.rb +75 -25
  28. data/lib/puppet/face/help/action.erb +1 -0
  29. data/lib/puppet/face/help/face.erb +1 -0
  30. data/lib/puppet/face/node/clean.rb +1 -1
  31. data/lib/puppet/facter_impl.rb +96 -0
  32. data/lib/puppet/file_serving/configuration/parser.rb +2 -0
  33. data/lib/puppet/file_serving/configuration.rb +2 -0
  34. data/lib/puppet/file_serving/mount/file.rb +4 -4
  35. data/lib/puppet/file_serving/mount/scripts.rb +24 -0
  36. data/lib/puppet/file_system/file_impl.rb +3 -1
  37. data/lib/puppet/file_system/windows.rb +2 -2
  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/lookup/lookup_adapter.rb +3 -2
  65. data/lib/puppet/pops/model/ast.rb +1 -0
  66. data/lib/puppet/pops/model/factory.rb +14 -13
  67. data/lib/puppet/pops/parser/egrammar.ra +2 -2
  68. data/lib/puppet/pops/parser/eparser.rb +752 -753
  69. data/lib/puppet/pops/parser/lexer2.rb +69 -68
  70. data/lib/puppet/pops/parser/slurp_support.rb +1 -0
  71. data/lib/puppet/pops/serialization/to_data_converter.rb +18 -6
  72. data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
  73. data/lib/puppet/pops/types/p_sem_ver_type.rb +8 -2
  74. data/lib/puppet/pops/types/p_sensitive_type.rb +10 -0
  75. data/lib/puppet/pops/types/type_formatter.rb +7 -6
  76. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  77. data/lib/puppet/pops/types/types.rb +1 -1
  78. data/lib/puppet/provider/aix_object.rb +1 -1
  79. data/lib/puppet/provider/exec/posix.rb +16 -4
  80. data/lib/puppet/provider/group/groupadd.rb +5 -2
  81. data/lib/puppet/provider/package/apt.rb +3 -3
  82. data/lib/puppet/provider/package/nim.rb +11 -6
  83. data/lib/puppet/provider/package/pip.rb +15 -3
  84. data/lib/puppet/provider/package/pkg.rb +9 -2
  85. data/lib/puppet/provider/package/puppet_gem.rb +1 -1
  86. data/lib/puppet/provider/package/puppetserver_gem.rb +1 -1
  87. data/lib/puppet/provider/package/windows/exe_package.rb +30 -1
  88. data/lib/puppet/provider/package/windows/package.rb +2 -1
  89. data/lib/puppet/provider/package/windows.rb +14 -1
  90. data/lib/puppet/provider/package/yum.rb +4 -4
  91. data/lib/puppet/provider/package/zypper.rb +3 -3
  92. data/lib/puppet/provider/parsedfile.rb +3 -0
  93. data/lib/puppet/provider/service/base.rb +1 -1
  94. data/lib/puppet/provider/service/freebsd.rb +1 -1
  95. data/lib/puppet/provider/service/init.rb +5 -5
  96. data/lib/puppet/provider/service/launchd.rb +2 -2
  97. data/lib/puppet/provider/service/redhat.rb +1 -1
  98. data/lib/puppet/provider/service/smf.rb +3 -3
  99. data/lib/puppet/provider/service/systemd.rb +8 -3
  100. data/lib/puppet/provider/service/upstart.rb +5 -5
  101. data/lib/puppet/provider/user/aix.rb +44 -1
  102. data/lib/puppet/provider/user/directoryservice.rb +25 -12
  103. data/lib/puppet/provider/user/useradd.rb +52 -16
  104. data/lib/puppet/provider.rb +1 -1
  105. data/lib/puppet/reference/providers.rb +2 -2
  106. data/lib/puppet/resource/type_collection.rb +4 -1
  107. data/lib/puppet/runtime.rb +11 -1
  108. data/lib/puppet/settings/config_file.rb +1 -8
  109. data/lib/puppet/settings/file_setting.rb +3 -8
  110. data/lib/puppet/settings/value_translator.rb +0 -1
  111. data/lib/puppet/settings.rb +32 -9
  112. data/lib/puppet/test/test_helper.rb +4 -1
  113. data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
  114. data/lib/puppet/transaction/persistence.rb +11 -1
  115. data/lib/puppet/transaction/report.rb +15 -1
  116. data/lib/puppet/type/exec.rb +35 -5
  117. data/lib/puppet/type/file/mode.rb +6 -0
  118. data/lib/puppet/type/file.rb +6 -6
  119. data/lib/puppet/type/filebucket.rb +2 -2
  120. data/lib/puppet/type/group.rb +0 -1
  121. data/lib/puppet/type/resources.rb +1 -1
  122. data/lib/puppet/type/service.rb +8 -9
  123. data/lib/puppet/type/tidy.rb +1 -1
  124. data/lib/puppet/type/user.rb +39 -22
  125. data/lib/puppet/type.rb +1 -1
  126. data/lib/puppet/util/command_line.rb +1 -1
  127. data/lib/puppet/util/filetype.rb +2 -2
  128. data/lib/puppet/util/log.rb +1 -2
  129. data/lib/puppet/util/logging.rb +1 -25
  130. data/lib/puppet/util/monkey_patches.rb +2 -17
  131. data/lib/puppet/util/pidlock.rb +1 -1
  132. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  133. data/lib/puppet/util/suidmanager.rb +1 -2
  134. data/lib/puppet/util/symbolic_file_mode.rb +29 -17
  135. data/lib/puppet/util/tagging.rb +1 -0
  136. data/lib/puppet/util/windows/sid.rb +3 -1
  137. data/lib/puppet/util/windows/user.rb +0 -1
  138. data/lib/puppet/util.rb +4 -3
  139. data/lib/puppet/version.rb +1 -1
  140. data/lib/puppet/x509/cert_provider.rb +3 -21
  141. data/lib/puppet.rb +5 -9
  142. data/locales/puppet.pot +346 -274
  143. data/man/man5/puppet.conf.5 +76 -25
  144. data/man/man8/puppet-agent.8 +4 -1
  145. data/man/man8/puppet-apply.8 +1 -1
  146. data/man/man8/puppet-catalog.8 +9 -9
  147. data/man/man8/puppet-config.8 +1 -1
  148. data/man/man8/puppet-describe.8 +1 -1
  149. data/man/man8/puppet-device.8 +1 -1
  150. data/man/man8/puppet-doc.8 +1 -1
  151. data/man/man8/puppet-epp.8 +1 -1
  152. data/man/man8/puppet-facts.8 +7 -7
  153. data/man/man8/puppet-filebucket.8 +1 -1
  154. data/man/man8/puppet-generate.8 +1 -1
  155. data/man/man8/puppet-help.8 +1 -1
  156. data/man/man8/puppet-lookup.8 +1 -1
  157. data/man/man8/puppet-module.8 +3 -3
  158. data/man/man8/puppet-node.8 +5 -5
  159. data/man/man8/puppet-parser.8 +1 -1
  160. data/man/man8/puppet-plugin.8 +1 -1
  161. data/man/man8/puppet-report.8 +5 -5
  162. data/man/man8/puppet-resource.8 +1 -1
  163. data/man/man8/puppet-script.8 +1 -1
  164. data/man/man8/puppet-ssl.8 +1 -1
  165. data/man/man8/puppet.8 +2 -2
  166. data/spec/fixtures/integration/application/agent/lib/facter/agent_spec_role.rb +3 -0
  167. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Gemfile +4 -0
  168. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Rakefile +3 -0
  169. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/lib/puppet/functions/l10n.rb +8 -0
  170. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/config.yaml +25 -0
  171. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/ja/puppet-l10n.po +19 -0
  172. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/puppet-l10n.pot +20 -0
  173. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/metadata.json +8 -0
  174. data/spec/fixtures/ssl/127.0.0.1-key.pem +106 -106
  175. data/spec/fixtures/ssl/127.0.0.1.pem +48 -48
  176. data/spec/fixtures/ssl/bad-basic-constraints.pem +54 -54
  177. data/spec/fixtures/ssl/bad-int-basic-constraints.pem +51 -51
  178. data/spec/fixtures/ssl/ca.pem +52 -52
  179. data/spec/fixtures/ssl/crl.pem +25 -25
  180. data/spec/fixtures/ssl/ec-key-openssl.pem +8 -0
  181. data/spec/fixtures/ssl/ec-key-pk8.pem +5 -0
  182. data/spec/fixtures/ssl/ec-key.pem +11 -11
  183. data/spec/fixtures/ssl/ec.pem +32 -32
  184. data/spec/fixtures/ssl/encrypted-ec-key.pem +12 -12
  185. data/spec/fixtures/ssl/encrypted-key.pem +107 -107
  186. data/spec/fixtures/ssl/intermediate-agent-crl.pem +25 -25
  187. data/spec/fixtures/ssl/intermediate-agent.pem +54 -54
  188. data/spec/fixtures/ssl/intermediate-crl.pem +28 -28
  189. data/spec/fixtures/ssl/intermediate.pem +51 -51
  190. data/spec/fixtures/ssl/oid-key.pem +117 -0
  191. data/spec/fixtures/ssl/oid.pem +69 -0
  192. data/spec/fixtures/ssl/pluto-key.pem +106 -106
  193. data/spec/fixtures/ssl/pluto.pem +50 -50
  194. data/spec/fixtures/ssl/request-key.pem +106 -106
  195. data/spec/fixtures/ssl/request.pem +45 -45
  196. data/spec/fixtures/ssl/revoked-key.pem +106 -106
  197. data/spec/fixtures/ssl/revoked.pem +49 -49
  198. data/spec/fixtures/ssl/signed-key.pem +106 -106
  199. data/spec/fixtures/ssl/signed.pem +47 -47
  200. data/spec/fixtures/ssl/tampered-cert.pem +49 -49
  201. data/spec/fixtures/ssl/tampered-csr.pem +45 -45
  202. data/spec/fixtures/ssl/trusted_oid_mapping.yaml +5 -0
  203. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +106 -106
  204. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -48
  205. data/spec/fixtures/ssl/unknown-ca-key.pem +106 -106
  206. data/spec/fixtures/ssl/unknown-ca.pem +52 -52
  207. data/spec/integration/application/agent_spec.rb +118 -52
  208. data/spec/integration/application/filebucket_spec.rb +16 -0
  209. data/spec/integration/application/module_spec.rb +21 -0
  210. data/spec/integration/application/resource_spec.rb +64 -0
  211. data/spec/integration/application/ssl_spec.rb +20 -0
  212. data/spec/integration/configurer_spec.rb +18 -2
  213. data/spec/integration/defaults_spec.rb +5 -0
  214. data/spec/integration/environments/settings_interpolation_spec.rb +0 -4
  215. data/spec/integration/indirector/facts/facter_spec.rb +93 -39
  216. data/spec/integration/l10n/compiler_spec.rb +37 -0
  217. data/spec/integration/transaction/report_spec.rb +1 -1
  218. data/spec/integration/type/exec_spec.rb +70 -45
  219. data/spec/integration/type/file_spec.rb +2 -2
  220. data/spec/integration/type/package_spec.rb +6 -6
  221. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  222. data/spec/integration/util/windows/process_spec.rb +1 -9
  223. data/spec/lib/puppet/test_ca.rb +5 -0
  224. data/spec/lib/puppet_spec/modules.rb +13 -2
  225. data/spec/lib/puppet_spec/puppetserver.rb +15 -0
  226. data/spec/lib/puppet_spec/settings.rb +1 -0
  227. data/spec/shared_behaviours/documentation_on_faces.rb +0 -2
  228. data/spec/shared_contexts/l10n.rb +27 -0
  229. data/spec/spec_helper.rb +1 -10
  230. data/spec/unit/application/apply_spec.rb +76 -56
  231. data/spec/unit/application/resource_spec.rb +29 -0
  232. data/spec/unit/configurer_spec.rb +277 -56
  233. data/spec/unit/environments_spec.rb +184 -0
  234. data/spec/unit/facter_impl_spec.rb +31 -0
  235. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  236. data/spec/unit/file_serving/configuration/parser_spec.rb +23 -0
  237. data/spec/unit/file_serving/configuration_spec.rb +12 -4
  238. data/spec/unit/file_serving/mount/scripts_spec.rb +69 -0
  239. data/spec/unit/file_system_spec.rb +13 -0
  240. data/spec/unit/functions/assert_type_spec.rb +1 -1
  241. data/spec/unit/functions/empty_spec.rb +10 -0
  242. data/spec/unit/functions/logging_spec.rb +1 -0
  243. data/spec/unit/functions/lookup_spec.rb +87 -0
  244. data/spec/unit/functions/unwrap_spec.rb +8 -0
  245. data/spec/unit/functions4_spec.rb +19 -10
  246. data/spec/unit/http/service/compiler_spec.rb +8 -0
  247. data/spec/unit/indirector/catalog/compiler_spec.rb +87 -0
  248. data/spec/unit/indirector/catalog/rest_spec.rb +8 -0
  249. data/spec/unit/indirector/indirection_spec.rb +10 -3
  250. data/spec/unit/indirector/resource/ral_spec.rb +40 -75
  251. data/spec/unit/interface/action_spec.rb +0 -9
  252. data/spec/unit/module_spec.rb +14 -0
  253. data/spec/unit/module_tool/applications/installer_spec.rb +52 -14
  254. data/spec/unit/parser/compiler_spec.rb +29 -0
  255. data/spec/unit/parser/templatewrapper_spec.rb +12 -2
  256. data/spec/unit/pops/loaders/dependency_loader_spec.rb +0 -9
  257. data/spec/unit/pops/parser/lexer2_spec.rb +0 -4
  258. data/spec/unit/pops/parser/parse_containers_spec.rb +0 -11
  259. data/spec/unit/pops/serialization/to_from_hr_spec.rb +58 -0
  260. data/spec/unit/pops/serialization/to_stringified_spec.rb +5 -0
  261. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +18 -0
  262. data/spec/unit/pops/types/p_sensitive_type_spec.rb +18 -0
  263. data/spec/unit/pops/types/type_calculator_spec.rb +6 -0
  264. data/spec/unit/provider/package/gem_spec.rb +1 -1
  265. data/spec/unit/provider/package/nim_spec.rb +42 -0
  266. data/spec/unit/provider/package/pip2_spec.rb +1 -1
  267. data/spec/unit/provider/package/pip3_spec.rb +1 -1
  268. data/spec/unit/provider/package/pip_spec.rb +38 -1
  269. data/spec/unit/provider/package/pkg_spec.rb +19 -5
  270. data/spec/unit/provider/package/puppet_gem_spec.rb +1 -1
  271. data/spec/unit/provider/package/puppetserver_gem_spec.rb +1 -1
  272. data/spec/unit/provider/package/windows/exe_package_spec.rb +17 -0
  273. data/spec/unit/provider/parsedfile_spec.rb +10 -0
  274. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  275. data/spec/unit/provider/service/launchd_spec.rb +11 -0
  276. data/spec/unit/provider/service/systemd_spec.rb +13 -1
  277. data/spec/unit/provider/user/aix_spec.rb +100 -0
  278. data/spec/unit/provider/user/directoryservice_spec.rb +68 -36
  279. data/spec/unit/provider/user/useradd_spec.rb +3 -2
  280. data/spec/unit/provider_spec.rb +4 -4
  281. data/spec/unit/puppet_spec.rb +12 -4
  282. data/spec/unit/resource/type_collection_spec.rb +16 -0
  283. data/spec/unit/resource/type_spec.rb +2 -2
  284. data/spec/unit/settings/config_file_spec.rb +1 -11
  285. data/spec/unit/settings/file_setting_spec.rb +10 -7
  286. data/spec/unit/settings/value_translator_spec.rb +4 -5
  287. data/spec/unit/settings_spec.rb +120 -79
  288. data/spec/unit/ssl/ssl_provider_spec.rb +18 -16
  289. data/spec/unit/type/exec_spec.rb +76 -29
  290. data/spec/unit/type/file/source_spec.rb +4 -4
  291. data/spec/unit/type/service_spec.rb +49 -34
  292. data/spec/unit/type/tidy_spec.rb +7 -0
  293. data/spec/unit/type/user_spec.rb +45 -0
  294. data/spec/unit/type_spec.rb +2 -2
  295. data/spec/unit/util/ldap/connection_spec.rb +10 -10
  296. data/spec/unit/util/ldap/manager_spec.rb +2 -2
  297. data/spec/unit/util/logging_spec.rb +2 -0
  298. data/spec/unit/util/windows/sid_spec.rb +39 -4
  299. data/spec/unit/util_spec.rb +1 -3
  300. data/spec/unit/x509/cert_provider_spec.rb +9 -1
  301. data/tasks/generate_cert_fixtures.rake +10 -1
  302. data/tasks/parallel.rake +3 -3
  303. metadata +53 -95
  304. data/ext/README.environment +0 -8
  305. data/ext/dbfix.sql +0 -132
  306. data/ext/debian/README.Debian +0 -8
  307. data/ext/debian/README.source +0 -2
  308. data/ext/debian/TODO.Debian +0 -1
  309. data/ext/debian/changelog.erb +0 -1122
  310. data/ext/debian/compat +0 -1
  311. data/ext/debian/control +0 -144
  312. data/ext/debian/copyright +0 -339
  313. data/ext/debian/docs +0 -1
  314. data/ext/debian/fileserver.conf +0 -41
  315. data/ext/debian/puppet-common.dirs +0 -13
  316. data/ext/debian/puppet-common.install +0 -3
  317. data/ext/debian/puppet-common.lintian-overrides +0 -5
  318. data/ext/debian/puppet-common.manpages +0 -28
  319. data/ext/debian/puppet-common.postinst +0 -35
  320. data/ext/debian/puppet-common.postrm +0 -33
  321. data/ext/debian/puppet-el.dirs +0 -1
  322. data/ext/debian/puppet-el.emacsen-install +0 -25
  323. data/ext/debian/puppet-el.emacsen-remove +0 -11
  324. data/ext/debian/puppet-el.emacsen-startup +0 -9
  325. data/ext/debian/puppet-el.install +0 -1
  326. data/ext/debian/puppet-testsuite.install +0 -2
  327. data/ext/debian/puppet-testsuite.lintian-overrides +0 -4
  328. data/ext/debian/puppet.lintian-overrides +0 -3
  329. data/ext/debian/puppet.logrotate +0 -20
  330. data/ext/debian/puppet.postinst +0 -20
  331. data/ext/debian/puppet.postrm +0 -20
  332. data/ext/debian/puppet.preinst +0 -20
  333. data/ext/debian/puppetmaster-common.install +0 -2
  334. data/ext/debian/puppetmaster-common.manpages +0 -2
  335. data/ext/debian/puppetmaster-common.postinst +0 -6
  336. data/ext/debian/puppetmaster-passenger.dirs +0 -4
  337. data/ext/debian/puppetmaster-passenger.postinst +0 -162
  338. data/ext/debian/puppetmaster-passenger.postrm +0 -61
  339. data/ext/debian/puppetmaster.README.debian +0 -17
  340. data/ext/debian/puppetmaster.default +0 -14
  341. data/ext/debian/puppetmaster.init +0 -137
  342. data/ext/debian/puppetmaster.lintian-overrides +0 -3
  343. data/ext/debian/puppetmaster.postinst +0 -20
  344. data/ext/debian/puppetmaster.postrm +0 -5
  345. data/ext/debian/puppetmaster.preinst +0 -22
  346. data/ext/debian/rules +0 -132
  347. data/ext/debian/source/format +0 -1
  348. data/ext/debian/source/options +0 -1
  349. data/ext/debian/vim-puppet.README.Debian +0 -13
  350. data/ext/debian/vim-puppet.dirs +0 -5
  351. data/ext/debian/vim-puppet.yaml +0 -7
  352. data/ext/debian/watch +0 -2
  353. data/ext/freebsd/puppetd +0 -26
  354. data/ext/freebsd/puppetmasterd +0 -26
  355. data/ext/gentoo/conf.d/puppet +0 -5
  356. data/ext/gentoo/conf.d/puppetmaster +0 -12
  357. data/ext/gentoo/init.d/puppet +0 -38
  358. data/ext/gentoo/init.d/puppetmaster +0 -51
  359. data/ext/gentoo/puppet/fileserver.conf +0 -41
  360. data/ext/ips/puppet-agent +0 -44
  361. data/ext/ips/puppet-master +0 -44
  362. data/ext/ips/puppet.p5m.erb +0 -12
  363. data/ext/ips/puppetagent.xml +0 -42
  364. data/ext/ips/puppetmaster.xml +0 -42
  365. data/ext/ips/rules +0 -19
  366. data/ext/ips/transforms +0 -34
  367. data/ext/ldap/puppet.schema +0 -24
  368. data/ext/logcheck/puppet +0 -23
  369. data/ext/osx/file_mapping.yaml +0 -28
  370. data/ext/osx/postflight.erb +0 -109
  371. data/ext/osx/preflight.erb +0 -52
  372. data/ext/osx/prototype.plist.erb +0 -38
  373. data/ext/redhat/fileserver.conf +0 -41
  374. data/ext/redhat/logrotate +0 -21
  375. data/ext/redhat/puppet.spec.erb +0 -841
  376. data/ext/redhat/server.init +0 -128
  377. data/ext/redhat/server.sysconfig +0 -13
  378. data/ext/solaris/pkginfo +0 -6
  379. data/ext/solaris/smf/puppetd.xml +0 -77
  380. data/ext/solaris/smf/puppetmasterd.xml +0 -77
  381. data/ext/solaris/smf/svc-puppetd +0 -71
  382. data/ext/solaris/smf/svc-puppetmasterd +0 -67
  383. data/ext/suse/puppet.spec +0 -310
  384. data/ext/suse/server.init +0 -173
  385. data/ext/yaml_nodes.rb +0 -105
  386. data/spec/unit/indirector/store_configs_spec.rb +0 -7
@@ -126,7 +126,7 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
126
126
  if self.class.compare_pip_versions(command_version, '1.5.4') == -1
127
127
  available_versions_with_old_pip.last
128
128
  else
129
- available_versions_with_new_pip.last
129
+ available_versions_with_new_pip(command_version).last
130
130
  end
131
131
  end
132
132
 
@@ -149,15 +149,17 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
149
149
  if self.class.compare_pip_versions(command_version, '1.5.4') == -1
150
150
  available_versions_with_old_pip
151
151
  else
152
- available_versions_with_new_pip
152
+ available_versions_with_new_pip(command_version)
153
153
  end
154
154
  end
155
155
 
156
- def available_versions_with_new_pip
156
+ def available_versions_with_new_pip(command_version)
157
157
  command = resource_or_provider_command
158
158
  self.class.validate_command(command)
159
159
 
160
160
  command_and_options = [self.class.quote(command), 'install', "#{@resource[:name]}==versionplease"]
161
+ extra_arg = list_extra_flags(command_version)
162
+ command_and_options << extra_arg if extra_arg
161
163
  command_and_options << install_options if @resource[:install_options]
162
164
  execpipe command_and_options do |process|
163
165
  process.collect do |line|
@@ -328,4 +330,14 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
328
330
  path
329
331
  end
330
332
  end
333
+
334
+ private
335
+
336
+ def list_extra_flags(command_version)
337
+ klass = self.class
338
+ if klass.compare_pip_versions(command_version, '20.2.4') == 1 &&
339
+ klass.compare_pip_versions(command_version, '21.1') == -1
340
+ '--use-deprecated=legacy-resolver'
341
+ end
342
+ end
331
343
  end
@@ -161,7 +161,14 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
161
161
  command = is == :absent ? 'install' : 'update'
162
162
  options = ['-n']
163
163
  options.concat(join_options(@resource[:install_options])) if @resource[:install_options]
164
- status = exec_cmd(command(:pkg), command, *options, "#{name}@#{p[:ensure]}")[:exit]
164
+
165
+ begin
166
+ unhold if properties[:mark] == :hold
167
+ status = exec_cmd(command(:pkg), command, *options, "#{name}@#{p[:ensure]}")[:exit]
168
+ ensure
169
+ hold if properties[:mark] == :hold
170
+ end
171
+
165
172
  case status
166
173
  when 4
167
174
  # if the first installable match would cause no changes, we're in sync
@@ -221,7 +228,7 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
221
228
  command = 'update'
222
229
  end
223
230
  args = ['--accept']
224
- if Puppet::Util::Package.versioncmp(Facter.value(:operatingsystemrelease), '11.2') >= 0
231
+ if Puppet::Util::Package.versioncmp(Puppet.runtime[:facter].value(:operatingsystemrelease), '11.2') >= 0
225
232
  args.push('--sync-actuators-timeout', '900')
226
233
  end
227
234
  args.concat(join_options(@resource[:install_options])) if @resource[:install_options]
@@ -4,7 +4,7 @@ Puppet::Type.type(:package).provide :puppet_gem, :parent => :gem do
4
4
 
5
5
  has_feature :versionable, :install_options, :uninstall_options
6
6
 
7
- confine :true => Facter.value(:aio_agent_version)
7
+ confine :true => Puppet.runtime[:facter].value(:aio_agent_version)
8
8
 
9
9
  def self.windows_gemcmd
10
10
  puppet_dir = Puppet::Util.get_env('PUPPET_DIR')
@@ -145,7 +145,7 @@ Puppet::Type.type(:package).provide :puppetserver_gem, :parent => :gem do
145
145
 
146
146
  pe_puppetserver_conf_file = '/etc/puppetlabs/puppetserver/conf.d/pe-puppet-server.conf'
147
147
  os_puppetserver_conf_file = '/etc/puppetlabs/puppetserver/puppetserver.conf'
148
- puppetserver_conf_file = Facter.value(:pe_server_version) ? pe_puppetserver_conf_file : os_puppetserver_conf_file
148
+ puppetserver_conf_file = Puppet.runtime[:facter].value(:pe_server_version) ? pe_puppetserver_conf_file : os_puppetserver_conf_file
149
149
  puppetserver_conf = Hocon.load(puppetserver_conf_file)
150
150
 
151
151
  gem_env = {}
@@ -17,6 +17,11 @@ class Puppet::Provider::Package::Windows
17
17
  'WindowsInstaller',
18
18
  ]
19
19
 
20
+ def self.register(path)
21
+ Puppet::Type::Package::ProviderWindows.paths ||= []
22
+ Puppet::Type::Package::ProviderWindows.paths << path
23
+ end
24
+
20
25
  # Return an instance of the package from the registry, or nil
21
26
  def self.from_registry(name, values)
22
27
  if valid?(name, values)
@@ -55,7 +60,31 @@ class Puppet::Provider::Package::Windows
55
60
  end
56
61
 
57
62
  def self.install_command(resource)
58
- munge(resource[:source])
63
+ file_location = resource[:source]
64
+ if file_location.start_with?('http://', 'https://')
65
+ tempfile = Tempfile.new(['','.exe'])
66
+ begin
67
+ uri = URI(Puppet::Util.uri_encode(file_location))
68
+ client = Puppet.runtime[:http]
69
+ client.get(uri, options: { include_system_store: true }) do |response|
70
+ raise Puppet::HTTP::ResponseError.new(response) unless response.success?
71
+
72
+ File.open(tempfile.path, 'wb') do |file|
73
+ response.read_body do |data|
74
+ file.write(data)
75
+ end
76
+ end
77
+ end
78
+ rescue => detail
79
+ raise Puppet::Error.new(_("Error when installing %{package}: %{detail}") % { package: resource[:name] ,detail: detail.message}, detail)
80
+ ensure
81
+ self.register(tempfile.path)
82
+ tempfile.close()
83
+ file_location = tempfile.path
84
+ end
85
+ end
86
+
87
+ munge(file_location)
59
88
  end
60
89
 
61
90
  def uninstall_command
@@ -67,7 +67,8 @@ class Puppet::Provider::Package::Windows
67
67
  # REMIND: what about msp, etc
68
68
  MsiPackage
69
69
  when /\.exe"?\Z/i
70
- fail(_("The source does not exist: '%{source}'") % { source: resource[:source] }) unless Puppet::FileSystem.exist?(resource[:source])
70
+ fail(_("The source does not exist: '%{source}'") % { source: resource[:source] }) unless
71
+ Puppet::FileSystem.exist?(resource[:source]) || resource[:source].start_with?('http://', 'https://')
71
72
  ExePackage
72
73
  else
73
74
  fail(_("Don't know how to install '%{source}'") % { source: resource[:source] })
@@ -30,6 +30,19 @@ Puppet::Type.type(:package).provide(:windows, :parent => Puppet::Provider::Packa
30
30
  has_feature :versionable
31
31
 
32
32
  attr_accessor :package
33
+ class << self
34
+ attr_accessor :paths
35
+ end
36
+
37
+ def self.post_resource_eval
38
+ @paths.each do |path|
39
+ begin
40
+ Puppet::FileSystem.unlink(path)
41
+ rescue => detail
42
+ raise Puppet::Error.new(_("Error when unlinking %{path}: %{detail}") % { path: path ,detail: detail.message}, detail)
43
+ end
44
+ end if @paths
45
+ end
33
46
 
34
47
  # Return an array of provider instances
35
48
  def self.instances
@@ -64,7 +77,7 @@ Puppet::Type.type(:package).provide(:windows, :parent => Puppet::Provider::Packa
64
77
 
65
78
  command = [installer.install_command(resource), install_options].flatten.compact.join(' ')
66
79
  working_dir = File.dirname(resource[:source])
67
- if !Puppet::FileSystem.exist?(working_dir) && resource[:source] =~ /\.msi"?\Z/i
80
+ unless Puppet::FileSystem.exist?(working_dir)
68
81
  working_dir = nil
69
82
  end
70
83
  output = execute(command, :failonfail => false, :combine => true, :cwd => working_dir, :suppress_window => true)
@@ -203,17 +203,17 @@ defaultfor :osfamily => :redhat, :operatingsystemmajrelease => (4..7).to_a
203
203
  Puppet.debug("Cannot parse #{should} as a RPM version range")
204
204
  return should
205
205
  end
206
- sorted_versions = SortedSet.new
206
+ versions = []
207
207
  available_versions(@resource[:name]).each do |version|
208
208
  begin
209
209
  rpm_version = RPM_VERSION.parse(version)
210
- sorted_versions << rpm_version if should_range.include?(rpm_version)
210
+ versions << rpm_version if should_range.include?(rpm_version)
211
211
  rescue RPM_VERSION::ValidationFailure
212
212
  Puppet.debug("Cannot parse #{version} as a RPM version")
213
213
  end
214
214
  end
215
215
 
216
- version = sorted_versions.entries.last
216
+ version = versions.sort.last if versions.any?
217
217
 
218
218
  if version
219
219
  version = version.to_s.sub(/^\d+:/, '')
@@ -298,7 +298,7 @@ defaultfor :osfamily => :redhat, :operatingsystemmajrelease => (4..7).to_a
298
298
 
299
299
  # Yum on el-4 and el-5 returns exit status 0 when trying to install a package it doesn't recognize;
300
300
  # ensure we capture output to check for errors.
301
- no_debug = if Facter.value(:operatingsystemmajrelease).to_i > 5 then ["-d", "0"] else [] end
301
+ no_debug = if Puppet.runtime[:facter].value(:operatingsystemmajrelease).to_i > 5 then ["-d", "0"] else [] end
302
302
  command = [command(:cmd)] + no_debug + ["-e", error_level, "-y", install_options, operation, wanted].compact
303
303
  output = execute(command)
304
304
 
@@ -63,7 +63,7 @@ Puppet::Type.type(:package).provide :zypper, :parent => :rpm, :source => :rpm do
63
63
  return should
64
64
  end
65
65
 
66
- sorted_versions = SortedSet.new
66
+ versions = []
67
67
 
68
68
  output = zypper('search', '--match-exact', '--type', 'package', '--uninstalled-only', '-s', @resource[:name])
69
69
  output.lines.each do |line|
@@ -72,13 +72,13 @@ Puppet::Type.type(:package).provide :zypper, :parent => :rpm, :source => :rpm do
72
72
  begin
73
73
  rpm_version = Puppet::Util::Package::Version::Rpm.parse(pkg_ver[3])
74
74
 
75
- sorted_versions << rpm_version if should_range.include?(rpm_version)
75
+ versions << rpm_version if should_range.include?(rpm_version)
76
76
  rescue Puppet::Util::Package::Version::Rpm::ValidationFailure
77
77
  Puppet.debug("Cannot parse #{pkg_ver[3]} as a RPM version")
78
78
  end
79
79
  end
80
80
 
81
- return sorted_versions.entries.last if sorted_versions.any?
81
+ return versions.sort.last if versions.any?
82
82
 
83
83
  Puppet.debug("No available version for package #{@resource[:name]} is included in range #{should_range}")
84
84
  should
@@ -280,6 +280,9 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
280
280
  def self.prefetch_target(target)
281
281
  begin
282
282
  target_records = retrieve(target)
283
+ unless target_records
284
+ raise Puppet::DevError, _("Prefetching %{target} for provider %{name} returned nil") % { target: target, name: self.name }
285
+ end
283
286
  rescue Puppet::Util::FileType::FileReadError => detail
284
287
  if @raise_prefetch_errors
285
288
  # We will raise an error later in flush_target. This way,
@@ -15,7 +15,7 @@ Puppet::Type.type(:service).provide :base, :parent => :service do
15
15
  # ported from the facter 2.x implementation, since facter 3.x
16
16
  # is dropping the fact (for which this was the only use)
17
17
  def getps
18
- case Facter.value(:operatingsystem)
18
+ case Puppet.runtime[:facter].value(:operatingsystem)
19
19
  when 'OpenWrt'
20
20
  'ps www'
21
21
  when 'FreeBSD', 'NetBSD', 'OpenBSD', 'Darwin', 'DragonFly'
@@ -74,7 +74,7 @@ Puppet::Type.type(:service).provide :freebsd, :parent => :init do
74
74
  if Puppet::FileSystem.exist?(filename)
75
75
  s = File.read(filename)
76
76
  if s.gsub!(/^(#{rcvar}(_enable)?)=\"?(YES|NO)\"?/, "\\1=\"#{yesno}\"")
77
- File.open(filename, File::WRONLY) { |f| f << s }
77
+ Puppet::FileSystem.replace_file(filename) { |f| f << s }
78
78
  self.debug("Replaced in #{filename}")
79
79
  success = true
80
80
  end
@@ -4,7 +4,7 @@ Puppet::Type.type(:service).provide :init, :parent => :base do
4
4
  desc "Standard `init`-style service management."
5
5
 
6
6
  def self.defpath
7
- case Facter.value(:operatingsystem)
7
+ case Puppet.runtime[:facter].value(:operatingsystem)
8
8
  when "FreeBSD", "DragonFly"
9
9
  ["/etc/rc.d", "/usr/local/etc/rc.d"]
10
10
  when "HP-UX"
@@ -21,8 +21,8 @@ Puppet::Type.type(:service).provide :init, :parent => :base do
21
21
  # Debian and Ubuntu should use the Debian provider.
22
22
  # RedHat systems should use the RedHat provider.
23
23
  confine :true => begin
24
- os = Facter.value(:operatingsystem).downcase
25
- family = Facter.value(:osfamily).downcase
24
+ os = Puppet.runtime[:facter].value(:operatingsystem).downcase
25
+ family = Puppet.runtime[:facter].value(:osfamily).downcase
26
26
  !(os == 'debian' || os == 'ubuntu' || family == 'redhat')
27
27
  end
28
28
 
@@ -54,7 +54,7 @@ Puppet::Type.type(:service).provide :init, :parent => :base do
54
54
  # these excludes were found with grep -r -L start /etc/init.d
55
55
  excludes += %w{rcS module-init-tools}
56
56
  # Prevent puppet failing on unsafe scripts from Yocto Linux
57
- if Facter.value(:osfamily) == "cisco-wrlinux"
57
+ if Puppet.runtime[:facter].value(:osfamily) == "cisco-wrlinux"
58
58
  excludes += %w{banner.sh bootmisc.sh checkroot.sh devpts.sh dmesg.sh
59
59
  hostname.sh mountall.sh mountnfs.sh populate-volatile.sh
60
60
  rmnologin.sh save-rtc.sh sendsigs sysfs.sh umountfs
@@ -171,7 +171,7 @@ Puppet::Type.type(:service).provide :init, :parent => :base do
171
171
  end
172
172
 
173
173
  def service_execute(type, command, fof = true, squelch = false, combine = true)
174
- if type == :start && Facter.value(:osfamily) == "Solaris"
174
+ if type == :start && Puppet.runtime[:facter].value(:osfamily) == "Solaris"
175
175
  command = ["/usr/bin/ctrun -l child", command].flatten.join(" ")
176
176
  end
177
177
  super(type, command, fof, squelch, combine)
@@ -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
@@ -164,10 +164,15 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
164
164
  end
165
165
 
166
166
  def mask
167
- self.disable
167
+ disable if exist?
168
168
  systemctl_change_enable(:mask)
169
169
  end
170
170
 
171
+ def exist?
172
+ result = execute([command(:systemctl), 'cat', '--', @resource[:name]], :failonfail => false)
173
+ result.exitstatus == 0
174
+ end
175
+
171
176
  def unmask
172
177
  systemctl_change_enable(:unmask)
173
178
  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