chef 12.17.44 → 12.18.31

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -30,46 +30,42 @@ class Chef
30
30
  super
31
31
 
32
32
  requirements.assert(:all_actions) do |a|
33
- a.assertion { ::File.exists?("/usr/sbin/pw") }
34
- a.failure_message Chef::Exceptions::Group, "Could not find binary /usr/sbin/pw for #{@new_resource}"
33
+ a.assertion { ::File.exist?("/usr/sbin/pw") }
34
+ a.failure_message Chef::Exceptions::Group, "Could not find binary /usr/sbin/pw for #{new_resource}"
35
35
  # No whyrun alternative: this component should be available in the base install of any given system that uses it
36
36
  end
37
37
  end
38
38
 
39
39
  # Create the group
40
40
  def create_group
41
- command = "pw groupadd"
42
- command << set_options
43
-
44
- unless @new_resource.members.empty?
41
+ command = [ "pw", "groupadd", set_options ]
42
+ unless new_resource.members.empty?
45
43
  # pw group[add|mod] -M is used to set the full membership list on a
46
44
  # new or existing group. Because pw groupadd does not support the -m
47
45
  # and -d options used by manage_group, we treat group creation as a
48
46
  # special case and use -M.
49
- Chef::Log.debug("#{@new_resource} setting group members: #{@new_resource.members.join(',')}")
50
- command += " -M #{@new_resource.members.join(',')}"
47
+ Chef::Log.debug("#{new_resource} setting group members: #{new_resource.members.join(',')}")
48
+ command += [ "-M", new_resource.members.join(",") ]
51
49
  end
52
50
 
53
- run_command(:command => command)
51
+ shell_out_compact!(command)
54
52
  end
55
53
 
56
54
  # Manage the group when it already exists
57
55
  def manage_group
58
- command = "pw groupmod"
59
- command << set_options
60
56
  member_options = set_members_options
61
57
  if member_options.empty?
62
- run_command(:command => command)
58
+ shell_out_compact!("pw", "groupmod", set_options)
63
59
  else
64
60
  member_options.each do |option|
65
- run_command(:command => command + option)
61
+ shell_out_compact!("pw", "groupmod", set_options, option)
66
62
  end
67
63
  end
68
64
  end
69
65
 
70
66
  # Remove the group
71
67
  def remove_group
72
- run_command(:command => "pw groupdel #{@new_resource.group_name}")
68
+ shell_out_compact!("pw", "groupdel", new_resource.group_name)
73
69
  end
74
70
 
75
71
  # Little bit of magic as per Adam's useradd provider to pull and assign the command line flags
@@ -77,10 +73,11 @@ class Chef
77
73
  # ==== Returns
78
74
  # <string>:: A string containing the option and then the quoted value
79
75
  def set_options
80
- opts = " #{@new_resource.group_name}"
81
- if @new_resource.gid && (@current_resource.gid != @new_resource.gid)
82
- Chef::Log.debug("#{@new_resource}: current gid (#{@current_resource.gid}) doesnt match target gid (#{@new_resource.gid}), changing it")
83
- opts << " -g '#{@new_resource.gid}'"
76
+ opts = [ new_resource.group_name ]
77
+ if new_resource.gid && (current_resource.gid != new_resource.gid)
78
+ Chef::Log.debug("#{new_resource}: current gid (#{current_resource.gid}) doesnt match target gid (#{new_resource.gid}), changing it")
79
+ opts << "-g"
80
+ opts << new_resource.gid
84
81
  end
85
82
  opts
86
83
  end
@@ -91,26 +88,26 @@ class Chef
91
88
  members_to_be_added = [ ]
92
89
  members_to_be_removed = [ ]
93
90
 
94
- if @new_resource.append
91
+ if new_resource.append
95
92
  # Append is set so we will only add members given in the
96
93
  # members list and remove members given in the
97
94
  # excluded_members list.
98
- if @new_resource.members && !@new_resource.members.empty?
99
- @new_resource.members.each do |member|
100
- members_to_be_added << member if !@current_resource.members.include?(member)
95
+ if new_resource.members && !new_resource.members.empty?
96
+ new_resource.members.each do |member|
97
+ members_to_be_added << member unless current_resource.members.include?(member)
101
98
  end
