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
@@ -48,11 +48,13 @@ Puppet::Type.type(:package).provide :gem, :parent => Puppet::Provider::Package::
48
48
  #
49
49
  # In this case, causing the puppet_gem provider to inherit the parent gem provider's convenience gemcmd() methods, with the wrong path.
50
50
 
51
- def self.execute_gem_command(command, command_options)
51
+ def self.execute_gem_command(command, command_options, custom_environment = {})
52
52
  validate_command(command)
53
53
  cmd = [command] << command_options
54
54
 
55
- execute(cmd, {:failonfail => true, :combine => true, :custom_environment => {"HOME"=>ENV["HOME"]}})
55
+ custom_environment = {'HOME'=>Puppet::Util.get_env('HOME')}.merge(custom_environment)
56
+
57
+ execute(cmd, {:failonfail => true, :combine => true, :custom_environment => custom_environment})
56
58
  end
57
59
 
58
60
  def self.instances(target_command = nil)
@@ -20,6 +20,7 @@ Puppet::Type.type(:package).provide :openbsd, :parent => Puppet::Provider::Packa
20
20
  has_feature :install_options
21
21
  has_feature :uninstall_options
22
22
  has_feature :upgradeable
23
+ has_feature :supports_flavors
23
24
 
24
25
  def self.instances
25
26
  packages = []
@@ -27,7 +28,7 @@ Puppet::Type.type(:package).provide :openbsd, :parent => Puppet::Provider::Packa
27
28
  begin
28
29
  execpipe(listcmd) do |process|
29
30
  # our regex for matching pkg_info output
30
- regex = /^(.*)-(\d[^-]*)[-]?(\w*)(.*)$/
31
+ regex = /^(.*)-(\d[^-]*)[-]?([\w-]*)(.*)$/
31
32
  fields = [:name, :ensure, :flavor ]
32
33
  hash = {}
33
34
 
@@ -180,7 +181,7 @@ Puppet::Type.type(:package).provide :openbsd, :parent => Puppet::Provider::Packa
180
181
  # If :ensure contains a version, use that instead of looking it up.
181
182
  # This allows for installing packages with the same stem, but multiple
182
183
  # version such as openldap-server.
183
- if /(\d[^-]*)$/.match(@resource[:ensure].to_s)
184
+ if @resource[:ensure].to_s =~ /(\d[^-]*)$/
184
185
  use_version = @resource[:ensure]
185
186
  else
186
187
  use_version = get_version
@@ -239,4 +240,15 @@ Puppet::Type.type(:package).provide :openbsd, :parent => Puppet::Provider::Packa
239
240
  def purge
240
241
  pkgdelete "-c", "-q", @resource[:name]
241
242
  end
243
+
244
+ def flavor
245
+ @property_hash[:flavor]
246
+ end
247
+
248
+ def flavor=(value)
249
+ if flavor != @resource.should(:flavor)
250
+ uninstall
251
+ install
252
+ end
253
+ end
242
254
  end
@@ -36,16 +36,25 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
36
36
  if Puppet.features.microsoft_windows?
37
37
  ["pip.exe"]
38
38
  else
39
- ["pip", "pip-python"]
39
+ ["pip", "pip-python", "pip2", "pip-2"]
40
40
  end
41
41
  end
42
42
 
43
43
  def self.pip_version(command)
44
- execpipe [command, '--version'] do |process|
44
+ version = nil
45
+ execpipe [quote(command), '--version'] do |process|
45
46
  process.collect do |line|
46
- return line.strip.match(/^pip (\d+\.\d+\.?\d*).*$/)[1]
47
+ md = line.strip.match(/^pip (\d+\.\d+\.?\d*).*$/)
48
+ if md
49
+ version = md[1]
50
+ break
51
+ end
47
52
  end
48
53
  end
54
+
55
+ raise Puppet::Error, _("Cannot resolve pip version") unless version
56
+
57
+ version
49
58
  end
50
59
 
51
60
  # Return an array of structured information about every installed package
@@ -68,7 +77,7 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
68
77
  command_options << '--all'
69
78
  end
70
79
 
71
- execpipe [command, command_options] do |process|
80
+ execpipe [quote(command), command_options] do |process|
72
81
  process.collect do |line|
73
82
  next unless pkg = parse(line)
74
83
  pkg[:command] = command
