puppet 5.5.17-x64-mingw32 → 5.5.22-x64-mingw32

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

Potentially problematic release.


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

Files changed (340) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +1 -1
  3. data/Gemfile +4 -5
  4. data/Gemfile.lock +59 -55
  5. data/ext/build_defaults.yaml +1 -0
  6. data/ext/cert_inspector +3 -3
  7. data/ext/puppet-test +2 -2
  8. data/ext/regexp_nodes/regexp_nodes.rb +4 -4
  9. data/ext/windows/service/daemon.rb +54 -8
  10. data/install.rb +6 -6
  11. data/lib/puppet.rb +5 -2
  12. data/lib/puppet/agent.rb +5 -13
  13. data/lib/puppet/application.rb +1 -1
  14. data/lib/puppet/application/agent.rb +3 -1
  15. data/lib/puppet/application/apply.rb +2 -2
  16. data/lib/puppet/application/describe.rb +3 -9
  17. data/lib/puppet/application/doc.rb +1 -1
  18. data/lib/puppet/application/filebucket.rb +13 -0
  19. data/lib/puppet/application/lookup.rb +1 -1
  20. data/lib/puppet/application/script.rb +2 -2
  21. data/lib/puppet/configurer.rb +106 -31
  22. data/lib/puppet/configurer/downloader.rb +33 -16
  23. data/lib/puppet/daemon.rb +1 -1
  24. data/lib/puppet/defaults.rb +86 -40
  25. data/lib/puppet/error.rb +9 -1
  26. data/lib/puppet/external/nagios/base.rb +1 -1
  27. data/lib/puppet/face/ca.rb +1 -1
  28. data/lib/puppet/face/module/list.rb +5 -5
  29. data/lib/puppet/face/module/search.rb +1 -1
  30. data/lib/puppet/face/module/uninstall.rb +1 -1
  31. data/lib/puppet/face/module/upgrade.rb +1 -1
  32. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  33. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  34. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  35. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  36. data/lib/puppet/file_system.rb +0 -8
  37. data/lib/puppet/file_system/memory_file.rb +1 -1
  38. data/lib/puppet/file_system/posix.rb +3 -2
  39. data/lib/puppet/file_system/uniquefile.rb +4 -0
  40. data/lib/puppet/forge.rb +3 -3
  41. data/lib/puppet/functions/epp.rb +4 -4
  42. data/lib/puppet/functions/inline_epp.rb +5 -5
  43. data/lib/puppet/functions/new.rb +8 -3
  44. data/lib/puppet/functions/reduce.rb +2 -4
  45. data/lib/puppet/functions/reverse_each.rb +1 -1
  46. data/lib/puppet/functions/step.rb +1 -1
  47. data/lib/puppet/gettext/module_translations.rb +1 -1
  48. data/lib/puppet/graph/rb_tree_map.rb +2 -2
  49. data/lib/puppet/graph/simple_graph.rb +6 -5
  50. data/lib/puppet/indirector/catalog/compiler.rb +8 -0
  51. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  52. data/lib/puppet/indirector/hiera.rb +6 -0
  53. data/lib/puppet/indirector/resource/ral.rb +1 -3
  54. data/lib/puppet/indirector/resource/validator.rb +1 -1
  55. data/lib/puppet/interface.rb +2 -1
  56. data/lib/puppet/loaders.rb +0 -1
  57. data/lib/puppet/metatype/manager.rb +1 -1
  58. data/lib/puppet/module.rb +1 -1
  59. data/lib/puppet/module_tool/applications/builder.rb +1 -1
  60. data/lib/puppet/module_tool/applications/installer.rb +1 -1
  61. data/lib/puppet/module_tool/applications/uninstaller.rb +3 -3
  62. data/lib/puppet/module_tool/metadata.rb +1 -1
  63. data/lib/puppet/module_tool/shared_behaviors.rb +4 -4
  64. data/lib/puppet/module_tool/tar/mini.rb +1 -1
  65. data/lib/puppet/network/http/api/indirected_routes.rb +13 -12
  66. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  67. data/lib/puppet/network/http/connection.rb +14 -12
  68. data/lib/puppet/network/http/pool.rb +7 -1
  69. data/lib/puppet/network/http/rack/rest.rb +2 -2
  70. data/lib/puppet/network/http/site.rb +1 -1
  71. data/lib/puppet/network/resolver.rb +2 -2
  72. data/lib/puppet/node/environment.rb +11 -3
  73. data/lib/puppet/parser/ast.rb +1 -1
  74. data/lib/puppet/parser/ast/resourceparam.rb +1 -1
  75. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  76. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  77. data/lib/puppet/parser/environment_compiler.rb +3 -0
  78. data/lib/puppet/parser/functions.rb +14 -10
  79. data/lib/puppet/parser/functions/epp.rb +3 -3
  80. data/lib/puppet/parser/functions/inline_epp.rb +5 -5
  81. data/lib/puppet/parser/resource.rb +3 -2
  82. data/lib/puppet/parser/resource/param.rb +6 -0
  83. data/lib/puppet/pops/adaptable.rb +7 -13
  84. data/lib/puppet/pops/adapters.rb +8 -4
  85. data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
  86. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  87. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
  88. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
  89. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
  90. data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -2
  91. data/lib/puppet/pops/evaluator/runtime3_support.rb +4 -4
  92. data/lib/puppet/pops/issues.rb +5 -0
  93. data/lib/puppet/pops/loaders.rb +1 -1
  94. data/lib/puppet/pops/lookup/hiera_config.rb +1 -0
  95. data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
  96. data/lib/puppet/pops/merge_strategy.rb +22 -18
  97. data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
  98. data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
  99. data/lib/puppet/pops/parser/locator.rb +1 -1
  100. data/lib/puppet/pops/parser/pn_parser.rb +17 -16
  101. data/lib/puppet/pops/puppet_stack.rb +51 -48
  102. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  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_sensitive_type.rb +1 -1
  106. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  107. data/lib/puppet/pops/types/string_converter.rb +10 -10
  108. data/lib/puppet/pops/types/type_calculator.rb +24 -0
  109. data/lib/puppet/pops/types/types.rb +3 -3
  110. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  111. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  112. data/lib/puppet/property.rb +1 -1
  113. data/lib/puppet/property/ensure.rb +1 -1
  114. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  115. data/lib/puppet/provider/cron/crontab.rb +1 -1
  116. data/lib/puppet/provider/exec.rb +6 -2
  117. data/lib/puppet/provider/group/groupadd.rb +19 -19
  118. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  119. data/lib/puppet/provider/mailalias/aliases.rb +1 -1
  120. data/lib/puppet/provider/mount.rb +1 -1
  121. data/lib/puppet/provider/mount/parsed.rb +8 -8
  122. data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
  123. data/lib/puppet/provider/nameservice/pw.rb +2 -2
  124. data/lib/puppet/provider/package/aix.rb +17 -2
  125. data/lib/puppet/provider/package/apt.rb +14 -3
  126. data/lib/puppet/provider/package/dnfmodule.rb +141 -0
  127. data/lib/puppet/provider/package/dpkg.rb +16 -18
  128. data/lib/puppet/provider/package/fink.rb +20 -3
  129. data/lib/puppet/provider/package/gem.rb +4 -2
  130. data/lib/puppet/provider/package/openbsd.rb +14 -2
  131. data/lib/puppet/provider/package/pip.rb +37 -10
  132. data/lib/puppet/provider/package/pkg.rb +18 -5
  133. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  134. data/lib/puppet/provider/package/pkgng.rb +16 -4
  135. data/lib/puppet/provider/package/portage.rb +4 -4
  136. data/lib/puppet/provider/package/puppet_gem.rb +5 -0
  137. data/lib/puppet/provider/package/rpm.rb +6 -6
  138. data/lib/puppet/provider/package/windows/package.rb +1 -1
  139. data/lib/puppet/provider/package/yum.rb +28 -20
  140. data/lib/puppet/provider/package/zypper.rb +1 -0
  141. data/lib/puppet/provider/package_targetable.rb +5 -4
  142. data/lib/puppet/provider/parsedfile.rb +1 -1
  143. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +3 -3
  144. data/lib/puppet/provider/selmodule/semodule.rb +43 -26
  145. data/lib/puppet/provider/service/daemontools.rb +9 -9
  146. data/lib/puppet/provider/service/openbsd.rb +1 -1
  147. data/lib/puppet/provider/service/rcng.rb +2 -2
  148. data/lib/puppet/provider/service/runit.rb +2 -8
  149. data/lib/puppet/provider/service/systemd.rb +31 -13
  150. data/lib/puppet/provider/user/directoryservice.rb +31 -6
  151. data/lib/puppet/provider/user/hpux.rb +1 -1
  152. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  153. data/lib/puppet/provider/user/useradd.rb +39 -20
  154. data/lib/puppet/provider/user/windows_adsi.rb +4 -5
  155. data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
  156. data/lib/puppet/reference/indirection.rb +2 -2
  157. data/lib/puppet/reference/metaparameter.rb +1 -3
  158. data/lib/puppet/reference/providers.rb +1 -1
  159. data/lib/puppet/reference/type.rb +3 -9
  160. data/lib/puppet/reports.rb +1 -1
  161. data/lib/puppet/resource.rb +1 -1
  162. data/lib/puppet/resource/catalog.rb +1 -1
  163. data/lib/puppet/resource/type.rb +10 -1
  164. data/lib/puppet/settings.rb +3 -3
  165. data/lib/puppet/settings/environment_conf.rb +1 -0
  166. data/lib/puppet/ssl/certificate.rb +2 -1
  167. data/lib/puppet/ssl/certificate_authority.rb +6 -5
  168. data/lib/puppet/ssl/certificate_authority/interface.rb +1 -1
  169. data/lib/puppet/ssl/certificate_factory.rb +2 -2
  170. data/lib/puppet/ssl/host.rb +3 -3
  171. data/lib/puppet/ssl/oids.rb +1 -1
  172. data/lib/puppet/test/test_helper.rb +20 -12
  173. data/lib/puppet/transaction/report.rb +1 -1
  174. data/lib/puppet/transaction/resource_harness.rb +1 -1
  175. data/lib/puppet/type.rb +8 -4
  176. data/lib/puppet/type/cron.rb +1 -1
  177. data/lib/puppet/type/exec.rb +7 -3
  178. data/lib/puppet/type/file.rb +14 -2
  179. data/lib/puppet/type/file/data_sync.rb +5 -1
  180. data/lib/puppet/type/group.rb +4 -2
  181. data/lib/puppet/type/interface.rb +1 -1
  182. data/lib/puppet/type/notify.rb +3 -2
  183. data/lib/puppet/type/package.rb +97 -8
  184. data/lib/puppet/type/schedule.rb +1 -1
  185. data/lib/puppet/type/selboolean.rb +17 -3
  186. data/lib/puppet/type/service.rb +2 -8
  187. data/lib/puppet/type/user.rb +5 -9
  188. data/lib/puppet/util.rb +35 -12
  189. data/lib/puppet/util/autoload.rb +9 -7
  190. data/lib/puppet/util/command_line/trollop.rb +1 -1
  191. data/lib/puppet/util/http_proxy.rb +8 -14
  192. data/lib/puppet/util/instance_loader.rb +1 -1
  193. data/lib/puppet/util/log.rb +1 -1
  194. data/lib/puppet/util/log/destinations.rb +3 -12
  195. data/lib/puppet/util/logging.rb +30 -18
  196. data/lib/puppet/util/metric.rb +2 -2
  197. data/lib/puppet/util/monkey_patches.rb +1 -1
  198. data/lib/puppet/util/nagios_maker.rb +2 -2
  199. data/lib/puppet/util/network_device/cisco/device.rb +1 -1
  200. data/lib/puppet/util/network_device/cisco/interface.rb +2 -2
  201. data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
  202. data/lib/puppet/util/pidlock.rb +12 -6
  203. data/lib/puppet/util/plist.rb +6 -0
  204. data/lib/puppet/util/provider_features.rb +2 -4
  205. data/lib/puppet/util/rdoc.rb +1 -1
  206. data/lib/puppet/util/reference.rb +1 -1
  207. data/lib/puppet/util/resource_template.rb +1 -1
  208. data/lib/puppet/util/selinux.rb +3 -1
  209. data/lib/puppet/util/windows/adsi.rb +60 -30
  210. data/lib/puppet/util/windows/api_types.rb +45 -32
  211. data/lib/puppet/util/windows/eventlog.rb +1 -6
  212. data/lib/puppet/util/windows/principal.rb +8 -6
  213. data/lib/puppet/util/windows/process.rb +16 -15
  214. data/lib/puppet/util/windows/registry.rb +17 -15
  215. data/lib/puppet/util/windows/security.rb +1 -0
  216. data/lib/puppet/util/windows/sid.rb +3 -3
  217. data/lib/puppet/vendor.rb +1 -1
  218. data/lib/puppet/version.rb +1 -1
  219. data/lib/puppet_pal.rb +2 -2
  220. data/locales/puppet.pot +362 -318
  221. data/man/man5/puppet.conf.5 +39 -9
  222. data/man/man8/puppet-agent.8 +2 -2
  223. data/man/man8/puppet-apply.8 +1 -1
  224. data/man/man8/puppet-ca.8 +1 -1
  225. data/man/man8/puppet-catalog.8 +1 -1
  226. data/man/man8/puppet-cert.8 +1 -1
  227. data/man/man8/puppet-certificate.8 +1 -1
  228. data/man/man8/puppet-certificate_request.8 +1 -1
  229. data/man/man8/puppet-certificate_revocation_list.8 +1 -1
  230. data/man/man8/puppet-config.8 +1 -1
  231. data/man/man8/puppet-describe.8 +1 -1
  232. data/man/man8/puppet-device.8 +1 -1
  233. data/man/man8/puppet-doc.8 +1 -1
  234. data/man/man8/puppet-epp.8 +1 -1
  235. data/man/man8/puppet-facts.8 +1 -1
  236. data/man/man8/puppet-filebucket.8 +16 -1
  237. data/man/man8/puppet-generate.8 +1 -1
  238. data/man/man8/puppet-help.8 +1 -1
  239. data/man/man8/puppet-key.8 +1 -1
  240. data/man/man8/puppet-lookup.8 +1 -1
  241. data/man/man8/puppet-man.8 +1 -1
  242. data/man/man8/puppet-master.8 +1 -1
  243. data/man/man8/puppet-module.8 +1 -1
  244. data/man/man8/puppet-node.8 +1 -1
  245. data/man/man8/puppet-parser.8 +1 -1
  246. data/man/man8/puppet-plugin.8 +1 -1
  247. data/man/man8/puppet-report.8 +1 -1
  248. data/man/man8/puppet-resource.8 +1 -1
  249. data/man/man8/puppet-script.8 +1 -1
  250. data/man/man8/puppet-status.8 +1 -1
  251. data/man/man8/puppet.8 +2 -2
  252. data/spec/fixtures/integration/provider/mailalias/aliases/test1 +1 -0
  253. data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list.txt +19 -0
  254. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  255. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  256. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  257. data/spec/integration/configurer_spec.rb +66 -0
  258. data/spec/integration/data_binding_spec.rb +1 -0
  259. data/spec/integration/defaults_spec.rb +1 -2
  260. data/spec/integration/faces/plugin_spec.rb +29 -47
  261. data/spec/integration/indirector/facts/facter_spec.rb +4 -0
  262. data/spec/integration/parser/compiler_spec.rb +11 -0
  263. data/spec/integration/type/notify_spec.rb +46 -0
  264. data/spec/integration/util/windows/adsi_spec.rb +6 -1
  265. data/spec/integration/util/windows/registry_spec.rb +7 -7
  266. data/spec/shared_contexts/types_setup.rb +2 -0
  267. data/spec/unit/agent_spec.rb +34 -26
  268. data/spec/unit/application/apply_spec.rb +2 -12
  269. data/spec/unit/configurer/downloader_spec.rb +10 -0
  270. data/spec/unit/configurer/fact_handler_spec.rb +0 -4
  271. data/spec/unit/configurer_spec.rb +430 -415
  272. data/spec/unit/daemon_spec.rb +0 -1
  273. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  274. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  275. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  276. data/spec/unit/file_system/uniquefile_spec.rb +11 -0
  277. data/spec/unit/forge/forge_spec.rb +1 -3
  278. data/spec/unit/forge/repository_spec.rb +1 -3
  279. data/spec/unit/indirector/catalog/compiler_spec.rb +45 -26
  280. data/spec/unit/indirector/resource/ral_spec.rb +4 -4
  281. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  282. data/spec/unit/network/http/connection_spec.rb +43 -1
  283. data/spec/unit/network/http/pool_spec.rb +32 -0
  284. data/spec/unit/node_spec.rb +7 -4
  285. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  286. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
  287. data/spec/unit/provider/exec_spec.rb +209 -0
  288. data/spec/unit/provider/group/groupadd_spec.rb +30 -1
  289. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  290. data/spec/unit/provider/package/aix_spec.rb +29 -0
  291. data/spec/unit/provider/package/apt_spec.rb +13 -2
  292. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  293. data/spec/unit/provider/package/dnfmodule_spec.rb +247 -0
  294. data/spec/unit/provider/package/dpkg_spec.rb +35 -7
  295. data/spec/unit/provider/package/openbsd_spec.rb +17 -0
  296. data/spec/unit/provider/package/pip_spec.rb +93 -22
  297. data/spec/unit/provider/package/pkg_spec.rb +13 -1
  298. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  299. data/spec/unit/provider/package/pkgng_spec.rb +36 -0
  300. data/spec/unit/provider/package/portage_spec.rb +4 -4
  301. data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
  302. data/spec/unit/provider/package/yum_spec.rb +90 -0
  303. data/spec/unit/provider/package/zypper_spec.rb +13 -0
  304. data/spec/unit/provider/package_targetable_spec.rb +60 -0
  305. data/spec/unit/provider/selmodule_spec.rb +118 -47
  306. data/spec/unit/provider/service/daemontools_spec.rb +24 -0
  307. data/spec/unit/provider/service/runit_spec.rb +24 -0
  308. data/spec/unit/provider/service/systemd_spec.rb +109 -36
  309. data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
  310. data/spec/unit/provider/user/hpux_spec.rb +2 -2
  311. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  312. data/spec/unit/provider/user/useradd_spec.rb +81 -16
  313. data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
  314. data/spec/unit/puppet_pal_2pec.rb +3 -0
  315. data/spec/unit/ssl/certificate_authority_spec.rb +2 -3
  316. data/spec/unit/ssl/certificate_spec.rb +7 -0
  317. data/spec/unit/ssl/host_spec.rb +2 -0
  318. data/spec/unit/test/test_helper_spec.rb +17 -0
  319. data/spec/unit/type/exec_spec.rb +6 -12
  320. data/spec/unit/type/file/content_spec.rb +9 -3
  321. data/spec/unit/type/file_spec.rb +9 -4
  322. data/spec/unit/type/package_spec.rb +8 -0
  323. data/spec/unit/type/selboolean_spec.rb +4 -6
  324. data/spec/unit/type/service_spec.rb +9 -8
  325. data/spec/unit/type/user_spec.rb +19 -13
  326. data/spec/unit/util/execution_spec.rb +16 -0
  327. data/spec/unit/util/http_proxy_spec.rb +97 -0
  328. data/spec/unit/util/log/destinations_spec.rb +2 -26
  329. data/spec/unit/util/log_spec.rb +0 -138
  330. data/spec/unit/util/logging_spec.rb +200 -0
  331. data/spec/unit/util/pidlock_spec.rb +67 -40
  332. data/spec/unit/util/plist_spec.rb +20 -0
  333. data/spec/unit/util/windows/adsi_spec.rb +55 -4
  334. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  335. data/spec/unit/util/windows/sid_spec.rb +2 -2
  336. data/tasks/manpages.rake +1 -0
  337. metadata +16 -7
  338. data/lib/puppet/pops/loader/null_loader.rb +0 -60
  339. data/locales/ja/puppet.po +0 -12114
  340. data/spec/integration/test/test_helper_spec.rb +0 -31
