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
@@ -17,7 +17,6 @@
17
17
  #
18
18
 
19
19
  require "chef/provider/group/groupadd"
20
- require "chef/mixin/shell_out"
21
20
 
22
21
  class Chef
23
22
  class Provider
@@ -33,48 +32,42 @@ class Chef
33
32
  end
34
33
 
35
34
  def create_group
36
- command = "mkgroup"
37
- command << set_options << " #{@new_resource.group_name}"
38
- run_command(:command => command)
35
+ shell_out_compact!("mkgroup", set_options, new_resource.group_name)
39
36
  modify_group_members
40
37
  end
41
38
 
42
39
  def manage_group
43
- command = "chgroup"
44
40
  options = set_options
45
- #Usage: chgroup [-R load_module] "attr=value" ... group
46
41
  if options.size > 0
47
- command << options << " #{@new_resource.group_name}"
48
- run_command(:command => command)
42
+ shell_out_compact!("chgroup", options, new_resource.group_name)
49
43
  end
50
44
  modify_group_members
51
45
  end
52
46
 
53
47
  def remove_group
54
- run_command(:command => "rmgroup #{@new_resource.group_name}")
48
+ shell_out_compact!("rmgroup", new_resource.group_name)
55
49
  end
56
50
 
57
51
  def add_member(member)
58
- shell_out!("chgrpmem -m + #{member} #{@new_resource.group_name}")
52
+ shell_out_compact!("chgrpmem", "-m", "+", member, new_resource.group_name)
59
53
  end
60
54
 
61
55
  def set_members(members)
62
56
  return if members.empty?
63
- shell_out!("chgrpmem -m = #{members.join(',')} #{@new_resource.group_name}")
57
+ shell_out_compact!("chgrpmem", "-m", "=", members.join(","), new_resource.group_name)
64
58
  end
65
59
 
66
60
  def remove_member(member)
67
- shell_out!("chgrpmem -m - #{member} #{@new_resource.group_name}")
61
+ shell_out_compact!("chgrpmem", "-m", "-", member, new_resource.group_name)
68
62
  end
69
63
 
70
64
  def set_options
71
- opts = ""
72
- { :gid => "id" }.sort { |a, b| a[0] <=> b[0] }.each do |field, option|
73
- if @current_resource.send(field) != @new_resource.send(field)
74
- if @new_resource.send(field)
75
- Chef::Log.debug("#{@new_resource} setting #{field} to #{@new_resource.send(field)}")
76
- opts << " '#{option}=#{@new_resource.send(field)}'"
77
- end
65
+ opts = []
66
+ { gid: "id" }.sort { |a, b| a[0] <=> b[0] }.each do |field, option|
67
+ next unless current_resource.send(field) != new_resource.send(field)
68
+ if new_resource.send(field)
69
+ Chef::Log.debug("#{new_resource} setting #{field} to #{new_resource.send(field)}")
70
+ opts << "#{option}=#{new_resource.send(field)}"
78
71
  end
79
72
  end
80
73
  opts
@@ -24,12 +24,15 @@ class Chef
24
24
  provides :group, os: "darwin"
25
25
 
26
26
  def dscl(*args)
27
- host = "."
28
- stdout_result = ""; stderr_result = ""; cmd = "dscl #{host} -#{args.join(' ')}"
29
- status = shell_out(cmd)
27
+ argdup = args.dup
28
+ cmd = argdup.shift
29
+ shellcmd = [ "dscl", ".", "-#{cmd}", argdup ]
30
+ status = shell_out_compact(shellcmd)
31
+ stdout_result = ""
32
+ stderr_result = ""
30
33
  status.stdout.each_line { |line| stdout_result << line }
31
34
  status.stderr.each_line { |line| stderr_result << line }
32
- return [cmd, status, stdout_result, stderr_result]
35
+ [shellcmd.flatten.compact.join(" "), status, stdout_result, stderr_result]
33
36
  end
34
37
 
35
38
  def safe_dscl(*args)
@@ -37,18 +40,18 @@ class Chef
37
40
  return "" if ( args.first =~ /^delete/ ) && ( result[1].exitstatus != 0 )
38
41
  raise(Chef::Exceptions::Group, "dscl error: #{result.inspect}") unless result[1].exitstatus == 0
39
42
  raise(Chef::Exceptions::Group, "dscl error: #{result.inspect}") if result[2] =~ /No such key: /
