chef 12.17.44-universal-mingw32 → 12.18.31-universal-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -1
  3. data/README.md +3 -2
  4. data/Rakefile +9 -0
  5. data/VERSION +1 -1
  6. data/acceptance/Gemfile.lock +17 -17
  7. data/distro/common/html/knife_environment.html +4 -8
  8. data/distro/common/man/man1/knife-environment.1 +4 -16
  9. data/distro/powershell/chef/chef.psm1 +139 -24
  10. data/lib/chef/application.rb +5 -4
  11. data/lib/chef/application/windows_service_manager.rb +6 -4
  12. data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
  13. data/lib/chef/chef_fs/command_line.rb +1 -1
  14. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +8 -1
  15. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +1 -1
  16. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +1 -1
  17. data/lib/chef/cookbook/chefignore.rb +1 -1
  18. data/lib/chef/cookbook/cookbook_version_loader.rb +4 -4
  19. data/lib/chef/cookbook/metadata.rb +2 -2
  20. data/lib/chef/cookbook_loader.rb +1 -1
  21. data/lib/chef/data_collector.rb +24 -13
  22. data/lib/chef/data_collector/messages.rb +8 -6
  23. data/lib/chef/data_collector/messages/helpers.rb +1 -1
  24. data/lib/chef/deprecated.rb +30 -0
  25. data/lib/chef/dsl/platform_introspection.rb +2 -2
  26. data/lib/chef/encrypted_data_bag_item.rb +1 -1
  27. data/lib/chef/encrypted_data_bag_item/decryptor.rb +2 -2
  28. data/lib/chef/environment.rb +1 -1
  29. data/lib/chef/exceptions.rb +5 -5
  30. data/lib/chef/file_access_control/unix.rb +5 -5
  31. data/lib/chef/formatters/error_description.rb +1 -1
  32. data/lib/chef/http/basic_client.rb +1 -1
  33. data/lib/chef/http/json_input.rb +2 -2
  34. data/lib/chef/knife.rb +1 -1
  35. data/lib/chef/knife/cookbook_site_install.rb +1 -1
  36. data/lib/chef/knife/core/cookbook_scm_repo.rb +1 -1
  37. data/lib/chef/knife/core/ui.rb +1 -1
  38. data/lib/chef/mixin/command.rb +1 -0
  39. data/lib/chef/mixin/deep_merge.rb +1 -1
  40. data/lib/chef/mixin/shell_out.rb +58 -3
  41. data/lib/chef/mixin/which.rb +5 -9
  42. data/lib/chef/mixin/wide_string.rb +1 -1
  43. data/lib/chef/node.rb +1 -1
  44. data/lib/chef/node/attribute.rb +4 -5
  45. data/lib/chef/node_map.rb +18 -2
  46. data/lib/chef/platform/provider_handler_map.rb +2 -2
  47. data/lib/chef/platform/provider_mapping.rb +5 -0
  48. data/lib/chef/platform/resource_handler_map.rb +2 -2
  49. data/lib/chef/provider/env/windows.rb +1 -1
  50. data/lib/chef/provider/git.rb +1 -1
  51. data/lib/chef/provider/group.rb +41 -46
  52. data/lib/chef/provider/group/aix.rb +12 -19
  53. data/lib/chef/provider/group/dscl.rb +46 -43
  54. data/lib/chef/provider/group/gpasswd.rb +7 -7
  55. data/lib/chef/provider/group/groupadd.rb +29 -34
  56. data/lib/chef/provider/group/groupmod.rb +26 -31
  57. data/lib/chef/provider/group/pw.rb +28 -31
  58. data/lib/chef/provider/group/suse.rb +9 -9
  59. data/lib/chef/provider/group/usermod.rb +10 -11
  60. data/lib/chef/provider/group/windows.rb +18 -20
  61. data/lib/chef/provider/ifconfig.rb +52 -63
  62. data/lib/chef/provider/ifconfig/aix.rb +23 -28
  63. data/lib/chef/provider/ifconfig/debian.rb +23 -22
  64. data/lib/chef/provider/ifconfig/redhat.rb +12 -12
  65. data/lib/chef/provider/mount/mount.rb +1 -1
  66. data/lib/chef/provider/osx_profile.rb +4 -2
  67. data/lib/chef/provider/package.rb +16 -7
  68. data/lib/chef/provider/package/chocolatey.rb +3 -1
  69. data/lib/chef/provider/package/dnf.rb +183 -0
  70. data/lib/chef/provider/package/dnf/dnf_helper.py +91 -0
  71. data/lib/chef/provider/package/dnf/python_helper.rb +120 -0
  72. data/lib/chef/provider/package/dnf/version.rb +56 -0
  73. data/lib/chef/provider/package/easy_install.rb +1 -1
  74. data/lib/chef/provider/package/freebsd/base.rb +1 -1
  75. data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
  76. data/lib/chef/provider/package/powershell.rb +3 -3
  77. data/lib/chef/provider/package/windows.rb +1 -1
  78. data/lib/chef/provider/package/zypper.rb +1 -1
  79. data/lib/chef/provider/route.rb +186 -184
  80. data/lib/chef/provider/service/arch.rb +2 -2
  81. data/lib/chef/provider/service/freebsd.rb +1 -1
  82. data/lib/chef/provider/service/gentoo.rb +2 -2
  83. data/lib/chef/provider/service/insserv.rb +2 -2
  84. data/lib/chef/provider/service/macosx.rb +2 -2
  85. data/lib/chef/provider/service/openbsd.rb +1 -1
  86. data/lib/chef/provider/service/redhat.rb +2 -2
  87. data/lib/chef/provider/support/yum_repo.erb +10 -3
  88. data/lib/chef/provider/user.rb +17 -20
  89. data/lib/chef/provider/user/aix.rb +23 -24
  90. data/lib/chef/provider/user/dscl.rb +56 -53
  91. data/lib/chef/provider/user/linux.rb +13 -16
  92. data/lib/chef/provider/user/pw.rb +26 -30
  93. data/lib/chef/provider/user/solaris.rb +11 -12
  94. data/lib/chef/provider/user/useradd.rb +20 -22
  95. data/lib/chef/provider/user/windows.rb +19 -22
  96. data/lib/chef/provider_resolver.rb +4 -2
  97. data/lib/chef/providers.rb +1 -0
  98. data/lib/chef/resource.rb +7 -0
  99. data/lib/chef/resource/chocolatey_package.rb +1 -0
  100. data/lib/chef/resource/dnf_package.rb +64 -0
  101. data/lib/chef/resource/file/verification.rb +6 -4
  102. data/lib/chef/resource/yum_package.rb +18 -14
  103. data/lib/chef/resource/yum_repository.rb +1 -1
  104. data/lib/chef/resource_reporter.rb +11 -0
  105. data/lib/chef/resources.rb +1 -0
  106. data/lib/chef/scan_access_control.rb +4 -4
  107. data/lib/chef/util/dsc/resource_store.rb +1 -1
  108. data/lib/chef/version.rb +1 -1
  109. data/lib/chef/win32/memory.rb +1 -1
  110. data/lib/chef/win32/security.rb +2 -2
  111. data/lib/chef/win32/security/sid.rb +2 -2
  112. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.i686.rpm +0 -0
  113. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.src.rpm +0 -0
  114. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.x86_64.rpm +0 -0
  115. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.i686.rpm +0 -0
  116. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.src.rpm +0 -0
  117. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.x86_64.rpm +0 -0
  118. data/spec/functional/assets/yumrepo/repodata/313329137b55fd333b2dc66394a6661a2befa6cc535d8460d92a4a78a9c581f0-primary.sqlite.bz2 +0 -0
  119. data/spec/functional/assets/yumrepo/repodata/31ac4db5d5ac593728fcc26aef82b7b93c4cc4dbec843786b1845b939b658553-other.xml.gz +0 -0
  120. data/spec/functional/assets/yumrepo/repodata/4ac40fa3c6728c1401318e2e20a997436624e83dcf7a5f952b851ef422637773-filelists.sqlite.bz2 +0 -0
  121. data/spec/functional/assets/yumrepo/repodata/66391e53f0510b98b3f0b79f40ba1048026d9a1ef20905d9c40ba6f5411f3243-primary.xml.gz +0 -0
  122. data/spec/functional/assets/yumrepo/repodata/8b34697595fcc87928e12d24644dda9462c3857bd932861e28bc77ae1f31be16-filelists.xml.gz +0 -0
  123. data/spec/functional/assets/yumrepo/repodata/b97cca3fe14bcf06c52be4449b6108f7731239ff221111dcce8aada5467f60dc-other.sqlite.bz2 +0 -0
  124. data/spec/functional/assets/yumrepo/repodata/repomd.xml +55 -0
  125. data/spec/functional/resource/dnf_package_spec.rb +686 -0
  126. data/spec/functional/resource/dsc_script_spec.rb +1 -0
  127. data/spec/functional/resource/user/useradd_spec.rb +10 -1
  128. data/spec/integration/knife/chef_repo_path_spec.rb +2 -2
  129. data/spec/integration/recipes/recipe_dsl_spec.rb +3 -0
  130. data/spec/integration/recipes/resource_load_spec.rb +3 -3
  131. data/spec/spec_helper.rb +5 -3
  132. data/spec/support/lib/chef/provider/snakeoil.rb +1 -0
  133. data/spec/support/lib/chef/resource/cat.rb +1 -0
  134. data/spec/support/lib/chef/resource/one_two_three_four.rb +1 -0
  135. data/spec/support/lib/chef/resource/openldap_includer.rb +2 -0
  136. data/spec/support/lib/chef/resource/with_state.rb +2 -0
  137. data/spec/support/lib/chef/resource/zen_master.rb +1 -0
  138. data/spec/unit/cookbook/metadata_spec.rb +3 -3
  139. data/spec/unit/data_collector/messages/helpers_spec.rb +7 -0
  140. data/spec/unit/data_collector_spec.rb +56 -0
  141. data/spec/unit/decorator/lazy_spec.rb +1 -1
  142. data/spec/unit/environment_spec.rb +1 -1
  143. data/spec/unit/lwrp_spec.rb +3 -4
  144. data/spec/unit/node_spec.rb +23 -2
  145. data/spec/unit/platform_spec.rb +1 -0
  146. data/spec/unit/provider/group/dscl_spec.rb +29 -29
  147. data/spec/unit/provider/group/gpasswd_spec.rb +10 -10
  148. data/spec/unit/provider/group/groupadd_spec.rb +31 -30
  149. data/spec/unit/provider/group/groupmod_spec.rb +16 -16
  150. data/spec/unit/provider/group/pw_spec.rb +11 -11
  151. data/spec/unit/provider/group/suse_spec.rb +5 -5
  152. data/spec/unit/provider/group/usermod_spec.rb +15 -15
  153. data/spec/unit/provider/ifconfig/aix_spec.rb +14 -14
  154. data/spec/unit/provider/ifconfig/debian_spec.rb +10 -22
  155. data/spec/unit/provider/ifconfig/redhat_spec.rb +4 -4
  156. data/spec/unit/provider/ifconfig_spec.rb +18 -19
  157. data/spec/unit/provider/package/chocolatey_spec.rb +21 -21
  158. data/spec/unit/provider/package/msu_spec.rb +1 -1
  159. data/spec/unit/provider/route_spec.rb +21 -21
  160. data/spec/unit/provider/user/dscl_spec.rb +54 -57
  161. data/spec/unit/provider/user/linux_spec.rb +5 -5
  162. data/spec/unit/provider/user/pw_spec.rb +26 -22
  163. data/spec/unit/provider/user/windows_spec.rb +4 -4
  164. data/spec/unit/provider/user_spec.rb +19 -21
  165. data/spec/unit/provider_resolver_spec.rb +1 -0
  166. data/spec/unit/resource/chocolatey_package_spec.rb +12 -0
  167. data/spec/unit/resource/dnf_package_spec.rb +99 -0
  168. data/spec/unit/resource/remote_file_spec.rb +2 -2
  169. data/spec/unit/resource/yum_package_spec.rb +20 -0
  170. data/spec/unit/resource_reporter_spec.rb +24 -0
  171. data/spec/unit/resource_spec.rb +2 -0
  172. data/spec/unit/runner_spec.rb +1 -0
  173. data/tasks/bin/bundle-platform +1 -1
  174. data/tasks/gemfile_util.rb +2 -2
  175. data/tasks/templates/prerelease.md.erb +1 -10
  176. data/tasks/templates/release.md.erb +1 -9
  177. metadata +24 -5
  178. data/lib/chef/platform/handler_map.rb +0 -40
