puppet 6.10.1 → 6.11.0

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

Potentially problematic release.


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

Files changed (242) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +4 -4
  3. data/Gemfile.lock +20 -12
  4. data/ext/project_data.yaml +3 -2
  5. data/ext/regexp_nodes/regexp_nodes.rb +4 -4
  6. data/ext/windows/service/daemon.rb +33 -8
  7. data/install.rb +6 -6
  8. data/lib/puppet.rb +8 -0
  9. data/lib/puppet/application.rb +1 -1
  10. data/lib/puppet/application/agent.rb +3 -0
  11. data/lib/puppet/application/apply.rb +2 -2
  12. data/lib/puppet/application/describe.rb +3 -9
  13. data/lib/puppet/application/device.rb +3 -0
  14. data/lib/puppet/application/doc.rb +1 -1
  15. data/lib/puppet/application/lookup.rb +1 -1
  16. data/lib/puppet/application/script.rb +2 -2
  17. data/lib/puppet/application/ssl.rb +25 -21
  18. data/lib/puppet/configurer.rb +42 -0
  19. data/lib/puppet/configurer/downloader.rb +2 -6
  20. data/lib/puppet/context/trusted_information.rb +42 -4
  21. data/lib/puppet/defaults.rb +19 -4
  22. data/lib/puppet/face/module/list.rb +5 -5
  23. data/lib/puppet/face/module/search.rb +1 -1
  24. data/lib/puppet/face/module/uninstall.rb +1 -1
  25. data/lib/puppet/face/module/upgrade.rb +1 -1
  26. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  27. data/lib/puppet/file_system.rb +0 -8
  28. data/lib/puppet/file_system/memory_file.rb +1 -1
  29. data/lib/puppet/file_system/posix.rb +3 -2
  30. data/lib/puppet/forge.rb +3 -3
  31. data/lib/puppet/functions.rb +1 -2
  32. data/lib/puppet/gettext/module_translations.rb +1 -1
  33. data/lib/puppet/graph/rb_tree_map.rb +2 -2
  34. data/lib/puppet/graph/simple_graph.rb +4 -3
  35. data/lib/puppet/http.rb +29 -0
  36. data/lib/puppet/http/client.rb +156 -0
  37. data/lib/puppet/http/errors.rb +30 -0
  38. data/lib/puppet/http/redirector.rb +48 -0
  39. data/lib/puppet/http/resolver.rb +5 -0
  40. data/lib/puppet/http/resolver/settings.rb +5 -0
  41. data/lib/puppet/http/resolver/srv.rb +13 -0
  42. data/lib/puppet/http/response.rb +34 -0
  43. data/lib/puppet/http/retry_after_handler.rb +47 -0
  44. data/lib/puppet/http/service.rb +18 -0
  45. data/lib/puppet/http/service/ca.rb +49 -0
  46. data/lib/puppet/http/session.rb +55 -0
  47. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  48. data/lib/puppet/indirector/hiera.rb +2 -0
  49. data/lib/puppet/indirector/request.rb +1 -1
  50. data/lib/puppet/indirector/resource/ral.rb +1 -3
  51. data/lib/puppet/indirector/resource/validator.rb +1 -1
  52. data/lib/puppet/interface.rb +2 -1
  53. data/lib/puppet/interface/documentation.rb +1 -1
  54. data/lib/puppet/loaders.rb +0 -1
  55. data/lib/puppet/metatype/manager.rb +1 -1
  56. data/lib/puppet/module.rb +1 -1
  57. data/lib/puppet/module/task.rb +20 -4
  58. data/lib/puppet/module_tool/applications/installer.rb +1 -1
  59. data/lib/puppet/module_tool/applications/uninstaller.rb +3 -3
  60. data/lib/puppet/module_tool/metadata.rb +1 -1
  61. data/lib/puppet/module_tool/shared_behaviors.rb +4 -4
  62. data/lib/puppet/module_tool/tar/mini.rb +1 -1
  63. data/lib/puppet/network/http.rb +2 -6
  64. data/lib/puppet/network/http/api/indirected_routes.rb +12 -11
  65. data/lib/puppet/network/http/connection.rb +10 -12
  66. data/lib/puppet/network/http/pool.rb +2 -0
  67. data/lib/puppet/network/http/site.rb +5 -1
  68. data/lib/puppet/network/resolver.rb +4 -4
  69. data/lib/puppet/node/environment.rb +4 -2
  70. data/lib/puppet/pal/pal_impl.rb +2 -2
  71. data/lib/puppet/parser/ast.rb +1 -1
  72. data/lib/puppet/parser/ast/resourceparam.rb +1 -1
  73. data/lib/puppet/parser/functions.rb +1 -1
  74. data/lib/puppet/parser/scope.rb +8 -7
  75. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
  76. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
  77. data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -2
  78. data/lib/puppet/pops/evaluator/runtime3_support.rb +4 -7
  79. data/lib/puppet/pops/loader/module_loaders.rb +1 -1
  80. data/lib/puppet/pops/loader/task_instantiator.rb +4 -0
  81. data/lib/puppet/pops/loaders.rb +1 -1
  82. data/lib/puppet/pops/lookup/hiera_config.rb +1 -0
  83. data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
  84. data/lib/puppet/pops/merge_strategy.rb +22 -18
  85. data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
  86. data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
  87. data/lib/puppet/pops/parser/locator.rb +1 -1
  88. data/lib/puppet/pops/parser/pn_parser.rb +17 -16
  89. data/lib/puppet/pops/puppet_stack.rb +52 -48
  90. data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
  91. data/lib/puppet/pops/types/p_uri_type.rb +1 -1
  92. data/lib/puppet/pops/types/string_converter.rb +10 -10
  93. data/lib/puppet/pops/types/types.rb +3 -3
  94. data/lib/puppet/property.rb +1 -1
  95. data/lib/puppet/property/ensure.rb +1 -1
  96. data/lib/puppet/provider/exec.rb +6 -2
  97. data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
  98. data/lib/puppet/provider/nameservice/pw.rb +2 -2
  99. data/lib/puppet/provider/package/apt.rb +5 -1
  100. data/lib/puppet/provider/package/dnfmodule.rb +87 -0
  101. data/lib/puppet/provider/package/dpkg.rb +31 -17
  102. data/lib/puppet/provider/package/openbsd.rb +1 -1
  103. data/lib/puppet/provider/package/pip.rb +34 -9
  104. data/lib/puppet/provider/package/portage.rb +1 -1
  105. data/lib/puppet/provider/package/rpm.rb +5 -5
  106. data/lib/puppet/provider/package/windows/package.rb +1 -1
  107. data/lib/puppet/provider/package/yum.rb +1 -1
  108. data/lib/puppet/provider/parsedfile.rb +1 -1
  109. data/lib/puppet/provider/service/daemontools.rb +9 -9
  110. data/lib/puppet/provider/service/openbsd.rb +1 -1
  111. data/lib/puppet/provider/service/rcng.rb +2 -2
  112. data/lib/puppet/provider/service/runit.rb +2 -8
  113. data/lib/puppet/provider/service/systemd.rb +10 -10
  114. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  115. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  116. data/lib/puppet/provider/user/useradd.rb +22 -13
  117. data/lib/puppet/provider/user/windows_adsi.rb +4 -5
  118. data/lib/puppet/reference/indirection.rb +2 -2
  119. data/lib/puppet/reference/metaparameter.rb +1 -3
  120. data/lib/puppet/reference/providers.rb +1 -1
  121. data/lib/puppet/reference/type.rb +3 -9
  122. data/lib/puppet/reports.rb +1 -1
  123. data/lib/puppet/resource.rb +1 -1
  124. data/lib/puppet/resource/catalog.rb +1 -1
  125. data/lib/puppet/rest/errors.rb +1 -0
  126. data/lib/puppet/rest/response.rb +1 -0
  127. data/lib/puppet/rest/route.rb +1 -0
  128. data/lib/puppet/rest/routes.rb +3 -0
  129. data/lib/puppet/runtime.rb +25 -0
  130. data/lib/puppet/settings.rb +3 -3
  131. data/lib/puppet/settings/environment_conf.rb +1 -0
  132. data/lib/puppet/ssl/host.rb +1 -1
  133. data/lib/puppet/ssl/oids.rb +1 -1
  134. data/lib/puppet/ssl/state_machine.rb +23 -15
  135. data/lib/puppet/test/test_helper.rb +1 -1
  136. data/lib/puppet/transaction/report.rb +1 -1
  137. data/lib/puppet/trusted_external.rb +13 -0
  138. data/lib/puppet/type.rb +1 -3
  139. data/lib/puppet/type/exec.rb +7 -3
  140. data/lib/puppet/type/file.rb +1 -2
  141. data/lib/puppet/type/file/source.rb +2 -2
  142. data/lib/puppet/type/package.rb +10 -3
  143. data/lib/puppet/type/schedule.rb +1 -1
  144. data/lib/puppet/type/service.rb +1 -1
  145. data/lib/puppet/util.rb +2 -2
  146. data/lib/puppet/util/command_line/trollop.rb +1 -1
  147. data/lib/puppet/util/http_proxy.rb +2 -10
  148. data/lib/puppet/util/log.rb +2 -2
  149. data/lib/puppet/util/log/destinations.rb +2 -2
  150. data/lib/puppet/util/logging.rb +2 -2
  151. data/lib/puppet/util/metric.rb +2 -2
  152. data/lib/puppet/util/platform.rb +15 -4
  153. data/lib/puppet/util/provider_features.rb +2 -4
  154. data/lib/puppet/util/rdoc.rb +1 -1
  155. data/lib/puppet/util/reference.rb +1 -1
  156. data/lib/puppet/util/resource_template.rb +1 -1
  157. data/lib/puppet/util/selinux.rb +3 -1
  158. data/lib/puppet/util/windows/registry.rb +7 -5
  159. data/lib/puppet/vendor.rb +1 -1
  160. data/lib/puppet/vendor/require_vendored.rb +0 -1
  161. data/lib/puppet/version.rb +1 -1
  162. data/lib/puppet/x509/cert_provider.rb +4 -1
  163. data/locales/puppet.pot +279 -203
  164. data/man/man5/puppet.conf.5 +30 -8
  165. data/man/man8/puppet-agent.8 +4 -1
  166. data/man/man8/puppet-apply.8 +1 -1
  167. data/man/man8/puppet-catalog.8 +1 -1
  168. data/man/man8/puppet-config.8 +1 -1
  169. data/man/man8/puppet-describe.8 +1 -1
  170. data/man/man8/puppet-device.8 +1 -1
  171. data/man/man8/puppet-doc.8 +1 -1
  172. data/man/man8/puppet-epp.8 +1 -1
  173. data/man/man8/puppet-facts.8 +1 -1
  174. data/man/man8/puppet-filebucket.8 +1 -1
  175. data/man/man8/puppet-generate.8 +1 -1
  176. data/man/man8/puppet-help.8 +1 -1
  177. data/man/man8/puppet-key.8 +1 -1
  178. data/man/man8/puppet-lookup.8 +1 -1
  179. data/man/man8/puppet-man.8 +1 -1
  180. data/man/man8/puppet-module.8 +1 -1
  181. data/man/man8/puppet-node.8 +1 -1
  182. data/man/man8/puppet-parser.8 +1 -1
  183. data/man/man8/puppet-plugin.8 +1 -1
  184. data/man/man8/puppet-report.8 +1 -1
  185. data/man/man8/puppet-resource.8 +1 -1
  186. data/man/man8/puppet-script.8 +1 -1
  187. data/man/man8/puppet-ssl.8 +1 -1
  188. data/man/man8/puppet-status.8 +1 -1
  189. data/man/man8/puppet.8 +2 -2
  190. data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list-installed.txt +11 -0
  191. data/spec/integration/configurer_spec.rb +52 -0
  192. data/spec/lib/puppet/certificate_factory.rb +2 -2
  193. data/spec/spec_helper.rb +24 -0
  194. data/spec/unit/application/device_spec.rb +6 -0
  195. data/spec/unit/application/ssl_spec.rb +4 -7
  196. data/spec/unit/configurer_spec.rb +1 -0
  197. data/spec/unit/context/trusted_information_spec.rb +41 -2
  198. data/spec/unit/http/client_spec.rb +440 -0
  199. data/spec/unit/http/resolver_spec.rb +45 -0
  200. data/spec/unit/http/service/ca_spec.rb +106 -0
  201. data/spec/unit/http/service_spec.rb +32 -0
  202. data/spec/unit/http/session_spec.rb +102 -0
  203. data/spec/unit/indirector/resource/ral_spec.rb +4 -4
  204. data/spec/unit/network/http/connection_spec.rb +119 -145
  205. data/spec/unit/network/http/site_spec.rb +7 -0
  206. data/spec/unit/parser/scope_spec.rb +10 -0
  207. data/spec/unit/pops/loaders/loaders_spec.rb +13 -2
  208. data/spec/unit/pops/loaders/module_loaders_spec.rb +37 -0
  209. data/spec/unit/provider/exec_spec.rb +209 -0
  210. data/spec/unit/provider/package/dnfmodule_spec.rb +186 -0
  211. data/spec/unit/provider/package/dpkg_spec.rb +238 -78
  212. data/spec/unit/provider/package/pip_spec.rb +51 -6
  213. data/spec/unit/provider/service/daemontools_spec.rb +24 -0
  214. data/spec/unit/provider/service/runit_spec.rb +24 -0
  215. data/spec/unit/provider/service/systemd_spec.rb +25 -25
  216. data/spec/unit/provider/user/useradd_spec.rb +46 -0
  217. data/spec/unit/ssl/host_spec.rb +0 -5
  218. data/spec/unit/ssl/state_machine_spec.rb +16 -10
  219. data/spec/unit/type/exec_spec.rb +6 -12
  220. data/spec/unit/type/file_spec.rb +9 -4
  221. data/spec/unit/type/package_spec.rb +5 -0
  222. data/spec/unit/util/execution_spec.rb +16 -0
  223. data/spec/unit/util/http_proxy_spec.rb +79 -27
  224. data/spec/unit/util/log/destinations_spec.rb +7 -3
  225. metadata +45 -22
  226. data/lib/puppet/pops/loader/null_loader.rb +0 -60
  227. data/lib/puppet/vendor/deep_merge/CHANGELOG +0 -45
  228. data/lib/puppet/vendor/deep_merge/Gemfile +0 -3
  229. data/lib/puppet/vendor/deep_merge/LICENSE +0 -21
  230. data/lib/puppet/vendor/deep_merge/PUPPET_README.md +0 -6
  231. data/lib/puppet/vendor/deep_merge/README.md +0 -113
  232. data/lib/puppet/vendor/deep_merge/Rakefile +0 -19
  233. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +0 -35
  234. data/lib/puppet/vendor/deep_merge/lib/deep_merge.rb +0 -2
  235. data/lib/puppet/vendor/deep_merge/lib/deep_merge/core.rb +0 -210
  236. data/lib/puppet/vendor/deep_merge/lib/deep_merge/deep_merge_hash.rb +0 -28
  237. data/lib/puppet/vendor/deep_merge/lib/deep_merge/rails_compat.rb +0 -27
  238. data/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +0 -608
  239. data/lib/puppet/vendor/load_deep_merge.rb +0 -1
  240. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +0 -24
  241. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +0 -24
  242. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +0 -24
