summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Groh <derekgroh@gmail.com>2018-08-27 16:37:48 -0500
committerDerek Groh <derekgroh@gmail.com>2018-08-29 14:56:13 -0500
commit84582e66edefb3cd2105928ea7e2428e0b13f5b4 (patch)
tree397ce034fdaf92511009a2d8c50d20ffe180292d
parent674e9f21f0748c7000dd920482335b8e8aeeed90 (diff)
downloadchef-84582e66edefb3cd2105928ea7e2428e0b13f5b4.tar.gz
Guard if system is a member of current workgroup
Signed-off-by: Derek Groh <derekgroh@github.io>
-rw-r--r--lib/chef/resource/windows_workgroup.rb31
1 files changed, 20 insertions, 11 deletions
diff --git a/lib/chef/resource/windows_workgroup.rb b/lib/chef/resource/windows_workgroup.rb
index 1dcabf562a..e10a780cc5 100644
--- a/lib/chef/resource/windows_workgroup.rb
+++ b/lib/chef/resource/windows_workgroup.rb
@@ -56,17 +56,20 @@ class Chef
action :join do
description "Update the workgroup."
- cmd = "$pswd = ConvertTo-SecureString \'#{new_resource.password}\' -AsPlainText -Force;"
- cmd << "$credential = New-Object System.Management.Automation.PSCredential (\"#{new_resource.user}\",$pswd);"
- cmd << "Add-Computer -WorkgroupName #{new_resource.workgroup_name} -Credential $credential" if new_resource.workgroup_name
- cmd << " -Force"
- converge_by("join workstation workgroup #{new_resource.workgroup_name}") do
- ps_run = powershell_out(cmd)
- raise "Failed to join the workgroup #{new_resource.workgroup_name}: #{ps_run.stderr}}" if ps_run.error?
- unless new_resource.reboot == :never
- reboot "Reboot to join workgroup #{new_resource.workgroup_name}" do
- action clarify_reboot(new_resource.reboot)
- reason "Reboot to join workgroup #{new_resource.workgroup_name}"
+ unless workgroup_member?
+ cmd = "$pswd = ConvertTo-SecureString \'#{new_resource.password}\' -AsPlainText -Force;"
+ cmd << "$credential = New-Object System.Management.Automation.PSCredential (\"#{new_resource.user}\",$pswd);"
+ cmd << "Add-Computer -WorkgroupName #{new_resource.workgroup_name} -Credential $credential" if new_resource.workgroup_name
+ cmd << " -Force"
+ workgroup_member?
+ converge_by("join workstation workgroup #{new_resource.workgroup_name}") do
+ ps_run = powershell_out(cmd)
+ raise "Failed to join the workgroup #{new_resource.workgroup_name}: #{ps_run.stderr}}" if ps_run.error?
+ unless new_resource.reboot == :never
+ reboot "Reboot to join workgroup #{new_resource.workgroup_name}" do
+ action clarify_reboot(new_resource.reboot)
+ reason "Reboot to join workgroup #{new_resource.workgroup_name}"
+ end
end
end
end
@@ -85,6 +88,12 @@ class Chef
reboot_action
end
end
+
+ def workgroup_member?
+ node_workgroup = powershell_out!("Get-WmiObject -Class Win32_ComputerSystem).Workgroup")
+ raise "Failed to determine if system already a member of workgroup #{new_resource.workgroup_name}" if node_workgroup.error?
+ node_workgroup.stdout.downcase.strip == new_resource.workgroup_name.downcase
+ end
end
end
end