102
99
  end
103
100
 
104
- if @new_resource.excluded_members && !@new_resource.excluded_members.empty?
105
- @new_resource.excluded_members.each do |member|
106
- members_to_be_removed << member if @current_resource.members.include?(member)
101
+ if new_resource.excluded_members && !new_resource.excluded_members.empty?
102
+ new_resource.excluded_members.each do |member|
103
+ members_to_be_removed << member if current_resource.members.include?(member)
107
104
  end
108
105
  end
109
106
  else
110
107
  # Append is not set so we're resetting the membership of
111
108
  # the group to the given members.
112
- members_to_be_added = @new_resource.members.dup
113
- @current_resource.members.each do |member|
109
+ members_to_be_added = new_resource.members.dup
110
+ current_resource.members.each do |member|
114
111
  # No need to re-add a member if it's present in the new
115
112
  # list of members
116
113
  if members_to_be_added.include? member
@@ -122,13 +119,13 @@ class Chef
122
119
  end
123
120
 
124
121
  unless members_to_be_added.empty?
125
- Chef::Log.debug("#{@new_resource} adding group members: #{members_to_be_added.join(',')}")
126
- opts << " -m #{members_to_be_added.join(',')}"
122
+ Chef::Log.debug("#{new_resource} adding group members: #{members_to_be_added.join(',')}")
123
+ opts << [ "-m", members_to_be_added.join(",") ]
127
124
  end
128
125
 
129
126
  unless members_to_be_removed.empty?
130
- Chef::Log.debug("#{@new_resource} removing group members: #{members_to_be_removed.join(',')}")
131
- opts << " -d #{members_to_be_removed.join(',')}"
127
+ Chef::Log.debug("#{new_resource} removing group members: #{members_to_be_removed.join(',')}")
128
+ opts << [ "-d", members_to_be_removed.join(",") ]
132
129
  end
133
130
 
134
131
  opts
@@ -33,21 +33,21 @@ class Chef
33
33
  def define_resource_requirements
34
34
  super
35
35
  requirements.assert(:all_actions) do |a|
36
- a.assertion { ::File.exists?("/usr/sbin/groupmod") }
37
- a.failure_message Chef::Exceptions::Group, "Could not find binary /usr/sbin/groupmod for #{@new_resource.name}"
36
+ a.assertion { ::File.exist?("/usr/sbin/groupmod") }
37
+ a.failure_message Chef::Exceptions::Group, "Could not find binary /usr/sbin/groupmod for #{new_resource.name}"
38
38
  # No whyrun alternative: this component should be available in the base install of any given system that uses it
39
39
  end
40
40
 
41
41
  requirements.assert(:create, :manage, :modify) do |a|
42
42
  a.assertion do
43
43
  begin
44
- to_add(@new_resource.members).all? { |member| Etc.getpwnam(member) }
44
+ to_add(new_resource.members).all? { |member| Etc.getpwnam(member) }
45
45
  rescue
46
46
  false
47
47
  end
48
48
  end
49
- a.failure_message Chef::Exceptions::Group, "Could not add users #{to_add(@new_resource.members).join(", ")} to #{@new_resource.group_name}: one of these users does not exist"
50
- a.whyrun "Could not find one of these users: #{to_add(@new_resource.members).join(", ")}. Assuming it will be created by a prior step"
49
+ a.failure_message Chef::Exceptions::Group, "Could not add users #{to_add(new_resource.members).join(', ')} to #{new_resource.group_name}: one of these users does not exist"
50
+ a.whyrun "Could not find one of these users: #{to_add(new_resource.members).join(', ')}. Assuming it will be created by a prior step"
51
51
  end
52
52
  end
53
53
 
@@ -62,19 +62,19 @@ class Chef
62
62
  end
63
63
 
64
64
  def to_add(members)
65
- members - @current_resource.members
65
+ members - current_resource.members
66
66
  end
67
67
 
68
68
  def add_member(member)
