puppet 6.4.5-universal-darwin → 6.5.0-universal-darwin

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 (329) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +10 -10
  3. data/Gemfile +6 -6
  4. data/Gemfile.lock +46 -52
  5. data/ext/build_defaults.yaml +0 -1
  6. data/ext/project_data.yaml +3 -3
  7. data/ext/regexp_nodes/regexp_nodes.rb +4 -4
  8. data/ext/solaris/smf/puppet.xml +0 -2
  9. data/ext/windows/eventlog/Rakefile +32 -0
  10. data/ext/windows/eventlog/puppetres.dll +0 -0
  11. data/ext/windows/eventlog/puppetres.mc +18 -0
  12. data/ext/windows/service/daemon.rb +8 -38
  13. data/install.rb +24 -6
  14. data/lib/puppet.rb +3 -1
  15. data/lib/puppet/application.rb +1 -1
  16. data/lib/puppet/application/agent.rb +11 -34
  17. data/lib/puppet/application/apply.rb +6 -6
  18. data/lib/puppet/application/describe.rb +9 -3
  19. data/lib/puppet/application/device.rb +4 -14
  20. data/lib/puppet/application/doc.rb +1 -1
  21. data/lib/puppet/application/lookup.rb +2 -2
  22. data/lib/puppet/application/resource.rb +4 -4
  23. data/lib/puppet/application/script.rb +2 -2
  24. data/lib/puppet/application/ssl.rb +10 -9
  25. data/lib/puppet/configurer.rb +30 -86
  26. data/lib/puppet/configurer/downloader.rb +6 -2
  27. data/lib/puppet/defaults.rb +50 -44
  28. data/lib/puppet/error.rb +14 -9
  29. data/lib/puppet/face/catalog.rb +20 -1
  30. data/lib/puppet/face/config.rb +48 -10
  31. data/lib/puppet/face/facts.rb +1 -1
  32. data/lib/puppet/face/help.rb +1 -1
  33. data/lib/puppet/face/module/list.rb +5 -5
  34. data/lib/puppet/face/module/search.rb +1 -1
  35. data/lib/puppet/face/module/uninstall.rb +1 -1
  36. data/lib/puppet/face/module/upgrade.rb +1 -1
  37. data/lib/puppet/face/parser.rb +48 -9
  38. data/lib/puppet/face/plugin.rb +2 -9
  39. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  40. data/lib/puppet/file_system.rb +12 -2
  41. data/lib/puppet/file_system/file_impl.rb +6 -3
  42. data/lib/puppet/file_system/memory_file.rb +1 -1
  43. data/lib/puppet/file_system/posix.rb +2 -3
  44. data/lib/puppet/forge.rb +3 -3
  45. data/lib/puppet/functions.rb +2 -1
  46. data/lib/puppet/functions/camelcase.rb +2 -2
  47. data/lib/puppet/functions/epp.rb +4 -4
  48. data/lib/puppet/functions/find_file.rb +9 -9
  49. data/lib/puppet/functions/inline_epp.rb +5 -5
  50. data/lib/puppet/functions/regsubst.rb +6 -8
  51. data/lib/puppet/gettext/module_translations.rb +1 -1
  52. data/lib/puppet/graph/rb_tree_map.rb +2 -2
  53. data/lib/puppet/graph/simple_graph.rb +3 -4
  54. data/lib/puppet/indirector/catalog/compiler.rb +5 -11
  55. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  56. data/lib/puppet/indirector/hiera.rb +0 -2
  57. data/lib/puppet/indirector/resource/ral.rb +3 -1
  58. data/lib/puppet/indirector/resource/validator.rb +1 -1
  59. data/lib/puppet/interface.rb +1 -2
  60. data/lib/puppet/loaders.rb +1 -0
  61. data/lib/puppet/metatype/manager.rb +1 -1
  62. data/lib/puppet/module.rb +1 -1
  63. data/lib/puppet/module/task.rb +4 -20
  64. data/lib/puppet/module_tool/applications/installer.rb +1 -1
  65. data/lib/puppet/module_tool/applications/uninstaller.rb +3 -3
  66. data/lib/puppet/module_tool/metadata.rb +1 -1
  67. data/lib/puppet/module_tool/shared_behaviors.rb +4 -4
  68. data/lib/puppet/module_tool/tar/mini.rb +2 -12
  69. data/lib/puppet/network/http/api/indirected_routes.rb +11 -12
  70. data/lib/puppet/network/http/connection.rb +12 -10
  71. data/lib/puppet/network/http/factory.rb +11 -1
  72. data/lib/puppet/network/http/pool.rb +0 -2
  73. data/lib/puppet/network/http/site.rb +1 -1
  74. data/lib/puppet/network/resolver.rb +2 -2
  75. data/lib/puppet/node/environment.rb +2 -4
  76. data/lib/puppet/pal/pal_impl.rb +2 -2
  77. data/lib/puppet/parser/ast.rb +1 -1
  78. data/lib/puppet/parser/ast/resourceparam.rb +1 -1
  79. data/lib/puppet/parser/functions.rb +1 -1
  80. data/lib/puppet/parser/functions/epp.rb +3 -3
  81. data/lib/puppet/parser/functions/fail.rb +8 -1
  82. data/lib/puppet/parser/functions/inline_epp.rb +5 -5
  83. data/lib/puppet/parser/scope.rb +7 -8
  84. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
  85. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
  86. data/lib/puppet/pops/evaluator/external_syntax_support.rb +2 -3
  87. data/lib/puppet/pops/evaluator/runtime3_support.rb +4 -4
  88. data/lib/puppet/pops/loader/null_loader.rb +60 -0
  89. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -4
  90. data/lib/puppet/pops/loader/task_instantiator.rb +0 -4
  91. data/lib/puppet/pops/loaders.rb +1 -1
  92. data/lib/puppet/pops/lookup/hiera_config.rb +0 -1
  93. data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
  94. data/lib/puppet/pops/merge_strategy.rb +18 -22
  95. data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
  96. data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
  97. data/lib/puppet/pops/parser/locator.rb +1 -1
  98. data/lib/puppet/pops/parser/pn_parser.rb +16 -17
  99. data/lib/puppet/pops/puppet_stack.rb +49 -51
  100. data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
  101. data/lib/puppet/pops/types/string_converter.rb +10 -10
  102. data/lib/puppet/pops/types/types.rb +6 -5
  103. data/lib/puppet/property.rb +1 -1
  104. data/lib/puppet/property/ensure.rb +1 -1
  105. data/lib/puppet/provider/exec.rb +2 -6
  106. data/lib/puppet/provider/file/posix.rb +0 -5
  107. data/lib/puppet/provider/nameservice.rb +3 -10
  108. data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
  109. data/lib/puppet/provider/nameservice/pw.rb +2 -2
  110. data/lib/puppet/provider/package.rb +0 -2
  111. data/lib/puppet/provider/package/apt.rb +1 -5
  112. data/lib/puppet/provider/package/dnf.rb +1 -1
  113. data/lib/puppet/provider/package/dpkg.rb +18 -34
  114. data/lib/puppet/provider/package/openbsd.rb +1 -1
  115. data/lib/puppet/provider/package/pip.rb +13 -37
  116. data/lib/puppet/provider/package/portage.rb +4 -4
  117. data/lib/puppet/provider/package/puppet_gem.rb +1 -1
  118. data/lib/puppet/provider/package/rpm.rb +18 -56
  119. data/lib/puppet/provider/package/windows/package.rb +1 -1
  120. data/lib/puppet/provider/package/yum.rb +5 -9
  121. data/lib/puppet/provider/package_targetable.rb +4 -7
  122. data/lib/puppet/provider/parsedfile.rb +1 -1
  123. data/lib/puppet/provider/service/daemontools.rb +9 -9
  124. data/lib/puppet/provider/service/launchd.rb +5 -20
  125. data/lib/puppet/provider/service/openbsd.rb +1 -1
  126. data/lib/puppet/provider/service/rcng.rb +2 -2
  127. data/lib/puppet/provider/service/runit.rb +8 -2
  128. data/lib/puppet/provider/service/systemd.rb +19 -14
  129. data/lib/puppet/provider/service/windows.rb +0 -8
  130. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  131. data/lib/puppet/provider/user/hpux.rb +1 -1
  132. data/lib/puppet/provider/user/pw.rb +3 -12
  133. data/lib/puppet/provider/user/user_role_add.rb +1 -5
  134. data/lib/puppet/provider/user/useradd.rb +20 -45
  135. data/lib/puppet/provider/user/windows_adsi.rb +5 -4
  136. data/lib/puppet/reference/configuration.rb +3 -3
  137. data/lib/puppet/reference/indirection.rb +2 -2
  138. data/lib/puppet/reference/metaparameter.rb +3 -1
  139. data/lib/puppet/reference/providers.rb +3 -1
  140. data/lib/puppet/reference/type.rb +9 -3
  141. data/lib/puppet/reports.rb +1 -1
  142. data/lib/puppet/resource.rb +1 -18
  143. data/lib/puppet/resource/catalog.rb +1 -1
  144. data/lib/puppet/rest/routes.rb +30 -17
  145. data/lib/puppet/settings.rb +3 -43
  146. data/lib/puppet/settings/environment_conf.rb +0 -1
  147. data/lib/puppet/ssl/certificate_request.rb +12 -2
  148. data/lib/puppet/ssl/host.rb +2 -2
  149. data/lib/puppet/ssl/oids.rb +1 -1
  150. data/lib/puppet/ssl/ssl_provider.rb +11 -5
  151. data/lib/puppet/ssl/state_machine.rb +102 -98
  152. data/lib/puppet/test/test_helper.rb +1 -0
  153. data/lib/puppet/transaction.rb +11 -33
  154. data/lib/puppet/transaction/report.rb +1 -1
  155. data/lib/puppet/type.rb +4 -2
  156. data/lib/puppet/type/exec.rb +17 -23
  157. data/lib/puppet/type/file.rb +39 -11
  158. data/lib/puppet/type/file/data_sync.rb +1 -5
  159. data/lib/puppet/type/group.rb +2 -4
  160. data/lib/puppet/type/notify.rb +3 -4
  161. data/lib/puppet/type/package.rb +3 -20
  162. data/lib/puppet/type/schedule.rb +1 -1
  163. data/lib/puppet/type/service.rb +3 -8
  164. data/lib/puppet/type/user.rb +2 -4
  165. data/lib/puppet/util.rb +29 -39
  166. data/lib/puppet/util/command_line/trollop.rb +1 -1
  167. data/lib/puppet/util/execution.rb +3 -4
  168. data/lib/puppet/util/http_proxy.rb +19 -27
  169. data/lib/puppet/util/log.rb +2 -2
  170. data/lib/puppet/util/log/destinations.rb +2 -2
  171. data/lib/puppet/util/logging.rb +20 -32
  172. data/lib/puppet/util/metric.rb +2 -2
  173. data/lib/puppet/util/monkey_patches.rb +33 -0
  174. data/lib/puppet/util/pidlock.rb +2 -3
  175. data/lib/puppet/util/provider_features.rb +4 -2
  176. data/lib/puppet/util/rdoc.rb +1 -1
  177. data/lib/puppet/util/reference.rb +1 -1
  178. data/lib/puppet/util/resource_template.rb +1 -1
  179. data/lib/puppet/util/selinux.rb +2 -8
  180. data/lib/puppet/util/skip_tags.rb +4 -0
  181. data/lib/puppet/util/windows/adsi.rb +18 -48
  182. data/lib/puppet/util/windows/process.rb +8 -8
  183. data/lib/puppet/util/windows/registry.rb +5 -7
  184. data/lib/puppet/util/windows/security.rb +0 -2
  185. data/lib/puppet/util/windows/service.rb +4 -149
  186. data/lib/puppet/util/windows/sid.rb +0 -1
  187. data/lib/puppet/vendor.rb +1 -1
  188. data/lib/puppet/version.rb +1 -1
  189. data/lib/puppet/x509/cert_provider.rb +81 -24
  190. data/locales/puppet.pot +462 -482
  191. data/man/man5/puppet.conf.5 +43 -44
  192. data/man/man8/puppet-agent.8 +1 -1
  193. data/man/man8/puppet-apply.8 +3 -3
  194. data/man/man8/puppet-catalog.8 +31 -3
  195. data/man/man8/puppet-config.8 +1 -1
  196. data/man/man8/puppet-describe.8 +1 -1
  197. data/man/man8/puppet-device.8 +1 -1
  198. data/man/man8/puppet-doc.8 +1 -1
  199. data/man/man8/puppet-epp.8 +1 -1
  200. data/man/man8/puppet-facts.8 +1 -1
  201. data/man/man8/puppet-filebucket.8 +1 -1
  202. data/man/man8/puppet-generate.8 +1 -1
  203. data/man/man8/puppet-help.8 +1 -1
  204. data/man/man8/puppet-key.8 +1 -1
  205. data/man/man8/puppet-lookup.8 +1 -1
  206. data/man/man8/puppet-man.8 +1 -1
  207. data/man/man8/puppet-module.8 +1 -1
  208. data/man/man8/puppet-node.8 +1 -1
  209. data/man/man8/puppet-parser.8 +1 -1
  210. data/man/man8/puppet-plugin.8 +1 -1
  211. data/man/man8/puppet-report.8 +1 -1
  212. data/man/man8/puppet-resource.8 +1 -1
  213. data/man/man8/puppet-script.8 +1 -1
  214. data/man/man8/puppet-ssl.8 +1 -1
  215. data/man/man8/puppet-status.8 +1 -1
  216. data/man/man8/puppet.8 +3 -3
  217. data/spec/fixtures/ssl/127.0.0.1-key.pem +56 -56
  218. data/spec/fixtures/ssl/127.0.0.1.pem +27 -27
  219. data/spec/fixtures/ssl/bad-basic-constraints.pem +32 -32
  220. data/spec/fixtures/ssl/bad-int-basic-constraints.pem +30 -30
  221. data/spec/fixtures/ssl/ca.pem +30 -30
  222. data/spec/fixtures/ssl/crl.pem +15 -15
  223. data/spec/fixtures/ssl/ec-key.pem +18 -0
  224. data/spec/fixtures/ssl/ec.pem +40 -0
  225. data/spec/fixtures/ssl/encrypted-ec-key.pem +21 -0
  226. data/spec/fixtures/ssl/encrypted-key.pem +57 -57
  227. data/spec/fixtures/ssl/intermediate-agent-crl.pem +16 -16
  228. data/spec/fixtures/ssl/intermediate-agent.pem +33 -33
  229. data/spec/fixtures/ssl/intermediate-crl.pem +17 -17
  230. data/spec/fixtures/ssl/intermediate.pem +31 -31
  231. data/spec/fixtures/ssl/pluto-key.pem +56 -56
  232. data/spec/fixtures/ssl/pluto.pem +28 -28
  233. data/spec/fixtures/ssl/request-key.pem +56 -56
  234. data/spec/fixtures/ssl/request.pem +24 -24
  235. data/spec/fixtures/ssl/revoked-key.pem +56 -56
  236. data/spec/fixtures/ssl/revoked.pem +25 -25
  237. data/spec/fixtures/ssl/signed-key.pem +56 -56
  238. data/spec/fixtures/ssl/signed.pem +25 -25
  239. data/spec/fixtures/ssl/tampered-cert.pem +27 -27
  240. data/spec/fixtures/ssl/tampered-csr.pem +24 -24
  241. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/func_with_syntax_error.rb +9 -0
  242. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +24 -0
  243. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +24 -0
  244. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +24 -0
  245. data/spec/integration/configurer_spec.rb +0 -52
  246. data/spec/integration/provider/service/init_spec.rb +1 -0
  247. data/spec/integration/provider/service/systemd_spec.rb +5 -8
  248. data/spec/integration/type/file_spec.rb +38 -28
  249. data/spec/integration/util/execution_spec.rb +0 -27
  250. data/spec/lib/puppet/certificate_factory.rb +2 -2
  251. data/spec/lib/puppet/test_ca.rb +17 -4
  252. data/spec/lib/puppet_spec/fixtures.rb +4 -0
  253. data/spec/spec_helper.rb +0 -28
  254. data/spec/unit/application/agent_spec.rb +34 -67
  255. data/spec/unit/application/device_spec.rb +1 -27
  256. data/spec/unit/application/ssl_spec.rb +60 -35
  257. data/spec/unit/configurer_spec.rb +399 -395
  258. data/spec/unit/defaults_spec.rb +4 -4
  259. data/spec/unit/face/facts_spec.rb +0 -9
  260. data/spec/unit/face/parser_spec.rb +69 -22
  261. data/spec/unit/face/plugin_spec.rb +0 -8
  262. data/spec/unit/file_system_spec.rb +30 -1
  263. data/spec/unit/forge/forge_spec.rb +3 -1
  264. data/spec/unit/forge/repository_spec.rb +3 -1
  265. data/spec/unit/indirector/catalog/compiler_spec.rb +5 -62
  266. data/spec/unit/indirector/resource/ral_spec.rb +4 -4
  267. data/spec/unit/module_tool/tar/mini_spec.rb +1 -1
  268. data/spec/unit/network/http/api/indirected_routes_spec.rb +10 -25
  269. data/spec/unit/network/http/connection_spec.rb +145 -119
  270. data/spec/unit/network/http/factory_spec.rb +5 -27
  271. data/spec/unit/parser/scope_spec.rb +0 -10
  272. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +3 -8
  273. data/spec/unit/pops/loaders/loaders_spec.rb +4 -0
  274. data/spec/unit/pops/loaders/module_loaders_spec.rb +0 -37
  275. data/spec/unit/pops/types/types_spec.rb +27 -0
  276. data/spec/unit/provider/exec_spec.rb +0 -209
  277. data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
  278. data/spec/unit/provider/package/dnf_spec.rb +0 -7
  279. data/spec/unit/provider/package/dpkg_spec.rb +80 -240
  280. data/spec/unit/provider/package/pip_spec.rb +8 -61
  281. data/spec/unit/provider/package/portage_spec.rb +4 -4
  282. data/spec/unit/provider/package/rpm_spec.rb +16 -150
  283. data/spec/unit/provider/package/yum_spec.rb +0 -7
  284. data/spec/unit/provider/service/daemontools_spec.rb +0 -24
  285. data/spec/unit/provider/service/launchd_spec.rb +0 -28
  286. data/spec/unit/provider/service/runit_spec.rb +0 -24
  287. data/spec/unit/provider/service/systemd_spec.rb +25 -39
  288. data/spec/unit/provider/service/windows_spec.rb +0 -20
  289. data/spec/unit/provider/user/hpux_spec.rb +2 -2
  290. data/spec/unit/provider/user/pw_spec.rb +0 -37
  291. data/spec/unit/provider/user/useradd_spec.rb +0 -88
  292. data/spec/unit/resource_spec.rb +1 -26
  293. data/spec/unit/ssl/host_spec.rb +5 -0
  294. data/spec/unit/ssl/ssl_provider_spec.rb +36 -11
  295. data/spec/unit/ssl/state_machine_spec.rb +233 -158
  296. data/spec/unit/transaction_spec.rb +0 -64
  297. data/spec/unit/type/exec_spec.rb +12 -15
  298. data/spec/unit/type/file/content_spec.rb +3 -9
  299. data/spec/unit/type/file/source_spec.rb +4 -4
  300. data/spec/unit/type/file_spec.rb +15 -11
  301. data/spec/unit/type/package_spec.rb +0 -5
  302. data/spec/unit/type/schedule_spec.rb +1 -3
  303. data/spec/unit/type/service_spec.rb +0 -16
  304. data/spec/unit/util/execution_spec.rb +0 -16
  305. data/spec/unit/util/http_proxy_spec.rb +21 -151
  306. data/spec/unit/util/ldap/manager_spec.rb +0 -15
  307. data/spec/unit/util/log/destinations_spec.rb +3 -7
  308. data/spec/unit/util/log_spec.rb +138 -0
  309. data/spec/unit/util/logging_spec.rb +0 -200
  310. data/spec/unit/util/pidlock_spec.rb +0 -26
  311. data/spec/unit/util/skip_tags_spec.rb +14 -0
  312. data/spec/unit/util/windows/adsi_spec.rb +0 -51
  313. data/spec/unit/util/windows/service_spec.rb +0 -9
  314. data/spec/unit/util_spec.rb +10 -0
  315. data/spec/unit/x509/cert_provider_spec.rb +82 -43
  316. data/tasks/generate_cert_fixtures.rake +13 -1
  317. data/tasks/manpages.rake +0 -1
  318. metadata +26 -20
  319. data/ext/cert_inspector +0 -140
  320. data/ext/envpuppet +0 -139
  321. data/ext/envpuppet.bat +0 -14
  322. data/ext/puppet-test +0 -476
  323. data/ext/pure_ruby_dsl/dsl_test.rb +0 -7
  324. data/ext/upload_facts.rb +0 -119
  325. data/lib/puppet/provider/package/dnfmodule.rb +0 -87
  326. data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list-installed.txt +0 -11
  327. data/spec/integration/type/notify_spec.rb +0 -46
  328. data/spec/unit/provider/package/dnfmodule_spec.rb +0 -186
  329. data/spec/unit/provider/package_targetable_spec.rb +0 -60