40
- return result[2]
43
+ result[2]
41
44
  end
42
45
 
43
46
  def load_current_resource
44
- @current_resource = Chef::Resource::Group.new(@new_resource.name)
45
- @current_resource.group_name(@new_resource.group_name)
47
+ @current_resource = Chef::Resource::Group.new(new_resource.name)
48
+ current_resource.group_name(new_resource.group_name)
46
49
  group_info = nil
47
50
  begin
48
- group_info = safe_dscl("read /Groups/#{@new_resource.group_name}")
51
+ group_info = safe_dscl("read", "/Groups/#{new_resource.group_name}")
49
52
  rescue Chef::Exceptions::Group
50
53
  @group_exists = false
51
- Chef::Log.debug("#{@new_resource} group does not exist")
54
+ Chef::Log.debug("#{new_resource} group does not exist")
52
55
  end
53
56
 
54
57
  if group_info
@@ -57,21 +60,21 @@ class Chef
57
60
  val.strip! if val
58
61
  case key.downcase
59
62
  when "primarygroupid"
60
- @new_resource.gid(val) unless @new_resource.gid
61
- @current_resource.gid(val)
63
+ new_resource.gid(val) unless new_resource.gid
64
+ current_resource.gid(val)
62
65
  when "groupmembership"
63
- @current_resource.members(val.split(" "))
66
+ current_resource.members(val.split(" "))
64
67
  end
65
68
  end
66
69
  end
67
70
 
68
- @current_resource
71
+ current_resource
69
72
  end
70
73
 
71
74
  # get a free GID greater than 200
72
75
  def get_free_gid(search_limit = 1000)
73
76
  gid = nil; next_gid_guess = 200
74
- groups_gids = safe_dscl("list /Groups gid")
77
+ groups_gids = safe_dscl("list", "/Groups", "gid")
75
78
  while next_gid_guess < search_limit + 200
76
79
  if groups_gids =~ Regexp.new("#{Regexp.escape(next_gid_guess.to_s)}\n")
77
80
  next_gid_guess += 1
@@ -80,51 +83,51 @@ class Chef
80
83
  break
81
84
  end
82
85
  end
83
- return gid || raise("gid not found. Exhausted. Searched #{search_limit} times")
86
+ gid || raise("gid not found. Exhausted. Searched #{search_limit} times")
84
87
  end
85
88
 
86
89
  def gid_used?(gid)
87
90
  return false unless gid
88
- groups_gids = safe_dscl("list /Groups gid")
89
- !! ( groups_gids =~ Regexp.new("#{Regexp.escape(gid.to_s)}\n") )
91
+ groups_gids = safe_dscl("list", "/Groups", "gid")
92
+ !!( groups_gids =~ Regexp.new("#{Regexp.escape(gid.to_s)}\n") )
90
93
  end
91
94
 
92
95
  def set_gid
93
- @new_resource.gid(get_free_gid) if [nil, ""].include? @new_resource.gid
94
- raise(Chef::Exceptions::Group, "gid is already in use") if gid_used?(@new_resource.gid)
95
- safe_dscl("create /Groups/#{@new_resource.group_name} PrimaryGroupID #{@new_resource.gid}")
96
+ new_resource.gid(get_free_gid) if [nil, ""].include? new_resource.gid
97
+ raise(Chef::Exceptions::Group, "gid is already in use") if gid_used?(new_resource.gid)
98
+ safe_dscl("create", "/Groups/#{new_resource.group_name}", "PrimaryGroupID", new_resource.gid)
96
99
  end
97
100
 
98
101
  def set_members
99
102
  # First reset the memberships if the append is not set
100
- unless @new_resource.append
101
- Chef::Log.debug("#{@new_resource} removing group members #{@current_resource.members.join(' ')}") unless @current_resource.members.empty?
102
- safe_dscl("create /Groups/#{@new_resource.group_name} GroupMembers ''") # clear guid list
103
- safe_dscl("create /Groups/#{@new_resource.group_name} GroupMembership ''") # clear user list
104
- @current_resource.members([ ])
103
+ unless new_resource.append
104
+ Chef::Log.debug("#{new_resource} removing group members #{current_resource.members.join(' ')}") unless current_resource.members.empty?
105
+ safe_dscl("create", "/Groups/#{new_resource.group_name}", "GroupMembers", "") # clear guid list
106
+ safe_dscl("create", "/Groups/#{new_resource.group_name}", "GroupMembership", "") # clear user list
107
+ current_resource.members([ ])
105
108
  end