69
- shell_out!("groupmod -A #{member} #{@new_resource.group_name}")
69
+ shell_out_compact!("groupmod", "-A", member, new_resource.group_name)
70
70
  end
71
71
 
72
72
  def to_remove(members)
73
- @current_resource.members - members
73
+ current_resource.members - members
74
74
  end
75
75
 
76
76
  def remove_member(member)
77
- shell_out!("groupmod -R #{member} #{@new_resource.group_name}")
77
+ shell_out_compact!("groupmod", "-R", member, new_resource.group_name)
78
78
  end
79
79
 
80
80
  end
@@ -34,19 +34,19 @@ class Chef
34
34
  super
35
35
 
36
36
  requirements.assert(:all_actions) do |a|
37
- a.assertion { ::File.exists?("/usr/sbin/usermod") }
38
- a.failure_message Chef::Exceptions::Group, "Could not find binary /usr/sbin/usermod for #{@new_resource}"
37
+ a.assertion { ::File.exist?("/usr/sbin/usermod") }
38
+ a.failure_message Chef::Exceptions::Group, "Could not find binary /usr/sbin/usermod for #{new_resource}"
39
39
  # No whyrun alternative: this component should be available in the base install of any given system that uses it
40
40
  end
41
41
 
42
42
  requirements.assert(:modify, :manage) do |a|
43
- a.assertion { @new_resource.members.empty? || @new_resource.append }
43
+ a.assertion { new_resource.members.empty? || new_resource.append }
44
44
  a.failure_message Chef::Exceptions::Group, "setting group members directly is not supported by #{self}, must set append true in group"
45
45
  # No whyrun alternative - this action is simply not supported.
46
46
  end
47
47
 
48
48
  requirements.assert(:all_actions) do |a|
49
- a.assertion { @new_resource.excluded_members.empty? }
49
+ a.assertion { new_resource.excluded_members.empty? }
50
50
  a.failure_message Chef::Exceptions::Group, "excluded_members is not supported by #{self}"
51
51
  # No whyrun alternative - this action is simply not supported.
52
52
  end
@@ -57,17 +57,16 @@ class Chef
57
57
  # This provider only supports adding members with
58
58
  # append. Only if the action is create we will go
59
59
  # ahead and add members.
60
- if @new_resource.action.include?(:create)
61
- members.each do |member|
62
- add_member(member)
63
- end
64
- else
60
+ unless new_resource.action.include?(:create)
65
61
  raise Chef::Exceptions::UnsupportedAction, "Setting members directly is not supported by #{self}"
66
62
  end
63
+ members.each do |member|
64
+ add_member(member)
65
+ end
67
66
  end
68
67
 
69
68
  def add_member(member)
70
- shell_out!("usermod #{append_flags} #{@new_resource.group_name} #{member}")
69
+ shell_out_compact!("usermod", append_flags, new_resource.group_name, member)
71
70
  end
72
71
 
73
72
  def remove_member(member)
@@ -81,7 +80,7 @@ class Chef
81
80
  when "openbsd", "netbsd", "aix", "solaris2", "smartos", "omnios"
82
81
  "-G"
83
82
  when "solaris", "suse", "opensuse"
84
- "-a -G"
83
+ [ "-a", "-G" ]
85
84
  end
86
85
  end
87
86
 
@@ -30,26 +30,26 @@ class Chef
30
30
 
31
31
  def initialize(new_resource, run_context)
32
32
  super
33
- @net_group = Chef::Util::Windows::NetGroup.new(@new_resource.group_name)
33
+ @net_group = Chef::Util::Windows::NetGroup.new(new_resource.group_name)
34
34
  end
35
35
 
36
36
  def load_current_resource
37
- @current_resource = Chef::Resource::Group.new(@new_resource.name)
38
- @current_resource.group_name(@new_resource.group_name)
37
+ @current_resource = Chef::Resource::Group.new(new_resource.name)
38
+ current_resource.group_name(new_resource.group_name)
39
39
 
40
40
  members = nil
41
41
  begin
42
42
  members = @net_group.local_get_members
43
- rescue => e
43
+ rescue
44
44
  @group_exists = false