@@ -103,7 +112,7 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
103
112
  self.class.validate_command(command)
104
113
 
105
114
  self.class.instances(command).each do |pkg|
106
- return pkg.properties if @resource[:name].downcase == pkg.name.downcase
115
+ return pkg.properties if @resource[:name].casecmp(pkg.name).zero?
107
116
  end
108
117
  return nil
109
118
  end
@@ -123,14 +132,17 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
123
132
  end
124
133
  end
125
134
 
135
+ # Less resource-intensive approach for pip version 1.5.4 and newer.
136
+
126
137
  def latest_with_new_pip
127
138
  command = resource_or_provider_command
128
139
  self.class.validate_command(command)
129
140
 
130
- # Less resource intensive approach for pip version 1.5.4 and above
131
- execpipe [command, "install", "#{@resource[:name]}==versionplease"] do |process|
141
+ command_and_options = [self.class.quote(command), 'install', "#{@resource[:name]}==versionplease"]
142
+ command_and_options << install_options if @resource[:install_options]
143
+ execpipe command_and_options do |process|
132
144
  process.collect do |line|
133
- # PIP OUTPUT: Could not find a version that satisfies the requirement Django==versionplease (from versions: 1.1.3, 1.8rc1)
145
+ # PIP OUTPUT: Could not find a version that satisfies the requirement example==versionplease (from versions: 1.2.3, 4.5.6)
134
146
  if line =~ /from versions: /
135
147
  textAfterLastMatch = $'.chomp(")\n")
136
148
  versionList = textAfterLastMatch.split(', ').sort do |x,y|
@@ -143,14 +155,18 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
143
155
  end
144
156
  end
145
157
 
158
+ # More resource-intensive approach for pip version 1.5.3 and older.
159
+
146
160
  def latest_with_old_pip
147
161
  command = resource_or_provider_command
148
162
  self.class.validate_command(command)
149
163
 
150
164
  Dir.mktmpdir("puppet_pip") do |dir|
151
- execpipe [command, "install", "#{@resource[:name]}", "-d", "#{dir}", "-v"] do |process|
165
+ command_and_options = [self.class.quote(command), 'install', "#{@resource[:name]}", '-d', "#{dir}", '-v']
166
+ command_and_options << install_options if @resource[:install_options]
167
+ execpipe command_and_options do |process|
152
168
  process.collect do |line|
153
- # PIP OUTPUT: Using version 0.10.1 (newest of versions: 0.10.1, 0.10, 0.9, 0.8.1, 0.8, 0.7.2, 0.7.1, 0.7, 0.6.1, 0.6, 0.5.2, 0.5.1, 0.5, 0.4, 0.3.1, 0.3, 0.2, 0.1)
169
+ # PIP OUTPUT: Using version 0.10.1 (newest of versions: 1.2.3, 4.5.6)
154
170
  if line =~ /Using version (.+?) \(newest of versions/
155
171
  return $1
156
172
  end
@@ -210,4 +226,15 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
210
226
  def install_options
211
227
  join_options(@resource[:install_options])
212
228
  end
229
+
230
+ # Quoting is required if the path to the pip command contains spaces.
231
+ # Required for execpipe() but not execute(), as execute() already does this.
232
+
233
+ def self.quote(path)
234
+ if path.include?(" ")
235
+ "\"#{path}\""
236
+ else
237
+ path
238
+ end
239
+ end
213
240
  end
@@ -49,7 +49,7 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
49
49
  ).merge(
50
50
  case flags[1..1]
51
51
  when 'f'
52
- {:ensure => 'held'}
52
+ {:mark => :hold}
53
53
  when '-'
54
54
  {}
55
55
  else
@@ -107,6 +107,10 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
107
107
  end).merge({:provider => self.name})
108
108
  end
109
109
 
110
+ def deprecated_hold
111
+ hold
112
+ end
113
+
110
114
  def hold
111
115
  pkg(:freeze, @resource[:name])
112
116
  end
@@ -201,8 +205,6 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
201
205
  def install(nofail = false)
202
206
  name = @resource[:name]
203
207
  should = @resource[:ensure]
204
- # always unhold if explicitly told to install/update
205
- self.unhold
206
208
  is = self.query
207
209
  if is[:ensure].to_sym == :absent
208
210
  command = 'install'