106
109
 
107
110
  # Add any members that need to be added
108
- if @new_resource.members && !@new_resource.members.empty?
111
+ if new_resource.members && !new_resource.members.empty?
109
112
  members_to_be_added = [ ]
110
- @new_resource.members.each do |member|
111
- members_to_be_added << member if !@current_resource.members.include?(member)
113
+ new_resource.members.each do |member|
114
+ members_to_be_added << member unless current_resource.members.include?(member)
112
115
  end
113
116
  unless members_to_be_added.empty?
114
- Chef::Log.debug("#{@new_resource} setting group members #{members_to_be_added.join(', ')}")
115
- safe_dscl("append /Groups/#{@new_resource.group_name} GroupMembership #{members_to_be_added.join(' ')}")
117
+ Chef::Log.debug("#{new_resource} setting group members #{members_to_be_added.join(', ')}")
118
+ safe_dscl("append", "/Groups/#{new_resource.group_name}", "GroupMembership", *members_to_be_added)
116
119
  end
117
120
  end
118
121
 
119
122
  # Remove any members that need to be removed
120
- if @new_resource.excluded_members && !@new_resource.excluded_members.empty?
123
+ if new_resource.excluded_members && !new_resource.excluded_members.empty?
121
124
  members_to_be_removed = [ ]
122
- @new_resource.excluded_members.each do |member|
123
- members_to_be_removed << member if @current_resource.members.include?(member)
125
+ new_resource.excluded_members.each do |member|
126
+ members_to_be_removed << member if current_resource.members.include?(member)
124
127
  end
125
128
  unless members_to_be_removed.empty?
126
- Chef::Log.debug("#{@new_resource} removing group members #{members_to_be_removed.join(', ')}")
127
- safe_dscl("delete /Groups/#{@new_resource.group_name} GroupMembership #{members_to_be_removed.join(' ')}")
129
+ Chef::Log.debug("#{new_resource} removing group members #{members_to_be_removed.join(', ')}")
130
+ safe_dscl("delete", "/Groups/#{new_resource.group_name}", "GroupMembership", *members_to_be_removed)
128
131
  end
129
132
  end
130
133
  end
@@ -132,8 +135,8 @@ class Chef
132
135
  def define_resource_requirements
133
136
  super
134
137
  requirements.assert(:all_actions) do |a|
135
- a.assertion { ::File.exists?("/usr/bin/dscl") }
136
- a.failure_message Chef::Exceptions::Group, "Could not find binary /usr/bin/dscl for #{@new_resource.name}"
138
+ a.assertion { ::File.exist?("/usr/bin/dscl") }
139
+ a.failure_message Chef::Exceptions::Group, "Could not find binary /usr/bin/dscl for #{new_resource.name}"
137
140
  # No whyrun alternative: this component should be available in the base install of any given system that uses it
138
141
  end
139
142
  end
@@ -145,24 +148,24 @@ class Chef
145
148
  end
146
149
 
147
150
  def manage_group
148
- if @new_resource.group_name && (@current_resource.group_name != @new_resource.group_name)
151
+ if new_resource.group_name && (current_resource.group_name != new_resource.group_name)
149
152
  dscl_create_group
150
153
  end
151
- if @new_resource.gid && (@current_resource.gid != @new_resource.gid)
154
+ if new_resource.gid && (current_resource.gid != new_resource.gid)
152
155
  set_gid
153
156
  end
154
- if @new_resource.members || @new_resource.excluded_members
157
+ if new_resource.members || new_resource.excluded_members
155
158
  set_members
156
159
  end
157
160
  end
158
161
 
159
162
  def dscl_create_group
160
- safe_dscl("create /Groups/#{@new_resource.group_name}")
161
- safe_dscl("create /Groups/#{@new_resource.group_name} Password '*'")
163
+ safe_dscl("create", "/Groups/#{new_resource.group_name}")
164
+ safe_dscl("create", "/Groups/#{new_resource.group_name}", "Password", "*")
162
165
  end
163
166
 
164
167
  def remove_group
165
- safe_dscl("delete /Groups/#{@new_resource.group_name}")
168
+ safe_dscl("delete", "/Groups/#{new_resource.group_name}")
166
169
  end
