diff options
author | Derek Groh <derekgroh@gmail.com> | 2018-08-27 16:37:48 -0500 |
---|---|---|
committer | Derek Groh <derekgroh@gmail.com> | 2018-08-29 14:56:13 -0500 |
commit | 84582e66edefb3cd2105928ea7e2428e0b13f5b4 (patch) | |
tree | 397ce034fdaf92511009a2d8c50d20ffe180292d | |
parent | 674e9f21f0748c7000dd920482335b8e8aeeed90 (diff) | |
download | chef-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.rb | 31 |
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 |