@@ -24,23 +24,23 @@ class Chef
24
24
  provides :user, os: "linux"
25
25
 
26
26
  def create_user
27
- shell_out!(*clean_array("useradd", universal_options, useradd_options, new_resource.username))
27
+ shell_out_compact!("useradd", universal_options, useradd_options, new_resource.username)
28
28
  end
29
29
 
30
30
  def manage_user
31
- shell_out!(*clean_array("usermod", universal_options, usermod_options, new_resource.username))
31
+ shell_out_compact!("usermod", universal_options, usermod_options, new_resource.username)
32
32
  end
33
33
 
34
34
  def remove_user
35
- shell_out!(*clean_array("userdel", userdel_options, new_resource.username))
35
+ shell_out_compact!("userdel", userdel_options, new_resource.username)
36
36
  end
37
37
 
38
38
  def lock_user
39
- shell_out!(*clean_array("usermod", "-L", new_resource.username))
39
+ shell_out_compact!("usermod", "-L", new_resource.username)
40
40
  end
41
41
 
42
42
  def unlock_user
43
- shell_out!(*clean_array("usermod", "-U", new_resource.username))
43
+ shell_out_compact!("usermod", "-U", new_resource.username)
44
44
  end
45
45
 
46
46
  # common to usermod and useradd