167
170
  end
168
171
  end
@@ -31,26 +31,26 @@ class Chef
31
31
  def define_resource_requirements
32
32
  super
33
33
  requirements.assert(:all_actions) do |a|
34
- a.assertion { ::File.exists?("/usr/bin/gpasswd") }
35
- a.failure_message Chef::Exceptions::Group, "Could not find binary /usr/bin/gpasswd for #{@new_resource}"
34
+ a.assertion { ::File.exist?("/usr/bin/gpasswd") }
35
+ a.failure_message Chef::Exceptions::Group, "Could not find binary /usr/bin/gpasswd for #{new_resource}"
36
36
  # No whyrun alternative: this component should be available in the base install of any given system that uses it
37
37
  end
38
38
  end
39
39
 
40
40
  def set_members(members)
41
- unless members.empty?
42
- shell_out!("gpasswd -M #{members.join(',')} #{@new_resource.group_name}")
41
+ if members.empty?
42
+ shell_out_compact!("gpasswd", "-M", "", new_resource.group_name)
43
43
  else
44
- shell_out!("gpasswd -M \"\" #{@new_resource.group_name}")
44
+ shell_out_compact!("gpasswd", "-M", members.join(","), new_resource.group_name)
45
45
  end
46
46
  end
47
47
 
48
48
  def add_member(member)
49
- shell_out!("gpasswd -a #{member} #{@new_resource.group_name}")
49
+ shell_out_compact!("gpasswd", "-a", member, new_resource.group_name)
50
50
  end
51
51
 
52
52
  def remove_member(member)
53
- shell_out!("gpasswd -d #{member} #{@new_resource.group_name}")
53
+ shell_out_compact!("gpasswd", "-d", member, new_resource.group_name)
54
54
  end
55
55
  end
56
56
  end
@@ -35,8 +35,8 @@ class Chef
35
35
  super
36
36
  required_binaries.each do |required_binary|
37
37
  requirements.assert(:all_actions) do |a|
38
- a.assertion { ::File.exists?(required_binary) }
39
- a.failure_message Chef::Exceptions::Group, "Could not find binary #{required_binary} for #{@new_resource}"
38
+ a.assertion { ::File.exist?(required_binary) }
39
+ a.failure_message Chef::Exceptions::Group, "Could not find binary #{required_binary} for #{new_resource}"
40
40
  # No whyrun alternative: this component should be available in the base install of any given system that uses it
41
41
  end
42
42
  end
@@ -44,54 +44,49 @@ class Chef
44
44
 
45
45
  # Create the group
46
46
  def create_group
47
- command = "groupadd"
48
- command << set_options
49
- command << groupadd_options
50
- run_command(:command => command)
47
+ shell_out_compact!("groupadd", set_options, groupadd_options)
51
48
  modify_group_members
52
49
  end
53
50
 
54
51
  # Manage the group when it already exists
55
52
  def manage_group
56
- command = "groupmod"
57
- command << set_options
58
- run_command(:command => command)
53
+ shell_out_compact!("groupmod", set_options)
59
54
  modify_group_members
60
55
  end
61
56
 
62
57
  # Remove the group
63
58
  def remove_group
64
- run_command(:command => "groupdel #{@new_resource.group_name}")
59
+ shell_out_compact!("groupdel", new_resource.group_name)
65
60
  end
66
61
 
67
62
  def modify_group_members
68
- if @new_resource.append
69
- if @new_resource.members && !@new_resource.members.empty?
63
+ if new_resource.append
64
+ if new_resource.members && !new_resource.members.empty?
70
65
  members_to_be_added = [ ]
71
- @new_resource.members.each do |member|
72
- members_to_be_added << member if !@current_resource.members.include?(member)
66
+ new_resource.members.each do |member|
67
+ members_to_be_added << member unless current_resource.members.include?(member)
73
68
  end
74
69
  members_to_be_added.each do |member|
75
- Chef::Log.debug("#{@new_resource} appending member #{member} to group #{@new_resource.group_name}")
70
+ Chef::Log.debug("#{new_resource} appending member #{member} to group #{new_resource.group_name}")
76
71
  add_member(member)
77
72
  end
78
73
  end
79
74
 
80
- if @new_resource.excluded_members && !@new_resource.excluded_members.empty?
75
+ if new_resource.excluded_members && !new_resource.excluded_members.empty?
81
76
  members_to_be_removed = [ ]