@@ -177,7 +177,7 @@ Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Packa
177
177
  package_sets << package_set.to_s.strip
178
178
  end
179
179
 
180
- if @resource[:name].match(/^@/)
180
+ if @resource[:name] =~ /^@/
181
181
  if package_sets.include?(@resource[:name][1..-1].to_s)
182
182
  return({:name => "#{@resource[:name]}", :ensure => '9999', :version_available => nil, :installed_versions => nil, :installable_versions => "9999,"})
183
183
  end
@@ -230,14 +230,14 @@ These options should be specified as an array where each element is either a str
230
230
  str2 = str2.gsub(front_strip_re, '')
231
231
 
232
232
  # "handle the tilde separator, it sorts before everything else"
233
- if /^~/.match(str1) && /^~/.match(str2)
233
+ if str1 =~ /^~/ && str2 =~ /^~/
234
234
  # if they both have ~, strip it
235
235
  str1 = str1[1..-1]
236
236
  str2 = str2[1..-1]
237
237
  next
238
- elsif /^~/.match(str1)
238
+ elsif str1 =~ /^~/
239
239
  return -1
240
- elsif /^~/.match(str2)
240
+ elsif str2 =~ /^~/
241
241
  return 1
242
242
  end
243
243
 
@@ -246,7 +246,7 @@ These options should be specified as an array where each element is either a str
246
246
  # "grab first completely alpha or completely numeric segment"