@@ -69,11 +69,11 @@ class Chef
69
69
  def useradd_options
70
70
  opts = []
71
71
  opts << "-r" if new_resource.system
72
- if managing_home_dir?
73
- opts << "-m"
74
- else
75
- opts << "-M"
76
- end
72
+ opts << if managing_home_dir?
73
+ "-m"
74
+ else
75
+ "-M"
76
+ end
77
77
  opts
78
78
  end
79
79
 
@@ -97,15 +97,12 @@ class Chef
97
97
  def check_lock
98
98
  # there's an old bug in rhel (https://bugzilla.redhat.com/show_bug.cgi?id=578534)
99
99
  # which means that both 0 and 1 can be success.
100
- passwd_s = shell_out("passwd", "-S", new_resource.username, returns: [ 0, 1 ])
100
+ passwd_s = shell_out_compact("passwd", "-S", new_resource.username, returns: [ 0, 1 ])
101
101
 
102
102
  # checking "does not exist" has to come before exit code handling since centos and ubuntu differ in exit codes
103
103
  if passwd_s.stderr =~ /does not exist/
104
- if whyrun_mode?
105
- return false
106
- else
107
- raise Chef::Exceptions::User, "User #{new_resource.username} does not exist when checking lock status for #{new_resource}"
108
- end
104
+ return false if whyrun_mode?
105
+ raise Chef::Exceptions::User, "User #{new_resource.username} does not exist when checking lock status for #{new_resource}"
109
106
  end
