summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn McCrae <jmccrae@chef.io>2021-05-10 18:04:10 -0700
committerJohn McCrae <jmccrae@chef.io>2021-05-10 18:04:10 -0700
commit0136f4ff736237cd07f37cf465313649359230b2 (patch)
tree5b58e25ddfbc6b2d26e7fcd296909473109605ed
parentaeac9b5dd1cdf006105a1c53332132d7765760c4 (diff)
downloadchef-0136f4ff736237cd07f37cf465313649359230b2.tar.gz
updated the hostname resource to use Rename-Computer over WMI. There
Signed-off-by: John McCrae <jmccrae@chef.io>
-rw-r--r--kitchen-tests/cookbooks/end_to_end/recipes/windows.rb4
-rw-r--r--lib/chef/resource/hostname.rb17
-rw-r--r--spec/functional/resource/windows_hostname_spec.rb69
3 files changed, 76 insertions, 14 deletions
diff --git a/kitchen-tests/cookbooks/end_to_end/recipes/windows.rb b/kitchen-tests/cookbooks/end_to_end/recipes/windows.rb
index e518aa522d..0f8a7446d0 100644
--- a/kitchen-tests/cookbooks/end_to_end/recipes/windows.rb
+++ b/kitchen-tests/cookbooks/end_to_end/recipes/windows.rb
@@ -136,10 +136,6 @@ end
include_recipe "::_ohai_hint"
-hostname "new-hostname" do
- windows_reboot false
-end
-
user "phil" do
uid "8019"
end
diff --git a/lib/chef/resource/hostname.rb b/lib/chef/resource/hostname.rb
index 930d35477e..0ba219858d 100644
--- a/lib/chef/resource/hostname.rb
+++ b/lib/chef/resource/hostname.rb
@@ -279,18 +279,15 @@ class Chef
Rename-Computer -NewName #{new_resource.hostname}
}
else {
- $temp_user = #{new_resource.domain_user}
- $temp_password = #{new_resource.domain_password}
- if ([string]::IsNullOrEmpty($temp_user)){
- $temp_user = "Chef"
+ try {
+ $user = #{new_resource.domain_user}
+ $secure_password = #{new_resource.domain_password} | Convertto-SecureString -AsPlainText -Force
+ $Credentials = New-Object System.Management.Automation.PSCredential -Argumentlist ($user, $secure_password)
+ Rename-Computer -NewName #{new_resource.hostname} -DomainCredential $Credentials
}
- if ([string]::IsNullOrEmpty($temp_password)){
- $temp_user = "P@ssw0rd"
+ catch {
+ Write-Error "Username or Password parameters are invalid. Please verify them and try again"
}
- $user = $temp_user
- $secure_password = $temp_password | Convertto-SecureString -AsPlainText -Force
- $Credentials = New-Object System.Management.Automation.PSCredential -Argumentlist ($user, $secure_password)
- Rename-Computer -NewName #{new_resource.hostname} -DomainCredential $Credentials
}
EOH
end
diff --git a/spec/functional/resource/windows_hostname_spec.rb b/spec/functional/resource/windows_hostname_spec.rb
new file mode 100644
index 0000000000..f62c2a559c
--- /dev/null
+++ b/spec/functional/resource/windows_hostname_spec.rb
@@ -0,0 +1,69 @@
+# Author: John McCrae (john.mccrae@progress.com)
+# Copyright:: Copyright (c) Chef Software Inc.
+# License: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+require "spec_helper"
+require "chef/mixin/powershell_exec"
+require "chef/resource/hostname"
+
+describe Chef::Resource::Hostname, :windows_only do
+ include Chef::Mixin::PowershellExec
+
+ def get_domain_status
+ powershell_exec!("(Get-WmiObject -Class Win32_ComputerSystem).PartofDomain").result
+ end
+
+ let(:new_hostname) { "New-Hostname" }
+ let(:local_domain_user) { "chef" }
+ let(:local_domain_password) { "P@ssw0rd" }
+ let(:local_windows_reboot) { false }
+ let(:domain_status) { get_domain_status }
+
+ let(:run_context) do
+ node = Chef::Node.new
+ node.consume_external_attrs(OHAI_SYSTEM.data, {}) # node[:languages][:powershell][:version]
+ node.automatic["os"] = "windows"
+ node.automatic["platform"] = "windows"
+ node.automatic["platform_version"] = "6.1"
+ node.automatic["kernel"][:machine] = :x86_64 # Only 64-bit architecture is supported
+ empty_events = Chef::EventDispatch::Dispatcher.new
+ Chef::RunContext.new(node, {}, empty_events)
+ end
+
+ subject do
+ new_resource = Chef::Resource::Hostname.new("fakey-fakerson", run_context)
+ new_resource.hostname = "foobar"
+ new_resource.domain_user = "chef"
+ new_resource.domain_password = "P@ssw0rd"
+ new_resource.windows_reboot = false
+ new_resource
+ end
+
+
+ describe "Changing machine names" do
+
+ context "the system does not get renamed when in a domain" do
+
+ it "does not change" do
+ subject.windows_reboot false
+ expect(subject).to_not be_updated_by_last_action
+ end
+
+ end
+
+ end
+
+end \ No newline at end of file