summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Smith <tsmith84@gmail.com>2020-02-28 16:49:40 -0800
committerTim Smith <tsmith84@gmail.com>2020-04-05 12:24:06 -0700
commitcb60b16d66363d27fa4b5dd23a3b79379b08d330 (patch)
treeac519cea72b59934867a66171ecb84feb8f747b1
parent2f546b50bd67314251b0f62554fc71cbf6a7a29a (diff)
downloadchef-powershell_exec.tar.gz
Convert resources to powershell_execpowershell_exec
powershell_exec is significantly faster than powershell_script. We can use this now that we only support Windows 2012+ Signed-off-by: Tim Smith <tsmith@chef.io>
-rw-r--r--lib/chef/resource/powershell_package_source.rb16
-rw-r--r--lib/chef/resource/windows_ad_join.rb8
-rw-r--r--lib/chef/resource/windows_dfs_server.rb7
-rw-r--r--lib/chef/resource/windows_share.rb10
-rw-r--r--lib/chef/resource/windows_workgroup.rb4
5 files changed, 22 insertions, 23 deletions
diff --git a/lib/chef/resource/powershell_package_source.rb b/lib/chef/resource/powershell_package_source.rb
index d253de0958..d0915906b9 100644
--- a/lib/chef/resource/powershell_package_source.rb
+++ b/lib/chef/resource/powershell_package_source.rb
@@ -78,28 +78,28 @@ class Chef
if package_source_exists?
converge_if_changed :url, :trusted, :publish_location, :script_source_location, :script_publish_location do
update_cmd = build_ps_repository_command("Set", new_resource)
- res = powershell_out(update_cmd)
- raise "Failed to update #{new_resource.source_name}: #{res.stderr}" unless res.stderr.empty?
+ res = powershell_exec(update_cmd)
+ raise "Failed to update #{new_resource.source_name}: #{res.errors.first}" if res.error?
end
else
converge_by("register source: #{new_resource.source_name}") do
register_cmd = build_ps_repository_command("Register", new_resource)
- res = powershell_out(register_cmd)
- raise "Failed to register #{new_resource.source_name}: #{res.stderr}" unless res.stderr.empty?
+ res = powershell_exec(register_cmd)
+ raise "Failed to register #{new_resource.source_name}: #{res.errors.first}" if res.error?
end
end
else
if package_source_exists?
converge_if_changed :url, :trusted, :provider_name do
update_cmd = build_package_source_command("Set", new_resource)
- res = powershell_out(update_cmd)
- raise "Failed to update #{new_resource.source_name}: #{res.stderr}" unless res.stderr.empty?
+ res = powershell_exec(update_cmd)
+ raise "Failed to update #{new_resource.source_name}: #{res.errors.first}" if res.error?
end
else
converge_by("register source: #{new_resource.source_name}") do
register_cmd = build_package_source_command("Register", new_resource)
- res = powershell_out(register_cmd)
- raise "Failed to register #{new_resource.source_name}: #{res.stderr}" unless res.stderr.empty?
+ res = powershell_exec(register_cmd)
+ raise "Failed to register #{new_resource.source_name}: #{res.errors.first}" if res.error?
end
end
end
diff --git a/lib/chef/resource/windows_ad_join.rb b/lib/chef/resource/windows_ad_join.rb
index 690cc914dc..432366bc28 100644
--- a/lib/chef/resource/windows_ad_join.rb
+++ b/lib/chef/resource/windows_ad_join.rb
@@ -73,12 +73,12 @@ class Chef
cmd << " -Force"
converge_by("join Active Directory domain #{new_resource.domain_name}") do
- ps_run = powershell_out(cmd)
+ ps_run = powershell_exec(cmd)
if ps_run.error?
if sensitive?
raise "Failed to join the domain #{new_resource.domain_name}: *suppressed sensitive resource output*"
else
- raise "Failed to join the domain #{new_resource.domain_name}: #{ps_run.stderr}"
+ raise "Failed to join the domain #{new_resource.domain_name}: #{ps_run.errors.first}"
end
end
@@ -106,12 +106,12 @@ class Chef
cmd << " -Force"
converge_by("leave Active Directory domain #{node_domain}") do
- ps_run = powershell_out(cmd)
+ ps_run = powershell_exec(cmd)
if ps_run.error?
if sensitive?
raise "Failed to leave the domain #{node_domain}: *suppressed sensitive resource output*"
else
- raise "Failed to leave the domain #{node_domain}: #{ps_run.stderr}"
+ raise "Failed to leave the domain #{node_domain}: #{ps_run.errors.first}"
end
end
diff --git a/lib/chef/resource/windows_dfs_server.rb b/lib/chef/resource/windows_dfs_server.rb
index ae613d931b..8d5eedf441 100644
--- a/lib/chef/resource/windows_dfs_server.rb
+++ b/lib/chef/resource/windows_dfs_server.rb
@@ -2,7 +2,7 @@
# Author:: Jason Field
#
# Copyright:: 2018, Calastone Ltd.
-# Copyright:: 2019-2020, Chef Software Inc.
+# Copyright:: 2019-2020, Chef Software, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -47,14 +47,13 @@ class Chef
default: 3600
load_current_value do
- ps_results = powershell_out("Get-DfsnServerConfiguration -ComputerName '#{ENV["COMPUTERNAME"]}' | Select LdapTimeoutSec, PreferLogonDC, EnableSiteCostedReferrals, SyncIntervalSec, UseFqdn | ConvertTo-Json")
+ ps_results = powershell_exec("Get-DfsnServerConfiguration -ComputerName '#{ENV["COMPUTERNAME"]}' | Select LdapTimeoutSec, PreferLogonDC, EnableSiteCostedReferrals, SyncIntervalSec, UseFqdn").result
if ps_results.error?
raise "The dfs_server resource failed to fetch the current state via the Get-DfsnServerConfiguration PowerShell cmlet. Is the DFS Windows feature installed?"
end
Chef::Log.debug("The Get-DfsnServerConfiguration results were #{ps_results.stdout}")
- results = Chef::JSONCompat.from_json(ps_results.stdout)
use_fqdn results["UseFqdn"] || false
ldap_timeout_secs results["LdapTimeoutSec"]
@@ -67,7 +66,7 @@ class Chef
description "Configure DFS settings."
converge_if_changed do
- powershell_out("Set-DfsnServerConfiguration -ComputerName '#{ENV["COMPUTERNAME"]}' EnableSiteCostedReferrals $#{new_resource.enable_site_costed_referrals} -UseFqdn $#{new_resource.use_fqdn} -LdapTimeoutSec #{new_resource.ldap_timeout_secs} -PreferLogonDC $#{new_resource.prefer_login_dc} -SyncIntervalSec #{new_resource.sync_interval_secs}")
+ powershell_exec("Set-DfsnServerConfiguration -ComputerName '#{ENV["COMPUTERNAME"]}' EnableSiteCostedReferrals $#{new_resource.enable_site_costed_referrals} -UseFqdn $#{new_resource.use_fqdn} -LdapTimeoutSec #{new_resource.ldap_timeout_secs} -PreferLogonDC $#{new_resource.prefer_login_dc} -SyncIntervalSec #{new_resource.sync_interval_secs}")
end
end
end
diff --git a/lib/chef/resource/windows_share.rb b/lib/chef/resource/windows_share.rb
index 2c4d79522a..676aab3f29 100644
--- a/lib/chef/resource/windows_share.rb
+++ b/lib/chef/resource/windows_share.rb
@@ -106,16 +106,16 @@ class Chef
share_state_cmd = "Get-SmbShare -Name '#{desired.share_name}' | Select-Object Name,Path, Description, Temporary, CATimeout, ContinuouslyAvailable, ConcurrentUserLimit, EncryptData | ConvertTo-Json -Compress"
Chef::Log.debug("Running '#{share_state_cmd}' to determine share state'")
- ps_results = powershell_out(share_state_cmd)
+ ps_results = powershell_exec(share_state_cmd)
# detect a failure without raising and then set current_resource to nil
if ps_results.error?
- Chef::Log.debug("Error fetching share state: #{ps_results.stderr}")
+ Chef::Log.debug("Error fetching share state: #{ps_results.errors.first}")
current_value_does_not_exist!
end
- Chef::Log.debug("The Get-SmbShare results were #{ps_results.stdout}")
- results = Chef::JSONCompat.from_json(ps_results.stdout)
+ Chef::Log.debug("The Get-SmbShare results were #{ps_results.result}")
+ results = ps_results.result
path results["Path"]
description results["Description"]
@@ -130,7 +130,7 @@ class Chef
perm_state_cmd = %{Get-SmbShareAccess -Name "#{desired.share_name}" | Select-Object AccountName,AccessControlType,AccessRight | ConvertTo-Json -Compress}
Chef::Log.debug("Running '#{perm_state_cmd}' to determine share permissions state'")
- ps_perm_results = powershell_out(perm_state_cmd)
+ ps_perm_results = powershell_exec(perm_state_cmd)
# we raise here instead of warning like above because we'd only get here if the above Get-SmbShare
# command was successful and that continuing would leave us with 1/2 known state
diff --git a/lib/chef/resource/windows_workgroup.rb b/lib/chef/resource/windows_workgroup.rb
index bcb791af77..630a6e7c22 100644
--- a/lib/chef/resource/windows_workgroup.rb
+++ b/lib/chef/resource/windows_workgroup.rb
@@ -75,8 +75,8 @@ class Chef
unless workgroup_member?
converge_by("join workstation workgroup #{new_resource.workgroup_name}") do
- ps_run = powershell_out(join_command)
- raise "Failed to join the workgroup #{new_resource.workgroup_name}: #{ps_run.stderr}}" if ps_run.error?
+ ps_run = powershell_exec(join_command)
+ raise "Failed to join the workgroup #{new_resource.workgroup_name}: #{ps_run.errors.first}}" if ps_run.error?
unless new_resource.reboot == :never
reboot "Reboot to join workgroup #{new_resource.workgroup_name}" do