puppet 5.5.17-x64-mingw32 → 5.5.18-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 (225) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +1 -1
  3. data/Gemfile +2 -3
  4. data/Gemfile.lock +35 -31
  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/application.rb +1 -1
  12. data/lib/puppet/application/apply.rb +2 -2
  13. data/lib/puppet/application/describe.rb +3 -9
  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/configurer.rb +86 -28
  18. data/lib/puppet/configurer/downloader.rb +2 -6
  19. data/lib/puppet/defaults.rb +17 -4
  20. data/lib/puppet/error.rb +9 -1
  21. data/lib/puppet/external/nagios/base.rb +1 -1
  22. data/lib/puppet/face/ca.rb +1 -1
  23. data/lib/puppet/face/module/list.rb +5 -5
  24. data/lib/puppet/face/module/search.rb +1 -1
  25. data/lib/puppet/face/module/uninstall.rb +1 -1
  26. data/lib/puppet/face/module/upgrade.rb +1 -1
  27. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  28. data/lib/puppet/file_system.rb +0 -8
  29. data/lib/puppet/file_system/memory_file.rb +1 -1
  30. data/lib/puppet/file_system/posix.rb +3 -2
  31. data/lib/puppet/forge.rb +3 -3
  32. data/lib/puppet/functions/epp.rb +4 -4
  33. data/lib/puppet/functions/inline_epp.rb +5 -5
  34. data/lib/puppet/gettext/module_translations.rb +1 -1
  35. data/lib/puppet/graph/rb_tree_map.rb +2 -2
  36. data/lib/puppet/graph/simple_graph.rb +6 -5
  37. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  38. data/lib/puppet/indirector/hiera.rb +2 -0
  39. data/lib/puppet/indirector/resource/ral.rb +1 -3
  40. data/lib/puppet/indirector/resource/validator.rb +1 -1
  41. data/lib/puppet/interface.rb +2 -1
  42. data/lib/puppet/loaders.rb +0 -1
  43. data/lib/puppet/metatype/manager.rb +1 -1
  44. data/lib/puppet/module.rb +1 -1
  45. data/lib/puppet/module_tool/applications/builder.rb +1 -1
  46. data/lib/puppet/module_tool/applications/installer.rb +1 -1
  47. data/lib/puppet/module_tool/applications/uninstaller.rb +3 -3
  48. data/lib/puppet/module_tool/metadata.rb +1 -1
  49. data/lib/puppet/module_tool/shared_behaviors.rb +4 -4
  50. data/lib/puppet/module_tool/tar/mini.rb +1 -1
  51. data/lib/puppet/network/http/api/indirected_routes.rb +12 -11
  52. data/lib/puppet/network/http/connection.rb +10 -12
  53. data/lib/puppet/network/http/pool.rb +2 -0
  54. data/lib/puppet/network/http/rack/rest.rb +2 -2
  55. data/lib/puppet/network/http/site.rb +1 -1
  56. data/lib/puppet/network/resolver.rb +2 -2
  57. data/lib/puppet/node/environment.rb +4 -2
  58. data/lib/puppet/parser/ast.rb +1 -1
  59. data/lib/puppet/parser/ast/resourceparam.rb +1 -1
  60. data/lib/puppet/parser/functions.rb +1 -1
  61. data/lib/puppet/parser/functions/epp.rb +3 -3
  62. data/lib/puppet/parser/functions/inline_epp.rb +5 -5
  63. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
  64. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
  65. data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -2
  66. data/lib/puppet/pops/evaluator/runtime3_support.rb +4 -4
  67. data/lib/puppet/pops/loaders.rb +1 -1
  68. data/lib/puppet/pops/lookup/hiera_config.rb +1 -0
  69. data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
  70. data/lib/puppet/pops/merge_strategy.rb +22 -18
  71. data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
  72. data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
  73. data/lib/puppet/pops/parser/locator.rb +1 -1
  74. data/lib/puppet/pops/parser/pn_parser.rb +17 -16
  75. data/lib/puppet/pops/puppet_stack.rb +51 -48
  76. data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
  77. data/lib/puppet/pops/types/string_converter.rb +10 -10
  78. data/lib/puppet/pops/types/types.rb +3 -3
  79. data/lib/puppet/property.rb +1 -1
  80. data/lib/puppet/property/ensure.rb +1 -1
  81. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  82. data/lib/puppet/provider/cron/crontab.rb +1 -1
  83. data/lib/puppet/provider/exec.rb +6 -2
  84. data/lib/puppet/provider/mount.rb +1 -1
  85. data/lib/puppet/provider/mount/parsed.rb +8 -8
  86. data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
  87. data/lib/puppet/provider/nameservice/pw.rb +2 -2
  88. data/lib/puppet/provider/package/dnfmodule.rb +87 -0
  89. data/lib/puppet/provider/package/dpkg.rb +3 -12
  90. data/lib/puppet/provider/package/openbsd.rb +1 -1
  91. data/lib/puppet/provider/package/pip.rb +34 -9
  92. data/lib/puppet/provider/package/portage.rb +4 -4
  93. data/lib/puppet/provider/package/rpm.rb +6 -6
  94. data/lib/puppet/provider/package/windows/package.rb +1 -1
  95. data/lib/puppet/provider/package/yum.rb +1 -1
  96. data/lib/puppet/provider/package_targetable.rb +5 -4
  97. data/lib/puppet/provider/parsedfile.rb +1 -1
  98. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +3 -3
  99. data/lib/puppet/provider/service/daemontools.rb +9 -9
  100. data/lib/puppet/provider/service/openbsd.rb +1 -1
  101. data/lib/puppet/provider/service/rcng.rb +2 -2
  102. data/lib/puppet/provider/service/runit.rb +2 -8
  103. data/lib/puppet/provider/service/systemd.rb +8 -8
  104. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  105. data/lib/puppet/provider/user/hpux.rb +1 -1
  106. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  107. data/lib/puppet/provider/user/useradd.rb +22 -13
  108. data/lib/puppet/provider/user/windows_adsi.rb +4 -5
  109. data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
  110. data/lib/puppet/reference/indirection.rb +2 -2
  111. data/lib/puppet/reference/metaparameter.rb +1 -3
  112. data/lib/puppet/reference/providers.rb +1 -1
  113. data/lib/puppet/reference/type.rb +3 -9
  114. data/lib/puppet/reports.rb +1 -1
  115. data/lib/puppet/resource.rb +1 -1
  116. data/lib/puppet/resource/catalog.rb +1 -1
  117. data/lib/puppet/settings.rb +3 -3
  118. data/lib/puppet/settings/environment_conf.rb +1 -0
  119. data/lib/puppet/ssl/certificate_authority/interface.rb +1 -1
  120. data/lib/puppet/ssl/certificate_factory.rb +2 -2
  121. data/lib/puppet/ssl/host.rb +3 -3
  122. data/lib/puppet/ssl/oids.rb +1 -1
  123. data/lib/puppet/transaction/report.rb +1 -1
  124. data/lib/puppet/type.rb +2 -4
  125. data/lib/puppet/type/cron.rb +1 -1
  126. data/lib/puppet/type/exec.rb +7 -3
  127. data/lib/puppet/type/file.rb +1 -2
  128. data/lib/puppet/type/file/data_sync.rb +5 -1
  129. data/lib/puppet/type/group.rb +4 -2
  130. data/lib/puppet/type/interface.rb +1 -1
  131. data/lib/puppet/type/notify.rb +3 -2
  132. data/lib/puppet/type/package.rb +2 -2
  133. data/lib/puppet/type/schedule.rb +1 -1
  134. data/lib/puppet/type/selboolean.rb +17 -3
  135. data/lib/puppet/type/service.rb +1 -1
  136. data/lib/puppet/type/user.rb +4 -2
  137. data/lib/puppet/util.rb +35 -12
  138. data/lib/puppet/util/command_line/trollop.rb +1 -1
  139. data/lib/puppet/util/http_proxy.rb +8 -14
  140. data/lib/puppet/util/instance_loader.rb +1 -1
  141. data/lib/puppet/util/log.rb +1 -1
  142. data/lib/puppet/util/log/destinations.rb +2 -2
  143. data/lib/puppet/util/logging.rb +30 -18
  144. data/lib/puppet/util/metric.rb +2 -2
  145. data/lib/puppet/util/monkey_patches.rb +1 -1
  146. data/lib/puppet/util/nagios_maker.rb +2 -2
  147. data/lib/puppet/util/network_device/cisco/device.rb +1 -1
  148. data/lib/puppet/util/network_device/cisco/interface.rb +2 -2
  149. data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
  150. data/lib/puppet/util/provider_features.rb +2 -4
  151. data/lib/puppet/util/rdoc.rb +1 -1
  152. data/lib/puppet/util/reference.rb +1 -1
  153. data/lib/puppet/util/resource_template.rb +1 -1
  154. data/lib/puppet/util/selinux.rb +3 -1
  155. data/lib/puppet/util/windows/adsi.rb +58 -28
  156. data/lib/puppet/util/windows/registry.rb +7 -5
  157. data/lib/puppet/vendor.rb +1 -1
  158. data/lib/puppet/version.rb +1 -1
  159. data/lib/puppet_pal.rb +2 -2
  160. data/locales/puppet.pot +115 -95
  161. data/man/man5/puppet.conf.5 +21 -5
  162. data/man/man8/puppet-agent.8 +1 -1
  163. data/man/man8/puppet-apply.8 +1 -1
  164. data/man/man8/puppet-ca.8 +1 -1
  165. data/man/man8/puppet-catalog.8 +1 -1
  166. data/man/man8/puppet-cert.8 +1 -1
  167. data/man/man8/puppet-certificate.8 +1 -1
  168. data/man/man8/puppet-certificate_request.8 +1 -1
  169. data/man/man8/puppet-certificate_revocation_list.8 +1 -1
  170. data/man/man8/puppet-config.8 +1 -1
  171. data/man/man8/puppet-describe.8 +1 -1
  172. data/man/man8/puppet-device.8 +1 -1
  173. data/man/man8/puppet-doc.8 +1 -1
  174. data/man/man8/puppet-epp.8 +1 -1
  175. data/man/man8/puppet-facts.8 +1 -1
  176. data/man/man8/puppet-filebucket.8 +1 -1
  177. data/man/man8/puppet-generate.8 +1 -1
  178. data/man/man8/puppet-help.8 +1 -1
  179. data/man/man8/puppet-key.8 +1 -1
  180. data/man/man8/puppet-lookup.8 +1 -1
  181. data/man/man8/puppet-man.8 +1 -1
  182. data/man/man8/puppet-master.8 +1 -1
  183. data/man/man8/puppet-module.8 +1 -1
  184. data/man/man8/puppet-node.8 +1 -1
  185. data/man/man8/puppet-parser.8 +1 -1
  186. data/man/man8/puppet-plugin.8 +1 -1
  187. data/man/man8/puppet-report.8 +1 -1
  188. data/man/man8/puppet-resource.8 +1 -1
  189. data/man/man8/puppet-script.8 +1 -1
  190. data/man/man8/puppet-status.8 +1 -1
  191. data/man/man8/puppet.8 +2 -2
  192. data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list-installed.txt +11 -0
  193. data/spec/integration/configurer_spec.rb +52 -0
  194. data/spec/integration/type/notify_spec.rb +46 -0
  195. data/spec/unit/configurer_spec.rb +380 -397
  196. data/spec/unit/forge/forge_spec.rb +1 -3
  197. data/spec/unit/forge/repository_spec.rb +1 -3
  198. data/spec/unit/indirector/resource/ral_spec.rb +4 -4
  199. data/spec/unit/network/http/connection_spec.rb +26 -0
  200. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
  201. data/spec/unit/provider/exec_spec.rb +209 -0
  202. data/spec/unit/provider/package/dnfmodule_spec.rb +186 -0
  203. data/spec/unit/provider/package/dpkg_spec.rb +15 -3
  204. data/spec/unit/provider/package/pip_spec.rb +51 -6
  205. data/spec/unit/provider/package/portage_spec.rb +4 -4
  206. data/spec/unit/provider/package_targetable_spec.rb +60 -0
  207. data/spec/unit/provider/service/daemontools_spec.rb +24 -0
  208. data/spec/unit/provider/service/runit_spec.rb +24 -0
  209. data/spec/unit/provider/service/systemd_spec.rb +22 -22
  210. data/spec/unit/provider/user/hpux_spec.rb +2 -2
  211. data/spec/unit/provider/user/useradd_spec.rb +46 -0
  212. data/spec/unit/type/exec_spec.rb +6 -12
  213. data/spec/unit/type/file/content_spec.rb +9 -3
  214. data/spec/unit/type/file_spec.rb +9 -4
  215. data/spec/unit/type/selboolean_spec.rb +4 -6
  216. data/spec/unit/util/execution_spec.rb +16 -0
  217. data/spec/unit/util/http_proxy_spec.rb +97 -0
  218. data/spec/unit/util/log/destinations_spec.rb +7 -3
  219. data/spec/unit/util/log_spec.rb +0 -138
  220. data/spec/unit/util/logging_spec.rb +200 -0
  221. data/spec/unit/util/windows/adsi_spec.rb +51 -0
  222. data/tasks/manpages.rake +1 -0
  223. metadata +12 -5
  224. data/lib/puppet/pops/loader/null_loader.rb +0 -60
  225. data/locales/ja/puppet.po +0 -12114