247
247
  isnum = false
248
248
  # if the first char of str1 is a digit, grab the chunk of continuous digits from each string
249
- if /^[0-9]+/.match(str1)
249
+ if str1 =~ /^[0-9]+/
250
250
  if str1 =~ /^[0-9]+/
251
251
  segment1 = $~.to_s
252
252
  str1 = $~.post_match
@@ -342,7 +342,7 @@ These options should be specified as an array where each element is either a str
342
342
  r = s[ri+1,s.length]
343
343
  arch = r.scan(ARCH_REGEX)[0]
344
344
  if arch
345
- a = arch.gsub(/\./, '')
345
+ a = arch.delete('.')
346
346
  r.gsub!(ARCH_REGEX, '')
347
347
  end
348
348
  else
@@ -80,7 +80,7 @@ class Puppet::Provider::Package::Windows
80
80
 
81
81
  def self.replace_forward_slashes(value)
82
82
  if value.include?('/')
83
- value = value.gsub('/', "\\")
83
+ value = value.tr('/', "\\")
84
84
  Puppet.debug('Package source parameter contained /s - replaced with \\s')
85
85
  end
86
86
  value
@@ -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].match(/^(?:(\d+):)?(\S+)-(\S+)$/)
95
+ break unless tuple[1] =~ /^(?:(\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.
@@ -74,7 +74,7 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
74
74
 
75
75
  flushed = []
76
76
  begin
77
- @modified.sort { |a,b| a.to_s <=> b.to_s }.uniq.each do |target|
77
+ @modified.sort_by(&:to_s).uniq.each do |target|
78
78
  Puppet.debug "Flushing #{@resource_type.name} provider target #{target}"
79
79
  flushed << target
80
80
  flush_target(target)
@@ -46,14 +46,8 @@ Puppet::Type.type(:service).provide :daemontools, :parent => :base do
46
46
 
47
47
  # Determine the daemon path.
48
48
  def defpath
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
49
+ @defpath ||= ["/var/lib/service", "/etc"].find do |path|
50
+ Puppet::FileSystem.exist?(path) && FileTest.directory?(path)
57
51
  end
58
52
  @defpath
59
53
  end
@@ -65,6 +59,10 @@ Puppet::Type.type(:service).provide :daemontools, :parent => :base do
65
59
  # ie enabled or not
66
60
  def self.instances
67
61
  path = self.defpath
62
+ unless path
63
+ Puppet.info("#{self.name} is unsuitable because service directory is nil")
64
+ return
65
+ end
68
66
  unless FileTest.directory?(path)
69
67
  Puppet.notice "Service path #{path} does not exist"
70
68
  return
@@ -109,7 +107,9 @@ Puppet::Type.type(:service).provide :daemontools, :parent => :base do
109
107
  # note that this path can be overridden in the resource
110
108
  # definition
111
109
  def daemon
112
- File.join(resource[:path], resource[:name])
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])
113
113
  end