110
107
 
111
108
  # now raise if we didn't get a 0 or 1 (see above)
@@ -27,49 +27,45 @@ class Chef
27
27
 
28
28
  def load_current_resource
29
29
  super
30
- raise Chef::Exceptions::User, "Could not find binary /usr/sbin/pw for #{@new_resource}" unless ::File.exists?("/usr/sbin/pw")
30
+ raise Chef::Exceptions::User, "Could not find binary /usr/sbin/pw for #{new_resource}" unless ::File.exist?("/usr/sbin/pw")
31
31
  end
32
32
 
33
33
  def create_user
34
- command = "pw useradd"
35
- command << set_options
36
- run_command(:command => command)
34
+ shell_out_compact!("pw", "useradd", set_options)
37
35
  modify_password
38
36
  end
39
37
 
40
38
  def manage_user
41
- command = "pw usermod"
42
- command << set_options
43
- run_command(:command => command)
39
+ shell_out_compact!("pw", "usermod", set_options)
44
40
  modify_password
45
41
  end
46
42
 
47
43
  def remove_user
48
- command = "pw userdel #{@new_resource.username}"
49
- command << " -r" if managing_home_dir?
50
- run_command(:command => command)
44
+ command = [ "pw", "userdel", new_resource.username ]
45
+ command << "-r" if managing_home_dir?
46
+ shell_out_compact!(command)
51
47
  end
52
48
 
53
49
  def check_lock
54
- case @current_resource.password
55
- when /^\*LOCKED\*/
56
- @locked = true
57
- else
58
- @locked = false
59
- end
50
+ @locked = case current_resource.password
51
+ when /^\*LOCKED\*/
52
+ true
53
+ else
54
+ false
55
+ end
60
56
  @locked