@@ -24,7 +24,7 @@ Puppet::Type.type(:group).provide :windows_adsi do
24
24
  # since the default array_matching comparison is not commutative
25
25
 
26
26
  # dupes automatically weeded out when hashes built
27
- current_members = Puppet::Util::Windows::ADSI::Group.name_sid_hash(current)
27
+ current_members = Puppet::Util::Windows::ADSI::Group.name_sid_hash(current, true)
28
28
  specified_members = Puppet::Util::Windows::ADSI::Group.name_sid_hash(should)
29
29
 
30
30
  current_sids = current_members.keys.to_a
@@ -52,7 +52,7 @@ Puppet::Type.type(:group).provide :windows_adsi do
52
52
  account = sid.account
53
53
  end
54
54
  resource.debug("#{sid.domain}\\#{account} (#{sid.sid})")
55
- "#{sid.domain}\\#{account}"
55
+ sid.domain ? "#{sid.domain}\\#{account}" : account
56
56
  end
57
57
  return users.join(',')
58
58
  end
@@ -66,7 +66,7 @@ Puppet::Type.type(:group).provide :windows_adsi do
66
66
  end
67
67
 
68
68
  def members
69
- @members ||= Puppet::Util::Windows::ADSI::Group.name_sid_hash(group.members)
69
+ @members ||= Puppet::Util::Windows::ADSI::Group.name_sid_hash(group.members, true)
70
70
 