45
- Chef::Log.debug("#{@new_resource} group does not exist")
45
+ Chef::Log.debug("#{new_resource} group does not exist")
46
46
  end
47
47
 
48
48
  if members
49
- @current_resource.members(members)
49
+ current_resource.members(members)
50
50
  end
51
51
 
52
- @current_resource
52
+ current_resource
53
53
  end
54
54
 
55
55
  def create_group
@@ -58,10 +58,10 @@ class Chef
58
58
  end
59
59
 
60
60
  def manage_group
61
- if @new_resource.append
61
+ if new_resource.append
62
62
  members_to_be_added = [ ]
63
- @new_resource.members.each do |member|
64
- members_to_be_added << member if ! has_current_group_member?(member) && validate_member!(member)
63
+ new_resource.members.each do |member|
64
+ members_to_be_added << member if !has_current_group_member?(member) && validate_member!(member)
65
65
  end
66
66
 
67
67
  # local_add_members will raise ERROR_MEMBER_IN_ALIAS if a
@@ -69,19 +69,19 @@ class Chef
69
69
  @net_group.local_add_members(members_to_be_added) unless members_to_be_added.empty?
70
70
 
71
71
  members_to_be_removed = [ ]
72
- @new_resource.excluded_members.each do |member|
73
- member_sid = lookup_account_name(member)
72
+ new_resource.excluded_members.each do |member|
73
+ lookup_account_name(member)
74
74
  members_to_be_removed << member if has_current_group_member?(member)
75
75
  end
76
76
  @net_group.local_delete_members(members_to_be_removed) unless members_to_be_removed.empty?
77
77
  else
78
- @net_group.local_set_members(@new_resource.members)
78
+ @net_group.local_set_members(new_resource.members)
79
79
  end
80
80
  end
81
81
 
82
82
  def has_current_group_member?(member)
83
83
  member_sid = lookup_account_name(member)
84
- @current_resource.members.include?(member_sid)
84
+ current_resource.members.include?(member_sid)
85
85
  end
86
86
 
87
87
  def remove_group
@@ -97,12 +97,10 @@ class Chef
97
97
  end
98
98
 
99
99
  def lookup_account_name(account_name)
100
- begin
101
- Chef::ReservedNames::Win32::Security.lookup_account_name(locally_qualified_name(account_name))[1].to_s
102
- rescue Chef::Exceptions::Win32APIError
103
- Chef::Log.warn("SID for '#{locally_qualified_name(account_name)}' could not be found")
104
- ""
105
- end
100
+ Chef::ReservedNames::Win32::Security.lookup_account_name(locally_qualified_name(account_name))[1].to_s
101
+ rescue Chef::Exceptions::Win32APIError
102
+ Chef::Log.warn("SID for '#{locally_qualified_name(account_name)}' could not be found")
103
+ ""
106
104
  end
107
105
 
108
106
  end
@@ -58,7 +58,7 @@ class Chef
58
58
  end
59
59
 
60
60
  def load_current_resource
61
- @current_resource = Chef::Resource::Ifconfig.new(@new_resource.name)
61
+ @current_resource = Chef::Resource::Ifconfig.new(new_resource.name)
62
62
 
63
63
  @ifconfig_success = true
64
64
  @interfaces = {}
@@ -69,27 +69,26 @@ class Chef
69
69
  @int_name = line[0..9].strip