61
57
  end
62
58
 
63
59
  def lock_user
64
- run_command(:command => "pw lock #{@new_resource.username}")
60
+ shell_out_compact!("pw", "lock", new_resource.username)
65
61
  end
66
62
 
67
63
  def unlock_user
68
- run_command(:command => "pw unlock #{@new_resource.username}")
64
+ shell_out_compact!("pw", "unlock", new_resource.username)
69
65
  end
70
66
 
71
67
  def set_options
72
- opts = " #{@new_resource.username}"
68
+ opts = [ new_resource.username ]
73
69
 
74
70
  field_list = {
75
71
  "comment" => "-c",
@@ -80,26 +76,26 @@ class Chef
80
76
  }
81
77
  field_list.sort { |a, b| a[0] <=> b[0] }.each do |field, option|
82
78
  field_symbol = field.to_sym
83
- if @current_resource.send(field_symbol) != @new_resource.send(field_symbol)
84
- if @new_resource.send(field_symbol)
85
- Chef::Log.debug("#{@new_resource} setting #{field} to #{@new_resource.send(field_symbol)}")
86
- opts << " #{option} '#{@new_resource.send(field_symbol)}'"
87
- end
79
+ next unless current_resource.send(field_symbol) != new_resource.send(field_symbol)
80
+ if new_resource.send(field_symbol)
81
+ Chef::Log.debug("#{new_resource} setting #{field} to #{new_resource.send(field_symbol)}")
82
+ opts << option
83
+ opts << new_resource.send(field_symbol)
88
84
  end
89
85
  end
90
86
  if managing_home_dir?
91
- Chef::Log.debug("#{@new_resource} is managing the users home directory")
92
- opts << " -m"
87
+ Chef::Log.debug("#{new_resource} is managing the users home directory")
88
+ opts << "-m"
93
89
  end
94
90
  opts
95
91
  end
96
92
 
97
93
  def modify_password
98
- if (not @new_resource.password.nil?) && (@current_resource.password != @new_resource.password)
94
+ if !new_resource.password.nil? && (current_resource.password != new_resource.password)
99
95
  Chef::Log.debug("#{new_resource} updating password")
100
- command = "pw usermod #{@new_resource.username} -H 0"
101
- status = popen4(command, :waitlast => true) do |pid, stdin, stdout, stderr|
102
- stdin.puts "#{@new_resource.password}"
96
+ command = "pw usermod #{new_resource.username} -H 0"
97
+ status = popen4(command, waitlast: true) do |pid, stdin, stdout, stderr|
98
+ stdin.puts new_resource.password.to_s
103
99
  end
104
100
 
105
101
  unless status.exitstatus == 0
@@ -26,7 +26,7 @@ class Chef
26
26
  class Solaris < Chef::Provider::User::Useradd
27
27
  provides :solaris_user
28
28
  provides :user, os: %w{omnios solaris2}
29
- UNIVERSAL_OPTIONS = [[:comment, "-c"], [:gid, "-g"], [:shell, "-s"], [:uid, "-u"]]
29
+ UNIVERSAL_OPTIONS = [[:comment, "-c"], [:gid, "-g"], [:shell, "-s"], [:uid, "-u"]].freeze
30
30
 
31
31
  attr_writer :password_file
32
32
 
@@ -46,22 +46,22 @@ class Chef
46
46
  end
47
47
 
48
48
  def check_lock