@@ -216,7 +218,12 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
216
218
  unless should.is_a? Symbol
217
219
  name += "@#{should}"
218
220
  end
219
- r = exec_cmd(command(:pkg), command, *args, name)
221
+ self.unhold if self.properties[:mark] == :hold
222
+ begin
223
+ r = exec_cmd(command(:pkg), command, *args, name)
224
+ ensure
225
+ self.hold if @resource[:mark] == :hold
226
+ end
220
227
  return r if nofail
221
228
  raise Puppet::Error, _("Unable to update %{package}") % { package: r[:out] } if r[:exit] != 0
222
229
  end
@@ -230,7 +237,13 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
230
237
  cmd << '-r'
231
238
  end
232
239
  cmd << @resource[:name]
233
- pkg cmd
240
+ self.unhold if self.properties[:mark] == :hold
241
+ begin
242
+ pkg cmd
243
+ rescue StandardError, LoadError => e
244
+ self.hold if self.properties[:mark] == :hold
245
+ raise e
246
+ end
234
247
  end
235
248
 
236
249
  # update the package to the latest version available
@@ -102,7 +102,7 @@ Puppet::Type.type(:package).provide :pkgdmg, :parent => Puppet::Provider::Packag
102
102
  if source =~ /\.dmg$/i
103
103
  # If you fix this to use open-uri again, you must update the docs above. -NF
104
104
  File.open(cached_source) do |dmg|
105
- xml_str = hdiutil "mount", "-plist", "-nobrowse", "-readonly", "-noidme", "-mountrandom", "/tmp", dmg.path
105
+ xml_str = hdiutil "mount", "-plist", "-nobrowse", "-readonly", "-mountrandom", "/tmp", dmg.path
106
106
  hdiutil_info = Puppet::Util::Plist.parse_plist(xml_str)
107
107
  raise Puppet::Error.new(_("No disk entities returned by mount at %{path}") % { path: dmg.path }) unless hdiutil_info.has_key?("system-entities")