@@ -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
@@ -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
@@ -92,7 +92,7 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
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.
@@ -25,24 +25,25 @@ require 'puppet/provider/package'
25
25
  class Puppet::Provider::Package::Targetable < Puppet::Provider::Package
26
26
  # Prefetch our package list, yo.
27
27
  def self.prefetch(packages)
28
- catalog_packages = packages.first[1]::catalog::resources.select{ |p| p.provider.class == self }
28
+ catalog_packages = packages.values.first.catalog.resources.select{ |p| p.provider.class == self }
29
29
  package_commands = catalog_packages.map { |catalog_package| catalog_package::original_parameters[:command] }.uniq
30
30
  package_commands.each do |command|
31
31
  instances(command).each do |instance|
32
32
  catalog_packages.each do |catalog_package|
33
- if catalog_package[:name] == instance.name && catalog_package::original_parameters[:command] == command
33
+ if catalog_package[:name] == instance.name && catalog_package.original_parameters[:command] == command
34
34
  catalog_package.provider = instance
35
- self.debug "Prefetched instance: %{name} via command: %{command}" % { name: instance.name, cmd: (command || :default)}
35
+ self.debug "Prefetched instance: %{name} via command: %{cmd}" % { name: instance.name, cmd: (command || :default) }
36
36
  end