49
- user = IO.read(@password_file).match(/^#{Regexp.escape(@new_resource.username)}:([^:]*):/)
49
+ user = IO.read(@password_file).match(/^#{Regexp.escape(new_resource.username)}:([^:]*):/)
50
50
 
51
51
  # If we're in whyrun mode, and the user is not created, we assume it will be
52
52
  return false if whyrun_mode? && user.nil?
53
53
 
54
- raise Chef::Exceptions::User, "Cannot determine if #{@new_resource} is locked!" if user.nil?
54
+ raise Chef::Exceptions::User, "Cannot determine if #{new_resource} is locked!" if user.nil?
55
55
 
56
56
  @locked = user[1].start_with?("*LK*")
57
57
  end
58
58
 
59
59
  def lock_user
60
- shell_out!("passwd", "-l", new_resource.username)
60
+ shell_out_compact!("passwd", "-l", new_resource.username)
61
61
  end
62
62
 
63
63
  def unlock_user
64
- shell_out!("passwd", "-u", new_resource.username)
64
+ shell_out_compact!("passwd", "-u", new_resource.username)
65
65
  end
66
66
 
67
67
  private
@@ -82,10 +82,9 @@ class Chef
82
82
  end
83
83
 
84
84
  def manage_password
85
- if @current_resource.password != @new_resource.password && @new_resource.password
86
- Chef::Log.debug("#{@new_resource} setting password to #{@new_resource.password}")
87
- write_shadow_file
88
- end
85
+ return unless current_resource.password != new_resource.password && new_resource.password
86
+ Chef::Log.debug("#{new_resource} setting password to #{new_resource.password}")
87
+ write_shadow_file
89
88
  end
90
89
 
91
90
  def write_shadow_file
@@ -93,7 +92,7 @@ class Chef
93
92
  ::File.open(@password_file) do |shadow_file|
94
93
  shadow_file.each do |entry|
95
94
  user = entry.split(":").first
96
- if user == @new_resource.username
95
+ if user == new_resource.username
97
96
  buffer.write(updated_password(entry))
98
97
  else
99
98
  buffer.write(entry)
@@ -104,7 +103,7 @@ class Chef
104
103
 
105
104
  # FIXME: mostly duplicates code with file provider deploying a file
106
105
  s = ::File.stat(@password_file)
107
- mode = s.mode & 07777
106
+ mode = s.mode & 0o7777
108
107
  uid = s.uid
109
108
  gid = s.gid
110
109
 
@@ -116,7 +115,7 @@ class Chef
116
115
 
117
116
  def updated_password(entry)
118
117
  fields = entry.split(":")
119
- fields[1] = @new_resource.password
118
+ fields[1] = new_resource.password
120
119
  fields[2] = days_since_epoch
121
120
  fields.join(":")
122
121
  end
@@ -23,25 +23,25 @@ class Chef
23
23
  class Provider
24
24
  class User
25
25
  class Useradd < Chef::Provider::User
26
- # MAJOR XXX: this should become the base class of all Useradd providers instead of the linux implementation
26
+ # the linux version of this has been forked off, this is the base class now of solaris and AIX and should be abandoned
27
+ # and those provider should be rewritten like the linux version.
27
28
 
28
- UNIVERSAL_OPTIONS = [[:comment, "-c"], [:gid, "-g"], [:password, "-p"], [:shell, "-s"], [:uid, "-u"]]
29
+ UNIVERSAL_OPTIONS = [[:comment, "-c"], [:gid, "-g"], [:password, "-p"], [:shell, "-s"], [:uid, "-u"]].freeze
29
30
 
30
31
  def create_user
31
32
  command = compile_command("useradd") do |useradd|
32
33
  useradd.concat(universal_options)
33
34
  useradd.concat(useradd_options)
34
35
  end
35
- shell_out!(*command)
36
+ shell_out_compact!(command)
36
37
  end
37
38
 
38
39
  def manage_user
39
- unless universal_options.empty?
40
- command = compile_command("usermod") do |u|
41
- u.concat(universal_options)
42
- end
43
- shell_out!(*command)
40
+ return if universal_options.empty?
41
+ command = compile_command("usermod") do |u|
42
+ u.concat(universal_options)
44
43
  end
44
+ shell_out_compact!(command)
45
45
  end
46
46
 
47
47
  def remove_user
@@ -49,19 +49,19 @@ class Chef
49
49
  command << "-r" if managing_home_dir?
50
50
  command << "-f" if new_resource.force
51
51
  command << new_resource.username
52
- shell_out!(*command)
52
+ shell_out_compact!(command)
53
53
  end
54
54
 
55
55
  def check_lock
56
56
  # we can get an exit code of 1 even when it's successful on
57
57
  # rhel/centos (redhat bug 578534). See additional error checks below.
58
- passwd_s = shell_out!("passwd", "-S", new_resource.username, :returns => [0, 1])
58
+ passwd_s = shell_out_compact!("passwd", "-S", new_resource.username, returns: [0, 1])
59
59
  if whyrun_mode? && passwd_s.stdout.empty? && passwd_s.stderr.match(/does not exist/)
60
60
  # if we're in whyrun mode and the user is not yet created we assume it would be
61
61
  return false
62
62
  end
63
63
 
64
- raise Chef::Exceptions::User, "Cannot determine if #{@new_resource} is locked!" if passwd_s.stdout.empty?
64
+ raise Chef::Exceptions::User, "Cannot determine if #{new_resource} is locked!" if passwd_s.stdout.empty?
65
65
 
66
66
  status_line = passwd_s.stdout.split(" ")
67
67
  case status_line[1]
@@ -76,7 +76,7 @@ class Chef
76
76
  unless passwd_s.exitstatus == 0
77
77
  raise_lock_error = false
78
78
  if %w{redhat centos}.include?(node[:platform])
79
- passwd_version_check = shell_out!("rpm -q passwd")
79
+ passwd_version_check = shell_out_compact!("rpm", "-q", "passwd")
80
80
  passwd_version = passwd_version_check.stdout.chomp
81
81
 
82
82
  unless passwd_version == "passwd-0.73-1"
@@ -93,11 +93,11 @@ class Chef
93
93
  end
94
94
 
95
95
  def lock_user
96
- shell_out!("usermod", "-L", new_resource.username)
96
+ shell_out_compact!("usermod", "-L", new_resource.username)
97
97
  end
98
98
 
99
99
  def unlock_user
100
- shell_out!("usermod", "-U", new_resource.username)
100
+ shell_out_compact!("usermod", "-U", new_resource.username)
101
101
  end
102
102
 
103
103
  def compile_command(base_command)
@@ -130,12 +130,10 @@ class Chef
130
130
  end
131
131
 
132
132
  def update_options(field, option, opts)
133
- if @current_resource.send(field).to_s != new_resource.send(field).to_s
134
- if new_resource.send(field)
135
- Chef::Log.debug("#{new_resource} setting #{field} to #{new_resource.send(field)}")
136
- opts << option << new_resource.send(field).to_s
137
- end
138
- end
133
+ return unless current_resource.send(field).to_s != new_resource.send(field).to_s
134
+ return unless new_resource.send(field)
135
+ Chef::Log.debug("#{new_resource} setting #{field} to #{new_resource.send(field)}")
136
+ opts << option << new_resource.send(field).to_s
139
137
  end
140
138
 
141
139
  def useradd_options
@@ -150,8 +148,8 @@ class Chef
150
148
  # Pathname#cleanpath does a better job than ::File::expand_path (on both unix and windows)
151
149
  # ::File.expand_path("///tmp") == ::File.expand_path("/tmp") => false
152
150
  # ::File.expand_path("\\tmp") => "C:/tmp"
153
- return true if @current_resource.home.nil? && new_resource.home
154
- new_resource.home && Pathname.new(@current_resource.home).cleanpath != Pathname.new(new_resource.home).cleanpath
151
+ return true if current_resource.home.nil? && new_resource.home
152
+ new_resource.home && Pathname.new(current_resource.home).cleanpath != Pathname.new(new_resource.home).cleanpath
155
153
  end
156
154
 
157
155
  end
@@ -31,31 +31,30 @@ class Chef
31
31
 
32
32
  def initialize(new_resource, run_context)
33
33
  super
34
- @net_user = Chef::Util::Windows::NetUser.new(@new_resource.username)
34
+ @net_user = Chef::Util::Windows::NetUser.new(new_resource.username)
35
35
  end
36
36
 
37
37
  def load_current_resource
38
- if @new_resource.gid
38
+ if new_resource.gid
39
39
  Chef::Log.warn("The 'gid' attribute is not implemented by the Windows platform. Please use the 'group' resource to assign a user to a group.")
40
40
  end
41
41
 
42
- @current_resource = Chef::Resource::User.new(@new_resource.name)
43
- @current_resource.username(@new_resource.username)
44
- user_info = nil
42
+ @current_resource = Chef::Resource::User.new(new_resource.name)
43
+ current_resource.username(new_resource.username)
45
44
  begin
46
45
  user_info = @net_user.get_info
47
46
 
48
- @current_resource.uid(user_info[:user_id])
49
- @current_resource.comment(user_info[:full_name])
50
- @current_resource.home(user_info[:home_dir])
51
- @current_resource.shell(user_info[:script_path])
47
+ current_resource.uid(user_info[:user_id])
48
+ current_resource.comment(user_info[:full_name])
49
+ current_resource.home(user_info[:home_dir])
50
+ current_resource.shell(user_info[:script_path])
52
51
  rescue Chef::Exceptions::UserIDNotFound => e
53
52
  # e.message should be "The user name could not be found" but checking for that could cause a localization bug
54
53
  @user_exists = false
55
- Chef::Log.debug("#{@new_resource} does not exist (#{e.message})")
54
+ Chef::Log.debug("#{new_resource} does not exist (#{e.message})")
56
55
  end
57
56
 
58
- @current_resource
57
+ current_resource
59
58
  end
60
59
 
61
60
  # Check to see if the user needs any changes
@@ -64,12 +63,12 @@ class Chef
64
63
  # <true>:: If a change is required
65
64
  # <false>:: If the users are identical
66
65
  def compare_user
67
- unless @net_user.validate_credentials(@new_resource.password)
68
- Chef::Log.debug("#{@new_resource} password has changed")
66
+ unless @net_user.validate_credentials(new_resource.password)
67
+ Chef::Log.debug("#{new_resource} password has changed")
69
68
  return true
70
69
  end
71
70
  [ :uid, :comment, :home, :shell ].any? do |user_attrib|
72
- !@new_resource.send(user_attrib).nil? && @new_resource.send(user_attrib) != @current_resource.send(user_attrib)
71
+ !new_resource.send(user_attrib).nil? && new_resource.send(user_attrib) != current_resource.send(user_attrib)
73
72
  end
74
73
  end
75
74
 
@@ -98,7 +97,7 @@ class Chef
98
97
  end
99
98
 
100
99
  def set_options
101
- opts = { :name => @new_resource.username }
100
+ opts = { name: new_resource.username }
102
101
 
103
102
  field_list = {
104
103
  "comment" => "full_name",
@@ -110,14 +109,12 @@ class Chef
110
109
 
111
110
  field_list.sort { |a, b| a[0] <=> b[0] }.each do |field, option|
112
111
  field_symbol = field.to_sym
113
- if @current_resource.send(field_symbol) != @new_resource.send(field_symbol)
114
- if @new_resource.send(field_symbol)
115
- unless field_symbol == :password
116
- Chef::Log.debug("#{@new_resource} setting #{field} to #{@new_resource.send(field_symbol)}")
117
- end
118
- opts[option.to_sym] = @new_resource.send(field_symbol)
119
- end
112
+ next unless current_resource.send(field_symbol) != new_resource.send(field_symbol)
113
+ next unless new_resource.send(field_symbol)
114
+ unless field_symbol == :password
115
+ Chef::Log.debug("#{new_resource} setting #{field} to #{new_resource.send(field_symbol)}")
120
116
  end
117
+ opts[option.to_sym] = new_resource.send(field_symbol)
121
118
  end
122
119
  opts
123
120
  end
@@ -90,8 +90,10 @@ class Chef
90
90
  @prioritized_handlers ||= begin
91
91
  supported_handlers = self.supported_handlers
92
92
  if supported_handlers.empty?
93
- # if none of the providers specifically support the resource, we still need to pick one of the providers that are
94
- # enabled on the node to handle the why-run use case. FIXME we should only do this in why-run mode then.
93
+ # We always require a provider to be able to call define_resource_requirements on. In the why-run case we need
94
+ # a provider to say "assuming /etc/init.d/whatever would have been installed" and in the non-why-run case we
95
+ # need to make a best guess at "cannot find /etc/init.d/whatever". We are essentially defining a "default" provider
96
+ # for the platform, which is the best we can do, but which might give misleading errors, but we cannot read minds.
95
97
  Chef::Log.debug "No providers responded true to `supports?` for action #{action} on resource #{resource}, falling back to enabled handlers so we can return something anyway."
96
98
  supported_handlers = enabled_handlers
97
99
  end
@@ -65,6 +65,7 @@ require "chef/provider/env/windows"
65
65
  require "chef/provider/package/apt"
66
66
  require "chef/provider/package/chocolatey"
67
67
  require "chef/provider/package/dpkg"
68
+ require "chef/provider/package/dnf"
68
69
  require "chef/provider/package/easy_install"
69
70
  require "chef/provider/package/freebsd/port"
70
71
  require "chef/provider/package/freebsd/pkg"