71
71
  # @members.keys returns an array of SIDs. We need to convert those SIDs into
72
72
  # names so that `puppet resource` prints the right output.
@@ -12,7 +12,7 @@ Puppet::Type.type(:mailalias).provide(
12
12
  record_line :aliases, :fields => %w{name recipient}, :separator => /\s*:\s*/, :block_eval => :instance do
13
13
  def post_parse(record)
14
14
  if record[:recipient]
15
- record[:recipient] = record[:recipient].split(/\s*,\s*/).collect { |d| d.gsub(/^['"]|['"]$/, '') }
15
+ record[:recipient] = record[:recipient].split(/\s*,\s*(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/).collect { |d| d.gsub(/^['"]|['"]$/, '') }
16
16
  end
17
17
  record
18
18
  end
@@ -30,7 +30,7 @@ module Puppet::Provider::Mount
30
30
  supports_remounts = (resource[:remounts] == :true)
31
31
  if supports_remounts && os == 'AIX'
32
32
  remount_with_option("remount")
33
- elsif os.match(/^(FreeBSD|DragonFly|OpenBSD)$/)
33
+ elsif os =~ /^(FreeBSD|DragonFly|OpenBSD)$/
34
34
  remount_with_option("update")
35
35
  elsif supports_remounts
36
36
  mountcmd "-o", "remount", resource[:name]
@@ -56,15 +56,15 @@ Puppet::Type.type(:mount).provide(
56
56
  filesystem_index = 0
57
57
  ret = Array.new
58
58
  lines.each_with_index do |line,i|
59
- if line.match(%r{^\S+:})
59
+ if line =~ %r{^\S+:}
60
60
  # Begin new filesystem stanza and save the index
61
61
  ret[filesystem_index] = filesystem_stanza.join("\n") if filesystem_stanza
62
62
  filesystem_stanza = Array(line)
63
63
  filesystem_index = i
64
64
  # Eat the preceding blank line
65
- ret[i-1] = nil if i > 0 and ret[i-1] and ret[i-1].match(%r{^\s*$})
65
+ ret[i-1] = nil if i > 0 and ret[i-1] and ret[i-1] =~ %r{^\s*$}
66
66
  nil
67
- elsif line.match(%r{^(\s*\*.*|\s*)$})
67
+ elsif line =~ %r{^(\s*\*.*|\s*)$}
68
68
  # Just a comment or blank line; add in place
69
69
  ret[i] = line
70
70
  else
@@ -75,7 +75,7 @@ Puppet::Type.type(:mount).provide(
75
75
  # Add the final stanza to the return
76
76
  ret[filesystem_index] = filesystem_stanza.join("\n") if filesystem_stanza
77
77
  ret = ret.compact.flatten
78
- ret.reject { |line| line.match(/^\* HEADER/) }
78
+ ret.reject { |line| line =~ /^\* HEADER/ }
79
79
  end
80
80
  def self.header
81
81
  super.gsub(/^#/,'*')
@@ -104,7 +104,7 @@ Puppet::Type.type(:mount).provide(
104
104
  special_options = Array.new
105
105
  result[:name] = memo[:name].sub(%r{:\s*$},'').strip
106
106
  memo.each do |_,k_v|
107
- if k_v and k_v.is_a?(String) and k_v.match("=")
107
+ if k_v and k_v.is_a?(String) and k_v.include?("=")
108
108
  attr_name, attr_value = k_v.split("=",2).map(&:strip)
109
109
  if attr_map_name = property_map[attr_name.to_sym]
110
110
  # These are normal "options" options (see `man filesystems`)
@@ -135,10 +135,10 @@ Puppet::Type.type(:mount).provide(
135
135
  def to_line(result)
136
136
  output = Array.new
137
137
  output << "#{result[:name]}:"
138
- if result[:device] and result[:device].match(%r{^/})
138
+ if result[:device] and result[:device] =~ %r{^/}
139
139
  output << "\tdev\t\t= #{result[:device]}"
140
140
  elsif result[:device] and result[:device] != :absent
141
- if ! result[:device].match(%{^.+:/})
141
+ if ! result[:device] =~ %{^.+:/}
142
142
  # Just skip this entry; it was malformed to begin with
143
143
  Puppet.err _("Mount[%{name}]: Field 'device' must be in the format of <absolute path> or <host>:<absolute path>") % { name: result[:name] }
144
144
  return result[:line]
@@ -161,7 +161,7 @@ Puppet::Type.type(:mount).provide(
161
161
  if result[:options]
162
162
  options = result[:options].split(',')
163
163
  special_options = options.select do |x|
164
- x.match('=') and
164
+ x.include?('=') and
165
165
  ["account", "boot", "check", "free", "mount", "size", "type",
166
166
  "vol", "log", "quota"].include? x.split('=').first
167
167
  end
@@ -289,7 +289,7 @@ class Puppet::Provider::NameService::DirectoryService < Puppet::Provider::NameSe
289
289
  end
290
290
  dscl_out = dscl(dscl_args)
291
291
  # We're ok with throwing away negative uids here.
292
- ids = dscl_out.split.compact.collect { |l| l.to_i if l.match(/^\d+$/) }
292
+ ids = dscl_out.split.compact.collect { |l| l.to_i if l =~ /^\d+$/ }
293
293
  ids.compact!.sort! { |a,b| a.to_f <=> b.to_f }
294
294
  # We're just looking for an unused id in our sorted array.
295
295
  ids.each_index do |i|
@@ -3,13 +3,13 @@ require 'puppet/provider/nameservice/objectadd'
3
3
  class Puppet::Provider::NameService
4
4
  class PW < ObjectAdd
5
5
  def deletecmd
6
- [command(:pw), "#{@resource.class.name.to_s}del", @resource[:name]]
6
+ [command(:pw), "#{@resource.class.name}del", @resource[:name]]
7
7
  end
8
8
 
9
9
  def modifycmd(param, value)
10
10
  cmd = [
11
11
  command(:pw),
12
- "#{@resource.class.name.to_s}mod",
12
+ "#{@resource.class.name}mod",
13
13
  @resource[:name],
14
14
  flag(param),
15
15
  munge(param, value)
@@ -29,6 +29,15 @@ Puppet::Type.type(:package).provide :aix, :parent => Puppet::Provider::Package d
29
29
 
30
30
  attr_accessor :latest_info
31
31
 
32
+ STATE_CODE = {
33
+ 'A' => :applied,
34
+ 'B' => :broken,
35
+ 'C' => :committed,
36
+ 'E' => :efix_locked,
37
+ 'O' => :obsolete,
38
+ '?' => :inconsistent,
39
+ }.freeze
40
+
32
41
  def self.srclistcmd(source)
33
42
  [ command(:installp), "-L", "-d", source ]
34
43
  end
@@ -96,6 +105,11 @@ Puppet::Type.type(:package).provide :aix, :parent => Puppet::Provider::Package d
96
105
  if output =~ /^#{Regexp.escape(@resource[:name])}\s+.*\s+Already superseded by.*$/
97
106
  self.fail _("aix package provider is unable to downgrade packages")
98
107
  end
108
+
109
+ pkg_info = query
110
+ if pkg_info && [:broken, :inconsistent].include?(pkg_info[:status])
111
+ self.fail _("Package '%{name}' is in a %{status} state and requires manual intervention") % { name: @resource[:name], status: pkg_info[:status] }
112
+ end
99
113
  end
100
114
 
101
115
  def self.pkglist(hash = {})
@@ -106,8 +120,9 @@ Puppet::Type.type(:package).provide :aix, :parent => Puppet::Provider::Package d
106
120
  end
107
121
 
108
122
  begin
109
- list = execute(cmd).scan(/^[^#][^:]*:([^:]*):([^:]*)/).collect { |n,e|
110
- { :name => n, :ensure => e, :provider => self.name }
123
+ list = execute(cmd).scan(/^[^#][^:]*:([^:]*):([^:]*):[^:]*:[^:]*:([^:])/).collect { |n,e,s|
124
+ e = :absent if [:broken, :inconsistent].include?(STATE_CODE[s])
125
+ { :name => n, :ensure => e, :status => STATE_CODE[s], :provider => self.name }
111
126
  }
112
127
  rescue Puppet::ExecutionFailure => detail
113
128
  if hash[:pkgname]
@@ -70,7 +70,12 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
70
70
  cmd += install_options if @resource[:install_options]
71
71
  cmd << :install << str
72
72
 
73
- aptget(*cmd)
73
+ self.unhold if self.properties[:mark] == :hold
74
+ begin
75
+ aptget(*cmd)
76
+ ensure
77
+ self.hold if @resource[:mark] == :hold
78
+ end
74
79
  end
75
80
 
76
81
  # What's the latest package version available?
@@ -100,12 +105,18 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
100
105
 
101
106
  def uninstall
102
107
  self.run_preseed if @resource[:responsefile]
103
- aptget "-y", "-q", :remove, @resource[:name]
108
+ args = ['-y', '-q']
109
+ args << '--allow-change-held-packages' if self.properties[:mark] == :hold
110
+ args << :remove << @resource[:name]
111
+ aptget(*args)
104
112
  end
105
113
 
106
114
  def purge
107
115
  self.run_preseed if @resource[:responsefile]
108
- aptget '-y', '-q', :remove, '--purge', @resource[:name]
116
+ args = ['-y', '-q']
117
+ args << '--allow-change-held-packages' if self.properties[:mark] == :hold
118
+ args << :remove << '--purge' << @resource[:name]
119
+ aptget(*args)
109
120
  # workaround a "bug" in apt, that already removed packages are not purged
110
121
  super
111
122
  end
@@ -0,0 +1,141 @@
1
+ # dnfmodule - A puppet package provider for DNF modules
2
+ #
3
+ # Installing a module:
4
+ # package { 'postgresql':
5
+ # provider => 'dnfmodule',
6
+ # ensure => '9.6', # install a specific stream
7
+ # flavor => 'client', # install a specific profile
8
+ # }
9
+
10
+
11
+ require 'puppet/provider/package'
12
+
13
+ Puppet::Type.type(:package).provide :dnfmodule, :parent => :dnf do
14
+
15
+ has_feature :installable, :uninstallable, :versionable, :supports_flavors, :disableable
16
+ #has_feature :upgradeable
17
+ # it's not (yet) feasible to make this upgradeable since module streams don't
18
+ # always have matching version types (i.e. idm has streams DL1 and client,
19
+ # other modules have semver streams, others have string streams... we cannot
20
+ # programatically determine a latest version for ensure => 'latest'
21
+
22
+ commands :dnf => '/usr/bin/dnf'
23
+
24
+ def self.current_version
25
+ @current_version ||= dnf('--version').split.first
26
+ end
27
+
28
+ def self.prefetch(packages)
29
+ if Puppet::Util::Package.versioncmp(current_version, '3.0.1') < 0
30
+ raise Puppet::Error, _("Modules are not supported on DNF versions lower than 3.0.1")
31
+ end
32
+ super
33
+ end
34
+
35
+ def self.instances
36
+ packages = []
37
+ cmd = "#{command(:dnf)} module list -d 0 -e #{error_level}"
38
+ execute(cmd).each_line do |line|
39
+ # select only lines with actual packages since DNF clutters the output
40
+ next unless line =~ /\[[eix]\][, ]/
41
+ line.gsub!(/\[d\]/, '') # we don't care about the default flag
42
+
43
+ flavor = if line.include?('[i]')
44
+ line.split('[i]').first.split.last
45
+ else
46
+ :absent
47
+ end
48
+
49
+ packages << new(
50
+ name: line.split[0],
51
+ ensure: if line.include?('[x]')
52
+ :disabled
53
+ else
54
+ line.split[1]
55
+ end,
56
+ flavor: flavor,
57
+ provider: name
58
+ )
59
+ end
60
+ packages
61
+ end
62
+
63
+ def query
64
+ pkg = self.class.instances.find do |package|
65
+ @resource[:name] == package.name
66
+ end
67
+ pkg ? pkg.properties : nil
68
+ end
69
+
70
+ # to install specific streams and profiles:
71
+ # $ dnf module install module-name:stream/profile
72
+ # $ dnf module install perl:5.24/minimal
73
+ # if unspecified, they will be defaulted (see [d] param in dnf module list output)
74
+ def install
75
+ # ensure we start fresh (remove existing stream)
76
+ uninstall unless [:absent, :purged].include?(@property_hash[:ensure])
77
+
78
+ args = @resource[:name].dup
79
+ case @resource[:ensure]
80
+ when true, false, Symbol
81
+ # pass
82
+ else
83
+ args << ":#{@resource[:ensure]}"
84
+ end
85
+ args << "/#{@resource[:flavor]}" if @resource[:flavor]
86
+
87
+ if @resource[:enable_only] == true
88
+ enable(args)
89
+ else
90
+ begin
91
+ execute([command(:dnf), 'module', 'install', '-d', '0', '-e', self.class.error_level, '-y', args])
92
+ rescue Puppet::ExecutionFailure => e
93
+ # module has no default profile and no profile was requested, so just enable the stream
94
+ # DNF versions prior to 4.2.8 do not need this workaround
95
+ # see https://bugzilla.redhat.com/show_bug.cgi?id=1669527
96
+ if @resource[:flavor] == nil && e.message =~ /^missing groups or modules: #{Regexp.quote(@resource[:name])}$/
97
+ enable(args)
98
+ else
99
+ raise
100
+ end
101
+ end
102
+ end
103
+ end
104
+
105
+ # should only get here when @resource[ensure] is :disabled
106
+ def insync?(is)
107
+ if resource[:ensure] == :disabled
108
+ # in sync only if package is already disabled
109
+ pkg = self.class.instances.find do |package|
110
+ @resource[:name] == package.name && package.properties[:ensure] == :disabled
111
+ end
112
+ return true if pkg
113
+ end
114
+ return false
115
+ end
116
+
117
+ def enable(args = @resource[:name])
118
+ execute([command(:dnf), 'module', 'enable', '-d', '0', '-e', self.class.error_level, '-y', args])
119
+ end
120
+
121
+ def uninstall
122
+ execute([command(:dnf), 'module', 'remove', '-d', '0', '-e', self.class.error_level, '-y', @resource[:name]])
123
+ reset # reset module to the default stream
124
+ end
125
+
126
+ def disable(args = @resource[:name])
127
+ execute([command(:dnf), 'module', 'disable', '-d', '0', '-e', self.class.error_level, '-y', args])
128
+ end
129
+
130
+ def reset
131
+ execute([command(:dnf), 'module', 'reset', '-d', '0', '-e', self.class.error_level, '-y', @resource[:name]])
132
+ end
133
+
134
+ def flavor
135
+ @property_hash[:flavor]
136
+ end
137
+
138
+ def flavor=(value)
139
+ install if flavor != @resource.should(:flavor)
140
+ end
141
+ end
@@ -44,7 +44,7 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
44
44
  # Note: self:: is required here to keep these constants in the context of what will
45
45
  # eventually become this Puppet::Type::Package::ProviderDpkg class.
46
46
  self::DPKG_QUERY_FORMAT_STRING = %Q{'${Status} ${Package} ${Version}\\n'}
47
- self::FIELDS_REGEX = %r{^(\S+) +(\S+) +(\S+) (\S+) (\S*)$}
47
+ self::FIELDS_REGEX = %r{^'?(\S+) +(\S+) +(\S+) (\S+) (\S*)$}
48
48
  self::FIELDS= [:desired, :error, :status, :name, :ensure]
49
49
 
50
50
  # @param line [String] one line of dpkg-query output
@@ -67,7 +67,7 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
67
67
  elsif ['config-files', 'half-installed', 'unpacked', 'half-configured'].include?(hash[:status])
68
68
  hash[:ensure] = :absent
69
69
  end
70
- hash[:ensure] = :held if hash[:desired] == 'hold'
70
+ hash[:mark] = :hold if hash[:desired] == 'hold'
71
71
  else
72
72
  Puppet.debug("Failed to match dpkg-query line #{line.inspect}")
73
73
  end
@@ -83,8 +83,6 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
83
83
  end
84
84
  args = []
85
85
 
86
- # We always unhold when installing to remove any prior hold.
87
- self.unhold
88
86
 
89
87
  if @resource[:configfiles] == :keep
90
88
  args << '--force-confold'
@@ -93,7 +91,12 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
93
91
  end
94
92
  args << '-i' << file
95
93
 
96
- dpkg(*args)
94
+ self.unhold if self.properties[:mark] == :hold
95
+ begin
96
+ dpkg(*args)
97
+ ensure
98
+ self.hold if @resource[:mark] == :hold
99
+ end
97
100
  end
98
101
 
99
102
  def update
@@ -144,10 +147,14 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
144
147
  dpkg "--purge", @resource[:name]
145
148
  end
146
149
 
147
- def hold
148
- if package_not_installed?(@resource[:name])
150
+ def deprecated_hold
151
+ if package_not_installed?
149
152
  self.install
150
153
  end
154
+ hold
155
+ end
156
+
157
+ def hold
151
158
  Tempfile.open('puppet_dpkg_set_selection') do |tmpfile|
152
159
  tmpfile.write("#{@resource[:name]} hold\n")
153
160
  tmpfile.flush
@@ -163,16 +170,7 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
163
170
  end
164
171
  end
165
172
 
166
- def package_not_installed?(name)
167
- if !name.nil? && !name.empty?
168
- begin
169
- dpkgquery("-W", "--showformat", self.class::DPKG_QUERY_FORMAT_STRING, name)
170
- rescue Puppet::ExecutionFailure
171
- # return true if exception is generated because package is not found
172
- return true
173
- end
174
- return false
175
- end
176
- raise ArgumentError.new("Package name is nil or empty")
173
+ def package_not_installed?
174
+ query[:status] != "installed"
177
175
  end
178
176
  end
@@ -37,7 +37,12 @@ Puppet::Type.type(:package).provide :fink, :parent => :dpkg, :source => :dpkg do
37
37
 
38
38
  cmd << :install << str
39
39
 
40
- finkcmd(cmd)
40
+ self.unhold if self.properties[:mark] == :hold
41
+ begin
42
+ finkcmd(cmd)
43
+ ensure
44
+ self.hold if @resource[:mark] == :hold
45
+ end
41
46
  end
42
47
 
43
48
  # What's the latest package version available?
@@ -70,10 +75,22 @@ Puppet::Type.type(:package).provide :fink, :parent => :dpkg, :source => :dpkg do
70
75
  end
71
76
 
72
77
  def uninstall
73
- finkcmd "-y", "-q", :remove, @model[:name]
78
+ self.unhold if self.properties[:mark] == :hold
79
+ begin
80
+ finkcmd "-y", "-q", :remove, @model[:name]
81
+ rescue StandardError, LoadError => e
82
+ self.hold if self.properties[:mark] == :hold
83
+ raise e
84
+ end
74
85
  end
75
86
 
76
87
  def purge
77
- aptget '-y', '-q', 'remove', '--purge', @resource[:name]
88
+ self.unhold if self.properties[:mark] == :hold
89
+ begin
90
+ aptget '-y', '-q', 'remove', '--purge', @resource[:name]
91
+ rescue StandardError, LoadError => e
92
+ self.hold if self.properties[:mark] == :hold
93
+ raise e
94
+ end
78
95
  end
79
96
  end