37
37
  end
38
38
  end
39
39
  end
40
+ package_commands
40
41
  end
41
42
 
42
43
  # Returns the resource command or provider command.
43
44
 
44
45
  def resource_or_provider_command
45
- resource::original_parameters[:command] || self.class.provider_command
46
+ resource.original_parameters[:command] || self.class.provider_command
46
47
  end
47
48
 
48
49
  # 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 { |a,b| a.to_s <=> b.to_s }.uniq.each do |target|
74
+ @modified.sort_by(&: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)
@@ -200,12 +200,12 @@ Puppet::Type.type(:scheduled_task).provide(:win32_taskscheduler) do
200
200
  def user=(value)
201
201
  self.fail("Invalid user: #{value}") unless Puppet::Util::Windows::SID.name_to_sid(value)
202
202
 
203
- if value.to_s.downcase != 'system'
204
- task.set_account_information(value, resource[:password])
205
- else
203
+ if value.to_s.casecmp('system').zero?
206
204
  # Win32::TaskScheduler treats a nil/empty username & password as
207
205
  # requesting the SYSTEM account.
208
206
  task.set_account_information(nil, nil)
207
+ else
208
+ task.set_account_information(value, resource[:password])
209
209
  end
210
210
  end
211
211
 
@@ -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
@@ -40,7 +40,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
40
40
  # in the provider's believed state of the service and the actual state.