108
108
  mounts = hdiutil_info["system-entities"].collect { |entity|
@@ -11,6 +11,7 @@ Puppet::Type.type(:package).provide :pkgng, :parent => Puppet::Provider::Package
11
11
 
12
12
  has_feature :versionable
13
13
  has_feature :upgradeable
14
+ has_feature :install_options
14
15
 
15
16
  def self.get_query
16
17
  pkg(['query', '-a', '%n %v %o'])
@@ -22,7 +23,11 @@ Puppet::Type.type(:package).provide :pkgng, :parent => Puppet::Provider::Package
22
23
 
23
24
  def self.get_latest_version(origin, version_list)
24
25
  if latest_version = version_list.lines.find { |l| l =~ /^#{origin} / }
25
- latest_version = latest_version.split(' ').last.split(')').first
26
+ _name, compare, status = latest_version.chomp.split(' ', 3)
27
+ if ['!', '?'].include?(compare)
28
+ return nil
29
+ end
30
+ latest_version = status.split(' ').last.split(')').first
26
31
  return latest_version
27
32
  end
28
33
  nil
@@ -97,13 +102,16 @@ Puppet::Type.type(:package).provide :pkgng, :parent => Puppet::Provider::Package
97
102
  end
98
103
 
99
104
  if not source # install using default repo logic
100
- args = ['install', '-qy', installname]
105
+ args = ['install', '-qy']
101
106
  elsif source.scheme == 'urn' # install from repo named in URN
102
107
  tag = repo_tag_from_urn(source.to_s)
103
- args = ['install', '-qy', '-r', tag, installname]
108
+ args = ['install', '-qy', '-r', tag]
104
109
  else # add package located at URL
105
- args = ['add', '-q', source.to_s]
110
+ args = ['add', '-q']
111
+ installname = source.to_s
106
112
  end
113
+ args += install_options if @resource[:install_options]
114
+ args << installname
107
115
 
108
116
  pkg(args)
109
117
  end
@@ -140,4 +148,8 @@ Puppet::Type.type(:package).provide :pkgng, :parent => Puppet::Provider::Package
140
148
  @property_hash[:origin]
141
149
  end
142
150
 
151
+ def install_options
152
+ join_options(@resource[:install_options])
153
+ end
154
+
143
155
  end
@@ -70,7 +70,7 @@ Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Packa
70
70
  name = qatom[:pfx] + name if qatom[:pfx]
71
71
  name = name + '-' + qatom[:pv] if qatom[:pv]
72
72
  name = name + '-' + qatom[:pr] if qatom[:pr]
73
- name = name + qatom[:slot] if qatom[:slot]
73
+ name = name + ':' + qatom[:slot] if qatom[:slot]
74
74
  cmd << '--update' if [:latest].include?(should)
75
75
  cmd += install_options if @resource[:install_options]
76
76
  cmd << name
@@ -84,7 +84,7 @@ Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Packa
84
84
  name = qatom[:pfx] + name if qatom[:pfx]
85
85
  name = name + '-' + qatom[:pv] if qatom[:pv]
86
86
  name = name + '-' + qatom[:pr] if qatom[:pr]
87
- name = name + qatom[:slot] if qatom[:slot]
87
+ name = name + ':' + qatom[:slot] if qatom[:slot]
88
88
  cmd += uninstall_options if @resource[:uninstall_options]
89
89
  cmd << name
90
90
  if [:purged].include?(should)
@@ -169,7 +169,7 @@ Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Packa
169
169
  package_sets << package_set.to_s.strip
170
170
  end
171
171
 
172
- if @resource[:name].match(/^@/)
172
+ if @resource[:name] =~ /^@/
173
173
  if package_sets.include?(@resource[:name][1..-1].to_s)
174
174
  return({:name => "#{@resource[:name]}", :ensure => '9999', :version_available => nil, :installed_versions => nil, :installable_versions => "9999,"})
175
175
  end
@@ -247,7 +247,7 @@ Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Packa
247
247
  # [2.7.12: 2.7
248
248
  # 3.4.5: 3.4
249
249
  # 3.5.2: 3.5]
250
- version_for_slot = versions_and_slots.find { |version_and_slot| version_and_slot.last == slot[1..-1] }
250
+ version_for_slot = versions_and_slots.find { |version_and_slot| version_and_slot.last == slot }
251
251
  # [3.5.2: 3.5]
252
252
  version_for_slot.first if version_for_slot
253
253
  # 3.5.2
@@ -14,4 +14,9 @@ Puppet::Type.type(:package).provide :puppet_gem, :parent => :gem do
14
14
  else
15
15
  commands :gemcmd => "/opt/puppetlabs/puppet/bin/gem"
16
16
  end
17
+
18
+ def self.execute_gem_command(command, command_options, custom_environment = {})
19
+ custom_environment['PKG_CONFIG_PATH'] = '/opt/puppetlabs/puppet/lib/pkgconfig' unless Puppet::Util::Platform.windows?
20
+ super(command, command_options, custom_environment)
21
+ end
17
22
  end
@@ -229,14 +229,14 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
229
229
  str2 = str2.gsub(front_strip_re, '')
230
230
 
231
231
  # "handle the tilde separator, it sorts before everything else"
232
- if /^~/.match(str1) && /^~/.match(str2)
232
+ if str1 =~ /^~/ && str2 =~ /^~/
233
233
  # if they both have ~, strip it
234
234
  str1 = str1[1..-1]
235
235
  str2 = str2[1..-1]
236
236
  next
237
- elsif /^~/.match(str1)
237
+ elsif str1 =~ /^~/
238
238
  return -1
239
- elsif /^~/.match(str2)
239
+ elsif str2 =~ /^~/
240
240
  return 1
241
241
  end
242
242
 
@@ -245,7 +245,7 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
245
245
  # "grab first completely alpha or completely numeric segment"
246
246
  isnum = false
247
247
  # if the first char of str1 is a digit, grab the chunk of continuous digits from each string
248
- if /^[0-9]+/.match(str1)
248
+ if str1 =~ /^[0-9]+/
249
249
  if str1 =~ /^[0-9]+/
250
250
  segment1 = $~.to_s
251
251
  str1 = $~.post_match
@@ -340,8 +340,8 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
340
340
  v = s[0,ri]
341
341
  r = s[ri+1,s.length]
342
342
  if arch = r.scan(ARCH_REGEX)[0]
343
- a = arch.gsub(/\./, '')
344
- r.gsub!(ARCH_REGEX, '')
343
+ a = arch.delete('.')
344
+ r.gsub!(ARCH_REGEX, '')
345
345
  end
346
346
  else
347
347
  v = s
@@ -79,7 +79,7 @@ class Puppet::Provider::Package::Windows
79
79
 
80
80
  def self.replace_forward_slashes(value)
81
81
  if value.include?('/')
82
- value.gsub!('/', "\\")
82
+ value.tr!('/', "\\")
83
83
  Puppet.debug('Package source parameter contained /s - replaced with \\s')
84
84
  end
85
85
  value
@@ -25,6 +25,8 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
25
25
 
26
26
  defaultfor :osfamily => :redhat
27
27
 
28
+ VERSION_REGEX = /^(?:(\d+):)?(\S+)-(\S+)$/
29
+
28
30
  def self.prefetch(packages)
29
31
  raise Puppet::Error, _("The yum provider can only be used as root") if Process.euid != 0
30
32
  super
@@ -86,23 +88,24 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
86
88
  end
87
89
 
88
90
  def self.parse_updates(str)
89
- # Strip off all content before the first blank line
90
- body = str.partition(/^\s*\n/m).last
91
+ # Strip off all content that contains Obsoleting, Security: or Update
92
+ body = str.partition(/^(Obsoleting|Security:|Update)/).first
91
93
 
92
94
  updates = Hash.new { |h, k| h[k] = [] }
93
- body.split.each_slice(3) do |tuple|
94
- break if tuple[0] =~ /^(Obsoleting|Security:|Update)/
95
- break unless tuple[1].match(/^(?:(\d+):)?(\S+)-(\S+)$/)
96
- hash = update_to_hash(*tuple[0..1])
97
- # Create entries for both the package name without a version and a
98
- # version since yum considers those as mostly interchangeable.
99
- short_name = hash[:name]
100
- long_name = "#{hash[:name]}.#{hash[:arch]}"
101
-
102
- updates[short_name] << hash
103
- updates[long_name] << hash
104
- end
105
95
 
96
+ body.split(/^\s*\n/).each do |line|
97
+ line.split.each_slice(3) do |tuple|
98
+ next unless tuple[0].include?('.') && tuple[1] =~ VERSION_REGEX
99
+
100
+ hash = update_to_hash(*tuple[0..1])
101
+ # Create entries for both the package name without a version and a
102
+ # version since yum considers those as mostly interchangeable.
103
+ short_name = hash[:name]
104
+ long_name = "#{hash[:name]}.#{hash[:arch]}"
105
+ updates[short_name] << hash
106
+ updates[long_name] << hash
107
+ end
108
+ end
106
109
  updates
107
110
  end
108
111
 
@@ -117,7 +120,7 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
117
120
  raise _("Failed to parse package name and architecture from '%{pkgname}'") % { pkgname: pkgname }
118
121
  end
119
122
 
120
- match = pkgversion.match(/^(?:(\d+):)?(\S+)-(\S+)$/)
123
+ match = pkgversion.match(VERSION_REGEX)
121
124
  epoch = match[1] || '0'
122
125
  version = match[2]
123
126
  release = match[3]
@@ -248,6 +251,7 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
248
251
  return "#{upd[:epoch]}:#{upd[:version]}-#{upd[:release]}"
249
252
  else
250
253
  # Yum didn't find updates, pretend the current version is the latest
254
+ self.debug "Yum didn't find updates, current version (#{properties[:ensure]}) is the latest"
251
255
  version = properties[:ensure]
252
256
  raise Puppet::DevError, _("Tried to get latest on a missing package") if version == :absent || version == :purged
253
257
  return version
@@ -286,12 +290,16 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
286
290
  # @param key [String] The key to look for in all contained hashes
287
291
  # @return [Array<String>] All hash values with the given key.
288
292
  def scan_options(options, key)
289
- return [] if options.nil?
290
- options.inject([]) do |repos, opt|
291
- if opt.is_a? Hash and opt[key]
292
- repos << opt[key]
293
+ return [] unless options.is_a?(Enumerable)
294
+ values = options.map do | repo |
295
+ value = if repo.is_a?(String)
296
+ next unless repo.include?('=')
297
+ Hash[*repo.strip.split('=')] # make it a hash
298
+ else
299
+ repo
293
300
  end
294
- repos
301
+ value[key]
295
302
  end
303
+ values.compact.uniq
296
304
  end
297
305
  end