82
- @new_resource.excluded_members.each do |member|
83
- members_to_be_removed << member if @current_resource.members.include?(member)
77
+ new_resource.excluded_members.each do |member|
78
+ members_to_be_removed << member if current_resource.members.include?(member)
84
79
  end
85
80
 
86
81
  members_to_be_removed.each do |member|
87
- Chef::Log.debug("#{@new_resource} removing member #{member} from group #{@new_resource.group_name}")
82
+ Chef::Log.debug("#{new_resource} removing member #{member} from group #{new_resource.group_name}")
88
83
  remove_member(member)
89
84
  end
90
85
  end
91
86
  else
92
- members_description = @new_resource.members.empty? ? "none" : @new_resource.members.join(", ")
93
- Chef::Log.debug("#{@new_resource} setting group members to: #{members_description}")
94
- set_members(@new_resource.members)
87
+ members_description = new_resource.members.empty? ? "none" : new_resource.members.join(", ")
88
+ Chef::Log.debug("#{new_resource} setting group members to: #{members_description}")
89
+ set_members(new_resource.members)
95
90
  end
96
91
  end
97
92
 
@@ -112,23 +107,23 @@ class Chef
112
107
  # ==== Returns
113
108
  # <string>:: A string containing the option and then the quoted value
114
109
  def set_options
115
- opts = ""
116
- { :gid => "-g" }.sort { |a, b| a[0] <=> b[0] }.each do |field, option|
117
- if @current_resource.send(field) != @new_resource.send(field)
118
- if @new_resource.send(field)
119
- opts << " #{option} '#{@new_resource.send(field)}'"
120
- Chef::Log.debug("#{@new_resource} set #{field} to #{@new_resource.send(field)}")
121
- end
122
- end
110
+ opts = []
111
+ { gid: "-g" }.sort { |a, b| a[0] <=> b[0] }.each do |field, option|
112
+ next unless current_resource.send(field) != new_resource.send(field)
113
+ next unless new_resource.send(field)
114
+ opts << option
115
+ opts << new_resource.send(field)
116
+ Chef::Log.debug("#{new_resource} set #{field} to #{new_resource.send(field)}")
123
117
  end
124
- opts << " #{@new_resource.group_name}"
118
+ opts << new_resource.group_name
119
+ opts
125
120
  end
126
121
 
127
122
  def groupadd_options
128
- opts = ""
123
+ opts = []
129
124
  # Solaris doesn't support system groups.
130
- opts << " -r" if @new_resource.system && !node.platform?("solaris2")
131
- opts << " -o" if @new_resource.non_unique
125
+ opts << "-r" if new_resource.system && !node.platform?("solaris2")
126
+ opts << "-o" if new_resource.non_unique
132
127
  opts
133
128
  end
134
129
 
@@ -26,28 +26,26 @@ class Chef
26
26
  def load_current_resource
27
27
  super
28
28
  %w{group user}.each do |binary|
29
- raise Chef::Exceptions::Group, "Could not find binary /usr/sbin/#{binary} for #{@new_resource}" unless ::File.exists?("/usr/sbin/#{binary}")
29
+ raise Chef::Exceptions::Group, "Could not find binary /usr/sbin/#{binary} for #{new_resource}" unless ::File.exist?("/usr/sbin/#{binary}")
30
30
  end
31
31
  end
32
32
 
33
33
  # Create the group
34
34
  def create_group
35
- command = "group add"
36
- command << set_options
37
- shell_out!(command)
35
+ shell_out_compact!("group", "add", set_options)
38
36
 
39
- add_group_members(@new_resource.members)
37
+ add_group_members(new_resource.members)
40
38
  end
41
39
 
42
40
  # Manage the group when it already exists
43
41
  def manage_group
44
- if @new_resource.append
42
+ if new_resource.append
45
43
  members_to_be_added = [ ]
46
- if @new_resource.excluded_members && !@new_resource.excluded_members.empty?
44
+ if new_resource.excluded_members && !new_resource.excluded_members.empty?
47
45
  # First find out if any member needs to be removed
48
46
  members_to_be_removed = [ ]
49
- @new_resource.excluded_members.each do |member|
50
- members_to_be_removed << member if @current_resource.members.include?(member)
47
+ new_resource.excluded_members.each do |member|
48
+ members_to_be_removed << member if current_resource.members.include?(member)
51
49
  end