41
41
  # @param action [String,Symbol] One of 'enable', 'disable', 'mask' or 'unmask'
42
42
  def systemctl_change_enable(action)
43
- output = systemctl(action, @resource[:name])
43
+ output = systemctl(action, '--', @resource[:name])
44
44
  rescue
45
45
  raise Puppet::Error, "Could not #{action} #{self.name}: #{output}", $!.backtrace
46
46
  ensure
@@ -53,7 +53,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
53
53
 
54
54
  def get_start_link_count
55
55
  # Start links don't include '.service'. Just search for the service name.
56
- if @resource[:name].match(/\.service/)
56
+ if @resource[:name] =~ /\.service/
57
57
  link_name = @resource[:name].split('.')[0]
58
58
  else
59
59
  link_name = @resource[:name]
@@ -64,7 +64,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
64
64
 
65
65
  def cached_enabled?
66
66
  return @cached_enabled if @cached_enabled
67
- cmd = [command(:systemctl), 'is-enabled', @resource[:name]]
67
+ cmd = [command(:systemctl), 'is-enabled', '--', @resource[:name]]
68
68
  @cached_enabled = execute(cmd, :failonfail => false).strip
69
69
  end
70
70
 
@@ -83,7 +83,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
83
83
  # The indirect state indicates that the unit is not enabled.