114
114
 
115
115
  def status
@@ -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.match(/\(ok\)/)
82
+ return true if output =~ /\(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.match(/^\s*#{@resource[:name]}=(?:YES|\${#{@resource[:name]}:=YES})/)
20
+ if line =~ /^\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.match(/^\s*#{@resource[:name]}=(NO|\$\{#{@resource[:name]}:NO\})/)
37
+ if line =~ /^\s*#{@resource[:name]}=(NO|\$\{#{@resource[:name]}:NO\})/
38
38
  line = "#{@resource[:name]}=${#{@resource[:name]}:=YES}"
39
39
  end
40
40
  newcontents.push(line)
@@ -40,14 +40,8 @@ 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
- 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
43
+ @defpath ||= ["/var/lib/service", "/etc/sv"].find do |path|
44
+ Puppet::FileSystem.exist?(path) && FileTest.directory?(path)
51
45
  end
52
46
  @defpath
53
47
  end
@@ -44,7 +44,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
44
44
  # in the provider's believed state of the service and the actual state.
45
45
  # @param action [String,Symbol] One of 'enable', 'disable', 'mask' or 'unmask'
46
46
  def systemctl_change_enable(action)
47
- output = systemctl(action, @resource[:name])
47
+ output = systemctl(action, '--', @resource[:name])
48
48
  rescue
49
49
  raise Puppet::Error, "Could not #{action} #{self.name}: #{output}", $!.backtrace
50
50
  ensure
@@ -57,7 +57,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
57
57
 
58
58
  def get_start_link_count
59
59
  # Start links don't include '.service'. Just search for the service name.
60
- if @resource[:name].match(/\.service/)
60
+ if @resource[:name] =~ /\.service/
61
61
  link_name = @resource[:name].split('.')[0]
62
62
  else
63
63
  link_name = @resource[:name]
@@ -68,7 +68,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
68
68
 
69
69
  def cached_enabled?
70
70
  return @cached_enabled if @cached_enabled
71
- cmd = [command(:systemctl), 'is-enabled', @resource[:name]]
71
+ cmd = [command(:systemctl), 'is-enabled', '--', @resource[:name]]
72
72
  @cached_enabled = execute(cmd, :failonfail => false).strip
73
73
  end
74
74
 
@@ -87,7 +87,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
87
87
  # The indirect state indicates that the unit is not enabled.
88
88
  return :false if output == 'indirect'
89
89
  return :true if (code == 0)
90
- if (output.empty?) && (code > 0) && (Facter.value(:osfamily).downcase == 'debian')
90
+ if (output.empty?) && (code > 0) && (Facter.value(:osfamily).casecmp('debian').zero?)
91
91
  ret = debian_enabled?
92
92
  return ret if ret
93
93
  end
@@ -127,10 +127,10 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
127
127
  # This function is called only on start & restart unit options.
128
128
  # Reference: (PUP-3483) Systemd provider doesn't scan for changed units
129
129
  def daemon_reload?
130
- cmd = [command(:systemctl), 'show', @resource[:name], '--property=NeedDaemonReload']
130
+ cmd = [command(:systemctl), 'show', '--', @resource[:name], '--property=NeedDaemonReload']
131
131
  daemon_reload = execute(cmd, :failonfail => false).strip.split('=').last
132
132
  if daemon_reload == 'yes'
133
- daemon_reload_cmd = [command(:systemctl), 'daemon-reload']
133
+ daemon_reload_cmd = [command(:systemctl), '--', 'daemon-reload']
134
134
  execute(daemon_reload_cmd, :failonfail => false)
135
135
  end
136
136
  end
@@ -150,20 +150,20 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
150
150
  end
151
151
 
152
152
  def restartcmd
153
- [command(:systemctl), "restart", @resource[:name]]
153
+ [command(:systemctl), "restart", '--', @resource[:name]]
154
154
  end
155
155
 
156
156
  def startcmd
157
157
  self.unmask
158
- [command(:systemctl), "start", @resource[:name]]
158
+ [command(:systemctl), "start", '--', @resource[:name]]
159
159
  end
160
160
 
161
161
  def stopcmd
162
- [command(:systemctl), "stop", @resource[:name]]
162
+ [command(:systemctl), "stop", '--', @resource[:name]]
163
163
  end
164
164
 
165
165
  def statuscmd
166
- [command(:systemctl), "is-active", @resource[:name]]
166
+ [command(:systemctl), "is-active", '--', @resource[:name]]
167
167
  end
168
168
 
169
169
  def restart
@@ -504,7 +504,7 @@ Puppet::Type.type(:user).provide :directoryservice do
504
504
  def next_system_id(min_id=20)
505
505
  dscl_output = dscl '.', '-list', '/Users', 'uid'
506
506
  # We're ok with throwing away negative uids here. Also, remove nil values.
507
- user_ids = dscl_output.split.compact.collect { |l| l.to_i if l.match(/^\d+$/) }
507
+ user_ids = dscl_output.split.compact.collect { |l| l.to_i if l =~ /^\d+$/ }
508
508
  ids = user_ids.compact!.sort! { |a,b| a.to_f <=> b.to_f }
509
509
  # We're just looking for an unused id in our sorted array.
510
510
  ids.each_index do |i|
@@ -36,7 +36,7 @@ Puppet::Type.type(:user).provide :user_role_add, :parent => :useradd, :source =>
36
36
  has_features :manages_homedir, :allows_duplicates, :manages_solaris_rbac, :manages_passwords, :manages_password_age, :manages_shell
37
37
 
38
38
  def check_valid_shell
39
- unless File.exists?(@resource.should(:shell))
39
+ unless File.exist?(@resource.should(:shell))
40
40
  raise(Puppet::Error, "Shell #{@resource.should(:shell)} must exist")
41
41
  end
42
42
  unless File.executable?(@resource.should(:shell).to_s)
@@ -55,35 +55,44 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
55
55
  get(:uid)
56
56
  end
57
57
 
58
+ def comment
59
+ return localcomment if @resource.forcelocal?
60
+ get(:comment)
61
+ end
62
+
58
63
  def finduser(key, value)
59
64
  passwd_file = "/etc/passwd"
60
- passwd_keys = ['account', 'password', 'uid', 'gid', 'gecos', 'directory', 'shell']
65
+ passwd_keys = [:account, :password, :uid, :gid, :gecos, :directory, :shell]
61
66
  index = passwd_keys.index(key)
62
67
  File.open(passwd_file) do |f|
63
68
  f.each_line do |line|
64
- user = line.split(":")
65
- if user[index] == value
66
- f.close
67
- return user
68
- end
69
+ user = line.split(":")
70
+ if user[index] == value
71
+ return Hash[passwd_keys.zip(user)]
72
+ end
69
73
  end
70
74
  end
71
75
  false
72
76
  end
73
77
 
74
78
  def local_username
75
- finduser('uid', @resource.uid)
79
+ finduser(:uid, @resource.uid)
76
80
  end
77
81
 
78
82
  def localuid
79
- user = finduser('account', resource[:name])
80
- return user[2] if user
83
+ user = finduser(:account, resource[:name])
84
+ return user[:uid] if user
81
85
  false
82
86
  end
83
87
 
88
+ def localcomment
89
+ user = finduser(:account, resource[:name])
90
+ user[:gecos]
91
+ end
92
+
84
93
  def shell=(value)
85
94
  check_valid_shell
86
- set("shell", value)
95
+ set(:shell, value)
87
96
  end
88
97
 
89
98
  verify :gid, "GID must be an integer" do |value|
@@ -106,8 +115,8 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
106
115
  # to ensure consistent behaviour of the useradd provider when
107
116
  # using both useradd and luseradd
108
117
  if (!@resource.allowdupe?) && @resource.forcelocal?
109
- if @resource.should(:uid) && finduser('uid', @resource.should(:uid).to_s)
110
- raise(Puppet::Error, "UID #{@resource.should(:uid).to_s} already exists, use allowdupe to force user creation")
118
+ if @resource.should(:uid) && finduser(:uid, @resource.should(:uid).to_s)
119
+ raise(Puppet::Error, "UID #{@resource.should(:uid)} already exists, use allowdupe to force user creation")
111
120
  end
112
121
  elsif @resource.allowdupe? && (!@resource.forcelocal?)
113
122
  return ["-o"]
@@ -116,7 +125,7 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
116
125
  end
117
126
 
118
127
  def check_valid_shell
119
- unless File.exists?(@resource.should(:shell))
128
+ unless File.exist?(@resource.should(:shell))
120
129
  raise(Puppet::Error, "Shell #{@resource.should(:shell)} must exist")
121
130
  end
122
131
  unless File.executable?(@resource.should(:shell).to_s)
@@ -125,14 +125,13 @@ Puppet::Type.type(:user).provide :windows_adsi do
125
125
 
126
126
  def password=(value)
127
127
  if user.disabled?
128
- warning _("The user account '%s' is disabled; puppet will not reset the password" % @resource[:name])
128
+ info _("The user account '%s' is disabled; The password will still be changed" % @resource[:name])
129
129
  elsif user.locked_out?
130
- warning _("The user account '%s' is locked out; puppet will not reset the password" % @resource[:name])
130
+ info _("The user account '%s' is locked out; The password will still be changed" % @resource[:name])
131
131
  elsif user.expired?
132
- warning _("The user account '%s' is expired; puppet will not reset the password" % @resource[:name])
133
- else
134
- user.password = value
132
+ info _("The user account '%s' is expired; The password will still be changed" % @resource[:name])
135
133
  end
134
+ user.password = value
136
135
  end
137
136
 
138
137
  def uid
@@ -5,14 +5,14 @@ require 'puppet/file_serving/metadata'
5
5
 
6
6
  reference = Puppet::Util::Reference.newreference :indirection, :doc => "Indirection types and their terminus classes" do
7
7
  text = ""
8
- Puppet::Indirector::Indirection.instances.sort { |a,b| a.to_s <=> b.to_s }.each do |indirection|
8
+ Puppet::Indirector::Indirection.instances.sort_by(&:to_s).each do |indirection|
9
9
  ind = Puppet::Indirector::Indirection.instance(indirection)
10
10
  name = indirection.to_s.capitalize
11
11
  text << "## " + indirection.to_s + "\n\n"
12
12
 
13
13
  text << Puppet::Util::Docs.scrub(ind.doc) + "\n\n"
14
14
 
15
- Puppet::Indirector::Terminus.terminus_classes(ind.name).sort { |a,b| a.to_s <=> b.to_s }.each do |terminus|
15
+ Puppet::Indirector::Terminus.terminus_classes(ind.name).sort_by(&:to_s).each do |terminus|
16
16
  terminus_name = terminus.to_s
17
17
  term_class = Puppet::Indirector::Terminus.terminus_class(ind.name, terminus)
18
18
  if term_class
@@ -19,9 +19,7 @@ etc.), prevent Puppet from making changes (`noop`), and change logging verbosity
19
19
  params << param
20
20
  }
21
21
 
22
- params.sort { |a,b|
23
- a.to_s <=> b.to_s
24
- }.each { |param|
22
+ params.sort_by(&:to_s).each { |param|
25
23
  str << markdown_header(param.to_s, 3)
26
24
  str << scrub(Puppet::Type.metaparamdoc(param))
27
25
  str << "\n\n"
@@ -34,7 +34,7 @@ providers = Puppet::Util::Reference.newreference :providers, :title => "Provider
34
34
 
35
35
  notes = []
36
36
  default = type.defaultprovider ? type.defaultprovider.name : 'none'
37
- type.providers.sort { |a,b| a.to_s <=> b.to_s }.each do |pname|
37
+ type.providers.sort_by(&:to_s).each do |pname|
38
38
  data = []
39
39
  table_data[pname] = data
40
40
  provider = type.provider(pname)
@@ -49,9 +49,7 @@ Puppet::Util::Reference.newreference :type, :doc => "All Puppet resource types a
49
49
 
50
50
  }
51
51
 
52
- types.sort { |a,b|
53
- a.to_s <=> b.to_s
54
- }.each { |name,type|
52
+ types.sort_by(&:to_s).each { |name,type|
55
53
 
56
54
  str << "
57
55
 
@@ -70,9 +68,7 @@ Puppet::Util::Reference.newreference :type, :doc => "All Puppet resource types a
70
68
  end
71
69
 
72
70
  docs = {}
73
- type.validproperties.sort { |a,b|
74
- a.to_s <=> b.to_s
75
- }.reject { |sname|
71
+ type.validproperties.sort_by(&:to_s).reject { |sname|
76
72
  property = type.propertybyname(sname)
77
73
  property.nodoc
78
74
  }.each { |sname|
@@ -93,9 +89,7 @@ Puppet::Util::Reference.newreference :type, :doc => "All Puppet resource types a
93
89
  }
94
90
 
95
91
  str << markdown_header("Parameters", 4) + "\n"
96
- type.parameters.sort { |a,b|
97
- a.to_s <=> b.to_s
98
- }.each { |type_name, param|
92
+ type.parameters.sort_by(&:to_s).each { |type_name, param|
99
93
  docs[type_name] = scrub(type.paramdoc(type_name))
100
94
  }
101
95
 
@@ -74,7 +74,7 @@ class Puppet::Reports
74
74
 
75
75
  # Use this method so they all get loaded
76
76
  instance_loader(:report).loadall(Puppet.lookup(:current_environment))
77
- loaded_instances(:report).sort { |a,b| a.to_s <=> b.to_s }.each do |name|
77
+ loaded_instances(:report).sort_by(&:to_s).each do |name|
78
78
  mod = self.report(name)
79
79
  docs << "#{name}\n#{"-" * name.to_s.length}\n"
80
80
 
@@ -214,7 +214,7 @@ class Puppet::Resource
214
214
  end
215
215
 
216
216
  def stage?
217
- @is_stage ||= @type.to_s.downcase == "stage"
217
+ @is_stage ||= @type.to_s.casecmp("stage").zero?
218
218
  end
219
219
 
220
220
  # Construct a resource from data.
@@ -631,7 +631,7 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
631
631
  result.add_resource newres
632
632
  end
633
633
 
634
- message = convert.to_s.gsub "_", " "
634
+ message = convert.to_s.tr "_", " "
635
635
  edges.each do |edge|
636
636
  # Skip edges between virtual resources.
637
637
  next if virtual_not_exported?(edge.source)