70
70
  @interfaces[@int_name] = { "hwaddr" => (line =~ /(HWaddr)/ ? ($') : "nil").strip.chomp }
71
71
  else
72
- @interfaces[@int_name]["inet_addr"] = (line =~ /inet addr:(\S+)/ ? ($1) : "nil") if line =~ /inet addr:/
73
- @interfaces[@int_name]["bcast"] = (line =~ /Bcast:(\S+)/ ? ($1) : "nil") if line =~ /Bcast:/
74
- @interfaces[@int_name]["mask"] = (line =~ /Mask:(\S+)/ ? ($1) : "nil") if line =~ /Mask:/
75
- @interfaces[@int_name]["mtu"] = (line =~ /MTU:(\S+)/ ? ($1) : "nil") if line =~ /MTU:/
76
- @interfaces[@int_name]["metric"] = (line =~ /Metric:(\S+)/ ? ($1) : "nil") if line =~ /Metric:/
72
+ @interfaces[@int_name]["inet_addr"] = (line =~ /inet addr:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /inet addr:/
73
+ @interfaces[@int_name]["bcast"] = (line =~ /Bcast:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /Bcast:/
74
+ @interfaces[@int_name]["mask"] = (line =~ /Mask:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /Mask:/
75
+ @interfaces[@int_name]["mtu"] = (line =~ /MTU:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /MTU:/
76
+ @interfaces[@int_name]["metric"] = (line =~ /Metric:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /Metric:/
77
77
  end
78
78
 
79
- if @interfaces.has_key?(@new_resource.device)
80
- @interface = @interfaces.fetch(@new_resource.device)
81
-
82
- @current_resource.target(@new_resource.target)
83
- @current_resource.device(@new_resource.device)
84
- @current_resource.inet_addr(@interface["inet_addr"])
85
- @current_resource.hwaddr(@interface["hwaddr"])
86
- @current_resource.bcast(@interface["bcast"])
87
- @current_resource.mask(@interface["mask"])
88
- @current_resource.mtu(@interface["mtu"])
89
- @current_resource.metric(@interface["metric"])
90
- end
79
+ next unless @interfaces.key?(new_resource.device)
80
+ @interface = @interfaces.fetch(new_resource.device)
81
+
82
+ current_resource.target(new_resource.target)
83
+ current_resource.device(new_resource.device)
84
+ current_resource.inet_addr(@interface["inet_addr"])
85
+ current_resource.hwaddr(@interface["hwaddr"])
86
+ current_resource.bcast(@interface["bcast"])
87
+ current_resource.mask(@interface["mask"])
88
+ current_resource.mtu(@interface["mtu"])
89
+ current_resource.metric(@interface["metric"])
91
90
  end
92
- @current_resource
91
+ current_resource
93
92
  end
94
93
 
95
94
  def define_resource_requirements
@@ -104,14 +103,12 @@ class Chef
104
103
 
105
104
  def action_add
106
105
  # check to see if load_current_resource found interface in ifconfig
107
- unless @current_resource.inet_addr
108
- unless @new_resource.device == loopback_device
106
+ unless current_resource.inet_addr
107
+ unless new_resource.device == loopback_device
109
108
  command = add_command
110
- converge_by ("run #{command} to add #{@new_resource}") do
111
- run_command(
112
- :command => command
113
- )
114
- Chef::Log.info("#{@new_resource} added")
109
+ converge_by("run #{command.join(' ')} to add #{new_resource}") do
110
+ shell_out_compact!(command)
111
+ Chef::Log.info("#{new_resource} added")
115
112
  end
116
113
  end
117
114
  end
@@ -122,31 +119,25 @@ class Chef
122
119
  def action_enable
123
120
  # check to see if load_current_resource found ifconfig
124
121
  # enables, but does not manage config files
125
- unless @current_resource.inet_addr
126
- unless @new_resource.device == loopback_device
127
- command = enable_command
128
- converge_by ("run #{command} to enable #{@new_resource}") do
129
- run_command(
130
- :command => command
131
- )
132
- Chef::Log.info("#{@new_resource} enabled")
133
- end
134
- end
122
+ return if current_resource.inet_addr
123
+ return if new_resource.device == loopback_device
124
+ command = enable_command
125
+ converge_by("run #{command.join(' ')} to enable #{new_resource}") do
126
+ shell_out_compact!(command)
127
+ Chef::Log.info("#{new_resource} enabled")
135
128
  end
136
129
  end
137
130
 
138
131
  def action_delete
139
132
  # check to see if load_current_resource found the interface
140
- if @current_resource.device
133
+ if current_resource.device
141
134
  command = delete_command
142
- converge_by ("run #{command} to delete #{@new_resource}") do
143
- run_command(
144
- :command => command
145
- )
146
- Chef::Log.info("#{@new_resource} deleted")
135
+ converge_by("run #{command.join(' ')} to delete #{new_resource}") do
136
+ shell_out_compact!(command)
137
+ Chef::Log.info("#{new_resource} deleted")
147
138
  end
148
139
  else
149
- Chef::Log.debug("#{@new_resource} does not exist - nothing to do")
140
+ Chef::Log.debug("#{new_resource} does not exist - nothing to do")
150
141
  end
151
142
  delete_config
152
143
  end
@@ -154,21 +145,19 @@ class Chef
154
145
  def action_disable
155
146
  # check to see if load_current_resource found the interface
156
147
  # disables, but leaves config files in place.
157
- if @current_resource.device
148
+ if current_resource.device
158
149
  command = disable_command
159
- converge_by ("run #{command} to disable #{@new_resource}") do
160
- run_command(
161
- :command => command
162
- )
163
- Chef::Log.info("#{@new_resource} disabled")
150
+ converge_by("run #{command.join(' ')} to disable #{new_resource}") do
151
+ shell_out_compact!(command)
152
+ Chef::Log.info("#{new_resource} disabled")
164
153
  end
165
154
  else
166
- Chef::Log.debug("#{@new_resource} does not exist - nothing to do")
155
+ Chef::Log.debug("#{new_resource} does not exist - nothing to do")
167
156
  end
168
157
  end
169
158
 
170
159
  def can_generate_config?
171
- ! @config_template.nil? && ! @config_path.nil?
160
+ !@config_template.nil? && !@config_path.nil?
172
161
  end
173
162
 
174
163
  def resource_for_config(path)
@@ -182,40 +171,40 @@ class Chef
182
171
  config = resource_for_config(@config_path)
183
172
  config.content(template.result(b))
184
173
  config.run_action(:create)
185
- @new_resource.updated_by_last_action(true) if config.updated?
174
+ new_resource.updated_by_last_action(true) if config.updated?
186
175
  end
187
176
 
188
177
  def delete_config
189
178
  return unless can_generate_config?
190
179
  config = resource_for_config(@config_path)
191
180
  config.run_action(:delete)
192
- @new_resource.updated_by_last_action(true) if config.updated?
181
+ new_resource.updated_by_last_action(true) if config.updated?
193
182
  end
194
183
 
195
184
  private
196
185
 
197
186
  def add_command
198
- command = "ifconfig #{@new_resource.device} #{@new_resource.target}"
199
- command << " netmask #{@new_resource.mask}" if @new_resource.mask
200
- command << " metric #{@new_resource.metric}" if @new_resource.metric
201
- command << " mtu #{@new_resource.mtu}" if @new_resource.mtu
187
+ command = [ "ifconfig", new_resource.device, new_resource.target ]
188
+ command += [ "netmask", new_resource.mask ] if new_resource.mask
189
+ command += [ "metric", new_resource.metric ] if new_resource.metric
190
+ command += [ "mtu", new_resource.mtu ] if new_resource.mtu
202
191
  command
203
192
  end
204
193
 
205
194
  def enable_command
206
- command = "ifconfig #{@new_resource.device} #{@new_resource.target}"
207
- command << " netmask #{@new_resource.mask}" if @new_resource.mask
208
- command << " metric #{@new_resource.metric}" if @new_resource.metric
209
- command << " mtu #{@new_resource.mtu}" if @new_resource.mtu
195
+ command = [ "ifconfig", new_resource.device, new_resource.target ]
196
+ command += [ "netmask", new_resource.mask ] if new_resource.mask
197
+ command += [ "metric", new_resource.metric ] if new_resource.metric
198
+ command += [ "mtu", new_resource.mtu ] if new_resource.mtu
210
199
  command
211
200
  end
212
201
 
213
202
  def disable_command
214
- "ifconfig #{@new_resource.device} down"
203
+ [ "ifconfig", new_resource.device, "down" ]
215
204
  end
216
205
 
217
206
  def delete_command
218
- "ifconfig #{@new_resource.device} down"
207
+ [ "ifconfig", new_resource.device, "down" ]
219
208
  end
220
209
 
221
210
  def loopback_device