84
84
  return :false if output == 'indirect'
85
85
  return :true if (code == 0)
86
- if (output.empty?) && (code > 0) && (Facter.value(:osfamily).downcase == 'debian')
86
+ if (output.empty?) && (code > 0) && (Facter.value(:osfamily).casecmp('debian').zero?)
87
87
  ret = debian_enabled?
88
88
  return ret if ret
89
89
  end
@@ -131,20 +131,20 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
131
131
  end
132
132
 
133
133
  def restartcmd
134
- [command(:systemctl), "restart", @resource[:name]]
134
+ [command(:systemctl), "restart", '--', @resource[:name]]
135
135
  end
136
136
 
137
137
  def startcmd
138
138
  self.unmask
139
- [command(:systemctl), "start", @resource[:name]]
139
+ [command(:systemctl), "start", '--', @resource[:name]]
140
140
  end
141
141
 
142
142
  def stopcmd
143
- [command(:systemctl), "stop", @resource[:name]]
143
+ [command(:systemctl), "stop", '--', @resource[:name]]
144
144
  end
145
145
 
146
146
  def statuscmd
147
- [command(:systemctl), "is-active", @resource[:name]]
147
+ [command(:systemctl), "is-active", '--', @resource[:name]]
148
148
  end
149
149
 
150
150
  def restart
@@ -503,7 +503,7 @@ Puppet::Type.type(:user).provide :directoryservice do
503
503
  def next_system_id(min_id=20)
504
504
  dscl_output = dscl '.', '-list', '/Users', 'uid'
505
505
  # We're ok with throwing away negative uids here. Also, remove nil values.
506
- user_ids = dscl_output.split.compact.collect { |l| l.to_i if l.match(/^\d+$/) }
506
+ user_ids = dscl_output.split.compact.collect { |l| l.to_i if l =~ /^\d+$/ }
507
507
  ids = user_ids.compact!.sort! { |a,b| a.to_f <=> b.to_f }
508
508
  # We're just looking for an unused id in our sorted array.
509
509
  ids.each_index do |i|
@@ -29,7 +29,7 @@ Puppet::Type.type(:user).provide :hpuxuseradd, :parent => :useradd do
29
29
 
30
30
  def modifycmd(param,value)
31
31
  cmd = super(param, value)
32
- cmd << "-F"
32
+ cmd.insert(1,"-F")
33
33
  if trusted then
34
34
  # Append an additional command to reset the password age to 0
35
35
  # until a workaround with expiry module can be found for trusted
@@ -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
@@ -76,8 +76,8 @@ Puppet::Type.type(:yumrepo).provide(:inifile) do
76
76
  # Use directories in reposdir if they are set instead of default
77
77
  if reposdir
78
78
  # Follow the code from the yum/config.py
79
- reposdir.gsub!("\n", ' ')
80
- reposdir.gsub!(',', ' ')
79
+ reposdir.tr!("\n", ' ')
80
+ reposdir.tr!(',', ' ')
81
81
  dirs = reposdir.split
82
82
  end
83
83
  dirs.select! { |dir| Puppet::FileSystem.exist?(dir) }
@@ -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