52
50
 
53
51
  unless members_to_be_removed.empty?
@@ -56,39 +54,39 @@ class Chef
56
54
 
57
55
  # Capture the members we need to add in
58
56
  # members_to_be_added to be added later on.
59
- @current_resource.members.each do |member|
57
+ current_resource.members.each do |member|
60
58
  members_to_be_added << member unless members_to_be_removed.include?(member)
61
59
  end
62
60
  end
63
61
  end
64
62
 
65
- if @new_resource.members && !@new_resource.members.empty?
66
- @new_resource.members.each do |member|
67
- members_to_be_added << member if !@current_resource.members.include?(member)
63
+ if new_resource.members && !new_resource.members.empty?
64
+ new_resource.members.each do |member|
65
+ members_to_be_added << member unless current_resource.members.include?(member)
68
66
  end
69
67
  end
70
68
 
71
- Chef::Log.debug("#{@new_resource} not changing group members, the group has no members to add") if members_to_be_added.empty?
69
+ Chef::Log.debug("#{new_resource} not changing group members, the group has no members to add") if members_to_be_added.empty?
72
70
 
73
71
  add_group_members(members_to_be_added)
74
72
  else
75
73
  # We are resetting the members of a group so use the same trick
76
74
  reset_group_membership
77
- Chef::Log.debug("#{@new_resource} setting group members to: none") if @new_resource.members.empty?
78
- add_group_members(@new_resource.members)
75
+ Chef::Log.debug("#{new_resource} setting group members to: none") if new_resource.members.empty?
76
+ add_group_members(new_resource.members)
79
77
  end
80
78
  end
81
79
 
82
80
  # Remove the group
83
81
  def remove_group
84
- shell_out!("group del #{@new_resource.group_name}")
82
+ shell_out_compact!("group", "del", new_resource.group_name)
85
83
  end
86
84
 
87
85
  # Adds a list of usernames to the group using `user mod`
88
86
  def add_group_members(members)
89
- Chef::Log.debug("#{@new_resource} adding members #{members.join(', ')}") if !members.empty?
87
+ Chef::Log.debug("#{new_resource} adding members #{members.join(', ')}") unless members.empty?
90
88
  members.each do |user|
91
- shell_out!("user mod -G #{@new_resource.group_name} #{user}")
89
+ shell_out_compact!("user", "mod", "-G", new_resource.group_name, user)
92
90
  end
93
91
  end
94
92
 
@@ -96,15 +94,11 @@ class Chef
96
94
  # "<name>_bak", create a new group with the same GID and
97
95
  # "<name>", then set correct members on that group
98
96
  def reset_group_membership
99
- rename = "group mod -n #{@new_resource.group_name}_bak #{@new_resource.group_name}"
100
- shell_out!(rename)
97
+ shell_out_compact!("group", "mod", "-n", "#{new_resource.group_name}_bak", new_resource.group_name)
101
98
 
102
- create = "group add"
103
- create << set_options(:overwrite_gid => true)
104
- shell_out!(create)
99
+ shell_out_compact!("group", "add", set_options(overwrite_gid: true))
105
100
 
106
- remove = "group del #{@new_resource.group_name}_bak"
107
- shell_out!(remove)
101
+ shell_out_compact!("group", "del", "#{new_resource.group_name}_bak")
108
102
  end
109
103
 
110
104
  # Little bit of magic as per Adam's useradd provider to pull and assign the command line flags
@@ -112,14 +106,15 @@ class Chef
112
106
  # ==== Returns
113
107
  # <string>:: A string containing the option and then the quoted value
114
108
  def set_options(overwrite_gid = false)
115
- opts = ""
116
- if overwrite_gid || @new_resource.gid && (@current_resource.gid != @new_resource.gid)
117
- opts << " -g '#{@new_resource.gid}'"
109
+ opts = []
110
+ if overwrite_gid || new_resource.gid && (current_resource.gid != new_resource.gid)
111
+ opts << "-g"
112
+ opts << new_resource.gid
118
113
  end
119
114
  if overwrite_gid
120
- opts << " -o"
115
+ opts << "-o"
121
116
  end
122
- opts << " #{@new_resource.group_name}"
117
+ opts << new_resource.group_name
123
118
  opts
124
119
  end
125
120
  end