@@ -1,4 +1,4 @@
1
- require 'puppet/provider/package/gem'
1
+ require 'puppet/provider/package'
2
2
 
3
3
  Puppet::Type.type(:package).provide :puppet_gem, :parent => :gem do
4
4
  desc "Puppet Ruby Gem support. This provider is useful for managing
@@ -13,7 +13,6 @@ These options should be specified as an array where each element is either a str
13
13
  has_feature :install_options
14
14
  has_feature :uninstall_options
15
15
  has_feature :virtual_packages
16
- has_feature :install_only
17
16
 
18
17
  # Note: self:: is required here to keep these constants in the context of what will
19
18
  # eventually become this Puppet::Type::Package::ProviderRpm class.
@@ -21,7 +20,6 @@ These options should be specified as an array where each element is either a str
21
20
  self::NEVRA_FORMAT = %Q{%{NAME} %|EPOCH?{%{EPOCH}}:{0}| %{VERSION} %{RELEASE} %{ARCH}\\n}
22
21
  self::NEVRA_REGEX = %r{^'?(\S+) (\S+) (\S+) (\S+) (\S+)$}
23
22
  self::NEVRA_FIELDS = [:name, :epoch, :version, :release, :arch]
24
- self::MULTIVERSION_SEPARATOR = "; "
25
23
 
26
24
  ARCH_LIST = [
27
25
  'noarch',
@@ -81,9 +79,12 @@ These options should be specified as an array where each element is either a str
81
79
 
82
80
  # list out all of the packages
83
81
  begin
84
- execpipe("#{command(:rpm)} -qa #{nosignature} #{nodigest} --qf '#{self::NEVRA_FORMAT}' | sort") { |process|
82
+ execpipe("#{command(:rpm)} -qa #{nosignature} #{nodigest} --qf '#{self::NEVRA_FORMAT}'") { |process|
85
83
  # now turn each returned line into a package object
86
- nevra_to_multiversion_hash(process).each { |hash| packages << new(hash) }
84
+ process.each_line { |line|
85
+ hash = nevra_to_hash(line)
86
+ packages << new(hash) unless hash.empty?
87
+ }
87
88
  }
88
89
  rescue Puppet::ExecutionFailure
89
90
  raise Puppet::Error, _("Failed to list packages"), $!.backtrace
@@ -99,7 +100,7 @@ These options should be specified as an array where each element is either a str
99
100
  #NOTE: Prior to a fix for issue 1243, this method potentially returned a cached value
100
101
  #IF YOU CALL THIS METHOD, IT WILL CALL RPM
101
102
  #Use get(:property) to check if cached values are available
102
- cmd = ["-q", @resource[:name], "#{self.class.nosignature}", "#{self.class.nodigest}", "--qf", "#{self.class::NEVRA_FORMAT}"]
103
+ cmd = ["-q", @resource[:name], "#{self.class.nosignature}", "#{self.class.nodigest}", "--qf", "'#{self.class::NEVRA_FORMAT}'"]
103
104
 
104
105
  begin
105
106
  output = rpm(*cmd)
@@ -116,7 +117,9 @@ These options should be specified as an array where each element is either a str
116
117
  return nil
117
118
  end
118
119
  end
119
- @property_hash.update(self.class.nevra_to_multiversion_hash(output))
120
+ # FIXME: We could actually be getting back multiple packages
121
+ # for multilib and this will only return the first such package
122
+ @property_hash.update(self.class.nevra_to_hash(output))
120
123
 
121
124
  @property_hash.dup
122
125
  end
@@ -127,8 +130,8 @@ These options should be specified as an array where each element is either a str
127
130
  @resource.fail _("RPMs must specify a package source")
128
131
  end
129
132
 
130
- cmd = [command(:rpm), "-q", "--qf", "#{self.class::NEVRA_FORMAT}", "-p", source]
131
- h = self.class.nevra_to_multiversion_hash(execute(cmd))
133
+ cmd = [command(:rpm), "-q", "--qf", "'#{self.class::NEVRA_FORMAT}'", "-p", source]
134
+ h = self.class.nevra_to_hash(execute(cmd))
132
135
  h[:ensure]
133
136
  rescue Puppet::ExecutionFailure => e
134
137
  raise Puppet::Error, e.message, e.backtrace
@@ -165,11 +168,7 @@ These options should be specified as an array where each element is either a str
165
168
  if @resource[:name].start_with? nav
166
169
  identifier = nav
167
170
  else
168
- if @resource[:install_only]
169
- identifier = get(:ensure).split(self.class::MULTIVERSION_SEPARATOR).map { |ver| "#{name}-#{ver}" }
170
- else
171
- identifier = name
172
- end
171
+ identifier = name
173
172
  end
174
173
  end
175
174
  # If an arch is specified in the resource, uninstall that arch,
@@ -228,14 +227,14 @@ These options should be specified as an array where each element is either a str
228
227
  str2 = str2.gsub(front_strip_re, '')
229
228
 
230
229
  # "handle the tilde separator, it sorts before everything else"
231
- if str1 =~ /^~/ && str2 =~ /^~/
230
+ if /^~/.match(str1) && /^~/.match(str2)
232
231
  # if they both have ~, strip it
233
232
  str1 = str1[1..-1]
234
233
  str2 = str2[1..-1]
235
234
  next
236
- elsif str1 =~ /^~/
235
+ elsif /^~/.match(str1)
237
236
  return -1
238
- elsif str2 =~ /^~/
237
+ elsif /^~/.match(str2)
239
238
  return 1
240
239
  end
241
240
 
@@ -244,7 +243,7 @@ These options should be specified as an array where each element is either a str
244
243
  # "grab first completely alpha or completely numeric segment"
245
244
  isnum = false
246
245
  # if the first char of str1 is a digit, grab the chunk of continuous digits from each string
247
- if str1 =~ /^[0-9]+/
246
+ if /^[0-9]+/.match(str1)
248
247
  if str1 =~ /^[0-9]+/
249
248
  segment1 = $~.to_s
250
249
  str1 = $~.post_match
@@ -309,12 +308,8 @@ These options should be specified as an array where each element is either a str
309
308
 
310
309
  def insync?(is)
311
310
  return false if [:purged, :absent].include?(is)
312
- return false if is.include?(self.class::MULTIVERSION_SEPARATOR) && !@resource[:install_only]
313
-
314
311
  should = resource[:ensure]
315
- is.split(self.class::MULTIVERSION_SEPARATOR).any? do |version|
316
- 0 == self.rpm_compareEVR(rpm_parse_evr(should), rpm_parse_evr(version))
317
- end
312
+ 0 == rpm_compareEVR(rpm_parse_evr(should), rpm_parse_evr(is))
318
313
  end
319
314
 
320
315
  # parse a rpm "version" specification
@@ -339,7 +334,7 @@ These options should be specified as an array where each element is either a str
339
334
  v = s[0,ri]
340
335
  r = s[ri+1,s.length]
341
336
  if arch = r.scan(ARCH_REGEX)[0]
342
- a = arch.delete('.')
337
+ a = arch.gsub(/\./, '')
343
338
  r.gsub!(ARCH_REGEX, '')
344
339
  end
345
340
  else
@@ -417,37 +412,4 @@ These options should be specified as an array where each element is either a str
417
412
 
418
413
  return hash
419
414
  end
420
-
421
- # @param line [String] multiple lines of rpm package query information
422
- # @return list of [Hash] of NEVRA_FIELDS strings parsed from package info
423
- # or an empty list if we failed to parse
424
- # @api private
425
- def self.nevra_to_multiversion_hash(multiline)
426
- list = []
427
- multiversion_hash = {}
428
- multiline.each_line do |line|
429
- hash = self.nevra_to_hash(line)
430
- if !hash.empty?
431
- if multiversion_hash.empty?
432
- multiversion_hash = hash.dup
433
- next
434
- end
435
-
436
- if multiversion_hash[:name] != hash[:name]
437
- list << multiversion_hash
438
- multiversion_hash = hash.dup
439
- next
440
- end
441
-
442
- if !multiversion_hash[:ensure].include?(hash[:ensure])
443
- multiversion_hash[:ensure].concat("#{self::MULTIVERSION_SEPARATOR}#{hash[:ensure]}")
444
- end
445
- end
446
- end
447
- list << multiversion_hash if multiversion_hash
448
- if list.size == 1
449
- return list[0]
450
- end
451
- return list
452
- end
453
415
  end
@@ -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 = value.tr('/', "\\")
82
+ value = value.gsub('/', "\\")
83
83
  Puppet.debug('Package source parameter contained /s - replaced with \\s')
84
84
  end
85
85
  value
@@ -8,7 +8,7 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
8
8
  This provider supports the `install_options` attribute, which allows command-line flags to be passed to yum.
9
9
  These options should be specified as an array where each element is either a string or a hash."
10
10
 
11
- has_feature :install_options, :versionable, :virtual_packages, :install_only
11
+ has_feature :install_options, :versionable, :virtual_packages
12
12
 
13
13
  commands :cmd => "yum", :rpm => "rpm"
14
14
 
@@ -92,7 +92,7 @@ defaultfor :osfamily => :redhat, :operatingsystemmajrelease => (4..7).to_a
92
92
  updates = Hash.new { |h, k| h[k] = [] }
93
93
  body.split.each_slice(3) do |tuple|
94
94
  break if tuple[0] =~ /^(Obsoleting|Security:|Update)/
95
- break unless tuple[1] =~ /^(?:(\d+):)?(\S+)-(\S+)$/
95
+ break unless tuple[1].match(/^(?:(\d+):)?(\S+)-(\S+)$/)
96
96
  hash = update_to_hash(*tuple[0..1])
97
97
  # Create entries for both the package name without a version and a
98
98
  # version since yum considers those as mostly interchangeable.
@@ -203,10 +203,7 @@ defaultfor :osfamily => :redhat, :operatingsystemmajrelease => (4..7).to_a
203
203
  end
204
204
  current_package = self.query
205
205
  if current_package
206
- if @resource[:install_only]
207
- self.debug "Updating package #{@resource[:name]} from version #{current_package[:ensure]} to #{should} as install_only packages are never downgraded"
208
- operation = update_command
209
- elsif rpm_compareEVR(rpm_parse_evr(should), rpm_parse_evr(current_package[:ensure])) < 0
206
+ if rpm_compareEVR(rpm_parse_evr(should), rpm_parse_evr(current_package[:ensure])) < 0
210
207
  self.debug "Downgrading package #{@resource[:name]} from version #{current_package[:ensure]} to #{should}"
211
208
  operation = :downgrade
212
209
  elsif rpm_compareEVR(rpm_parse_evr(should), rpm_parse_evr(current_package[:ensure])) > 0
@@ -231,11 +228,10 @@ defaultfor :osfamily => :redhat, :operatingsystemmajrelease => (4..7).to_a
231
228
  is = self.query
232
229
  raise Puppet::Error, _("Could not find package %{name}") % { name: self.name } unless is
233
230
 
234
- version = is[:ensure]
235
231
  # FIXME: Should we raise an exception even if should == :latest
236
232
  # and yum updated us to a version other than @param_hash[:ensure] ?
237
- raise Puppet::Error, _("Failed to update to version %{should}, got version %{version} instead") % { should: should, version: version } unless
238
- insync?(version)
233
+ vercmp_result = rpm_compareEVR(rpm_parse_evr(should), rpm_parse_evr(is[:ensure]))
234
+ raise Puppet::Error, _("Failed to update to version %{should}, got version %{version} instead") % { should: should, version: is[:ensure] } if vercmp_result != 0
239
235
  end
240
236
  end
241
237
 
@@ -7,8 +7,6 @@
7
7
  # possibly via a `prefetchV2` method that could take a better data structure.)
8
8
  #
9
9
  # In addition, `Puppet::Provider::Package::properties` calls `query` in the provider.
10
- require 'puppet/provider/package'
11
-
12
10
  # But `query` in the provider depends upon whether a `command` attribute is defined for the resource.
13
11
  # This is a Catch-22.
14
12
  #
@@ -25,25 +23,24 @@ require 'puppet/provider/package'
25
23
  class Puppet::Provider::Package::Targetable < Puppet::Provider::Package
26
24
  # Prefetch our package list, yo.
27
25
  def self.prefetch(packages)
28
- catalog_packages = packages.values.first.catalog.resources.select{ |p| p.provider.class == self }
26
+ catalog_packages = packages.first[1]::catalog::resources.select{ |p| p.provider.class == self }
29
27
  package_commands = catalog_packages.map { |catalog_package| catalog_package::original_parameters[:command] }.uniq
30
28
  package_commands.each do |command|
31
29
  instances(command).each do |instance|
32
30
  catalog_packages.each do |catalog_package|
33
- if catalog_package[:name] == instance.name && catalog_package.original_parameters[:command] == command
31
+ if catalog_package[:name] == instance.name && catalog_package::original_parameters[:command] == command
34
32
  catalog_package.provider = instance
35
- self.debug "Prefetched instance: %{name} via command: %{cmd}" % { name: instance.name, cmd: (command || :default) }
33
+ self.debug "Prefetched instance: %{name} via command: %{command}" % { name: instance.name, cmd: (command || :default)}
36
34
  end
37
35
  end
38
36
  end
39
37
  end
40
- package_commands
41
38
  end
42
39
 
43
40
  # Returns the resource command or provider command.
44
41
 
45
42
  def resource_or_provider_command
46
- resource.original_parameters[:command] || self.class.provider_command
43
+ resource::original_parameters[:command] || self.class.provider_command
47
44
  end
48
45
 
49
46
  # Targetable providers use has_command/is_optional to defer validation of provider suitability.
@@ -71,7 +71,7 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
71
71
 
72
72
  flushed = []
73
73
  begin
74
- @modified.sort_by(&:to_s).uniq.each do |target|
74
+ @modified.sort { |a,b| a.to_s <=> b.to_s }.uniq.each do |target|
75
75
  Puppet.debug "Flushing #{@resource_type.name} provider target #{target}"
76
76
  flushed << target
77
77
  flush_target(target)
@@ -46,8 +46,14 @@ Puppet::Type.type(:service).provide :daemontools, :parent => :base do
46
46
 
47
47
  # Determine the daemon path.
48
48
  def defpath
49
- @defpath ||= ["/var/lib/service", "/etc"].find do |path|
50
- Puppet::FileSystem.exist?(path) && FileTest.directory?(path)
49
+ unless @defpath
50
+ ["/var/lib/service", "/etc"].each do |path|
51
+ if Puppet::FileSystem.exist?(path)
52
+ @defpath = path
53
+ break
54
+ end
55
+ end
56
+ raise "Could not find the daemon directory (tested [/var/lib/service,/etc])" unless @defpath
51
57
  end
52
58
  @defpath
53
59
  end
@@ -59,10 +65,6 @@ Puppet::Type.type(:service).provide :daemontools, :parent => :base do
59
65
  # ie enabled or not
60
66
  def self.instances
61
67
  path = self.defpath
62
- unless path
63
- Puppet.info("#{self.name} is unsuitable because service directory is nil")
64
- return
65
- end
66
68
  unless FileTest.directory?(path)
67
69
  Puppet.notice "Service path #{path} does not exist"
68
70
  return
@@ -107,9 +109,7 @@ Puppet::Type.type(:service).provide :daemontools, :parent => :base do
107
109
  # note that this path can be overridden in the resource
108
110
  # definition
109
111
  def daemon
110
- path = resource[:path]
111
- raise Puppet::Error.new("#{self.class.name} must specify a path for daemon directory") unless path
112
- File.join(path, resource[:name])
112
+ File.join(resource[:path], resource[:name])
113
113
  end
114
114
 
115
115
  def status
@@ -240,20 +240,12 @@ Puppet::Type.type(:service).provide :launchd, :parent => :base do
240
240
  def status
241
241
  if @resource && ((@resource[:hasstatus] == :false) || (@resource[:status]))
242
242
  return super
243
- elsif @property_hash[:status].nil?
244
- # property_hash was flushed so the service changed status
245
- service_name = @resource[:name]
246
- # Updating services with new statuses
247
- job_list = self.class.job_list
248
- # if job is present in job_list, return its status
249
- if job_list.key?(service_name)
250
- job_list[service_name]
251
- # if job is no longer present in job_list, it was stopped
243
+ else
244
+ if @property_hash[:status].nil?
245
+ :absent
252
246
  else
253
- :stopped
247
+ @property_hash[:status]
254
248
  end
255
- else
256
- @property_hash[:status]
257
249
  end
258
250
  end
259
251
 
@@ -321,14 +313,7 @@ Puppet::Type.type(:service).provide :launchd, :parent => :base do
321
313
  job_plist_disabled = nil
322
314
  overrides_disabled = nil
323
315
 
324
- begin
325
- _, job_plist = plist_from_label(resource[:name])
326
- rescue Puppet::Error => err
327
- # if job does not exist, log the error and return false as on other platforms
328
- Puppet.log_exception(err)
329
- return :false
330
- end
331
-
316
+ _, job_plist = plist_from_label(resource[:name])
332
317
  job_plist_disabled = job_plist["Disabled"] if job_plist.has_key?("Disabled")
333
318
 
334
319
  if FileTest.file?(self.class.launchd_overrides) and overrides = self.class.read_overrides
@@ -79,7 +79,7 @@ Puppet::Type.type(:service).provide :openbsd, :parent => :init do
79
79
  def running?
80
80
  output = execute([command(:rcctl), "check", @resource[:name]],
81
81
  :failonfail => false, :combine => false, :squelch => false).chomp
82
- return true if output =~ /\(ok\)/
82
+ return true if output.match(/\(ok\)/)
83
83
  end
84
84
 
85
85
  # Uses the wrapper to prevent failure when the service is not running;
@@ -17,7 +17,7 @@ Puppet::Type.type(:service).provide :rcng, :parent => :bsd do
17
17
  if Puppet::FileSystem.exist?(rcfile)
18
18
  File.open(rcfile).readlines.each do |line|
19
19
  # Now look for something that looks like "service=${service:=YES}" or "service=YES"
20
- if line =~ /^\s*#{@resource[:name]}=(?:YES|\${#{@resource[:name]}:=YES})/
20
+ if line.match(/^\s*#{@resource[:name]}=(?:YES|\${#{@resource[:name]}:=YES})/)
21
21
  return :true
22
22
  end
23
23
  end
@@ -34,7 +34,7 @@ Puppet::Type.type(:service).provide :rcng, :parent => :bsd do
34
34
  if Puppet::FileSystem.exist?(rcfile)
35
35
  newcontents = []
36
36
  File.open(rcfile).readlines.each do |line|
37
- if line =~ /^\s*#{@resource[:name]}=(NO|\$\{#{@resource[:name]}:NO\})/
37
+ if line.match(/^\s*#{@resource[:name]}=(NO|\$\{#{@resource[:name]}:NO\})/)
38
38
  line = "#{@resource[:name]}=${#{@resource[:name]}:=YES}"
39
39
  end
40
40
  newcontents.push(line)
@@ -40,8 +40,14 @@ Puppet::Type.type(:service).provide :runit, :parent => :daemontools do
40
40
  # this is necessary to autodetect a valid resource
41
41
  # default path, since there is no standard for such directory.
42
42
  def defpath
43
- @defpath ||= ["/var/lib/service", "/etc/sv"].find do |path|
44
- Puppet::FileSystem.exist?(path) && FileTest.directory?(path)
43
+ unless @defpath
44
+ ["/etc/sv", "/var/lib/service"].each do |path|
45
+ if Puppet::FileSystem.exist?(path)
46
+ @defpath = path
47
+ break
48
+ end
49
+ end
50
+ raise "Could not find the daemon directory (tested [/etc/sv,/var/lib/service])" unless @defpath
45
51
  end
46
52
  @defpath
47
53
  end
@@ -1,7 +1,5 @@
1
1
  # Manage systemd services using systemctl
2
2
 
3
- require 'puppet/file_system'
4
-
5
3
  Puppet::Type.type(:service).provide :systemd, :parent => :base do
6
4
  desc "Manages `systemd` services using `systemctl`.
7
5
 
@@ -11,7 +9,14 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
11
9
 
12
10
  commands :systemctl => "systemctl"
13
11
 
14
- confine :true => Puppet::FileSystem.exist?('/proc/1/comm') && Puppet::FileSystem.read('/proc/1/comm').include?('systemd')
12
+ if Facter.value(:osfamily).downcase == 'debian'
13
+ # With multiple init systems on Debian, it is possible to have
14
+ # pieces of systemd around (e.g. systemctl) but not really be
15
+ # using systemd. We do not do this on other platforms as it can
16
+ # cause issues when running in a chroot without /run mounted
17
+ # (PUP-5577)
18
+ confine :exists => "/run/systemd/system"
19
+ end
15
20
 
16
21
  defaultfor :osfamily => [:archlinux]
17
22
  defaultfor :osfamily => :redhat, :operatingsystemmajrelease => ["7", "8"]
@@ -19,8 +24,8 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
19
24
  defaultfor :osfamily => :suse
20
25
  defaultfor :osfamily => :coreos
21
26
  defaultfor :operatingsystem => :amazon, :operatingsystemmajrelease => ["2"]
22
- defaultfor :operatingsystem => :debian
23
- notdefaultfor :operatingsystem => :debian, :operatingsystemmajrelease => ["5", "6", "7"] # These are using the "debian" method
27
+ defaultfor :operatingsystem => :debian, :operatingsystemmajrelease => ["8", "stretch/sid", "9", "buster/sid"]
28
+
24
29
  defaultfor :operatingsystem => :LinuxMint
25
30
  notdefaultfor :operatingsystem => :LinuxMint, :operatingsystemmajrelease => ["10", "11", "12", "13", "14", "15", "16", "17"] # These are using upstart
26
31
  defaultfor :operatingsystem => :ubuntu
@@ -44,7 +49,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
44
49
  # in the provider's believed state of the service and the actual state.
45
50
  # @param action [String,Symbol] One of 'enable', 'disable', 'mask' or 'unmask'
46
51
  def systemctl_change_enable(action)
47
- output = systemctl(action, '--', @resource[:name])
52
+ output = systemctl(action, @resource[:name])
48
53
  rescue
49
54
  raise Puppet::Error, "Could not #{action} #{self.name}: #{output}", $!.backtrace
50
55
  ensure
@@ -57,7 +62,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
57
62
 
58
63
  def get_start_link_count
59
64
  # Start links don't include '.service'. Just search for the service name.
60
- if @resource[:name] =~ /\.service/
65
+ if @resource[:name].match(/\.service/)
61
66
  link_name = @resource[:name].split('.')[0]
62
67
  else
63
68
  link_name = @resource[:name]
@@ -68,7 +73,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
68
73
 
69
74
  def cached_enabled?
70
75
  return @cached_enabled if @cached_enabled
71
- cmd = [command(:systemctl), 'is-enabled', '--', @resource[:name]]
76
+ cmd = [command(:systemctl), 'is-enabled', @resource[:name]]
72
77
  @cached_enabled = execute(cmd, :failonfail => false).strip
73
78
  end
74
79
 
@@ -87,7 +92,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
87
92
  # The indirect state indicates that the unit is not enabled.
88
93
  return :false if output == 'indirect'
89
94
  return :true if (code == 0)
90
- if (output.empty?) && (code > 0) && (Facter.value(:osfamily).casecmp('debian').zero?)
95
+ if (output.empty?) && (code > 0) && (Facter.value(:osfamily).downcase == 'debian')
91
96
  ret = debian_enabled?
92
97
  return ret if ret
93
98
  end
@@ -127,7 +132,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
127
132
  # This function is called only on start & restart unit options.
128
133
  # Reference: (PUP-3483) Systemd provider doesn't scan for changed units
129
134
  def daemon_reload?
130
- cmd = [command(:systemctl), 'show', '--property=NeedDaemonReload', '--', @resource[:name]]
135
+ cmd = [command(:systemctl), 'show', @resource[:name], '--property=NeedDaemonReload']
131
136
  daemon_reload = execute(cmd, :failonfail => false).strip.split('=').last
132
137
  if daemon_reload == 'yes'
133
138
  daemon_reload_cmd = [command(:systemctl), 'daemon-reload']
@@ -150,20 +155,20 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
150
155
  end
151
156
 
152
157
  def restartcmd
153
- [command(:systemctl), "restart", '--', @resource[:name]]
158
+ [command(:systemctl), "restart", @resource[:name]]
154
159
  end
155
160
 
156
161
  def startcmd
157
162
  self.unmask
158
- [command(:systemctl), "start", '--', @resource[:name]]
163
+ [command(:systemctl), "start", @resource[:name]]
159
164
  end
160
165
 
161
166
  def stopcmd
162
- [command(:systemctl), "stop", '--', @resource[:name]]
167
+ [command(:systemctl), "stop", @resource[:name]]
163
168
  end
164
169
 
165
170
  def statuscmd
166
- [command(:systemctl), "is-active", '--', @resource[:name]]
171
+ [command(:systemctl), "is-active", @resource[:name]]
167
172
  end
168
173
 
169
174
  def restart