diff options
author | John McCrae <jmccrae@chef.io> | 2021-05-10 18:04:10 -0700 |
---|---|---|
committer | John McCrae <jmccrae@chef.io> | 2021-05-10 18:04:10 -0700 |
commit | 0136f4ff736237cd07f37cf465313649359230b2 (patch) | |
tree | 5b58e25ddfbc6b2d26e7fcd296909473109605ed | |
parent | aeac9b5dd1cdf006105a1c53332132d7765760c4 (diff) | |
download | chef-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.rb | 4 | ||||
-rw-r--r-- | lib/chef/resource/hostname.rb | 17 | ||||
-rw-r--r-- | spec/functional/resource/windows_hostname_spec.rb | 69 |
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 |