[chef] chef powershell cookbook won't update the hostname


Chronological Thread 
  • From:
  • To: chef < >
  • Subject: [chef] chef powershell cookbook won't update the hostname
  • Date: Tue, 18 Oct 2011 21:52:50 -0700



hello. this still isn't working for me: updating Windows hostname using
powershell via chef isn't working. can anyone lend a hand?

debug output of the initial chef-client run on a newly launched
windows ec2 instance can be seen here:
http://groknaut.net/chef-windows-rehostname.txt

in that output, i notice how it's invoked and that it ran successfully:
[Tue, 18 Oct 2011 21:22:54 -0700] INFO: powershell[update-hostname] 
sh(c:/windows/system32/WindowsPowershell/v1.0/powers
hell.exe -ExecutionPolicy RemoteSigned -Command "& { 
C:\DOCUME~1\ops\LOCALS~1\Temp\1\chef-script20111018-2940-1y3pd5y-0.ps1 }")
[Tue, 18 Oct 2011 21:22:55 -0700] INFO: powershell[update-hostname] ran 
successfully


if it would help reveal what's going on, how could i run that by hand?
this file is no longer present:
C:\DOCUME~1\ops\LOCALS~1\Temp\1\chef-script20111018-2940-1y3pd5y-0.ps1
i wonder if i can tell chef-client to leave that temp file in place so
i can try to invoke it. if i had that file, how do i run it by hand? some
kind of ruby/chef-client/shell_out handwave handwave..?



details:

using the powershell cookbook, i'm trying to cause a newly launched
ec2 instance to update its hostname based on userdata, but it's not
working. (i *did* use ec2configservice to allow hostname updates.)

when i run the powershell script within powershell it works. i reboot
the host, and indeed it comes back up with the new name. but when i try
to run this powershell script via chef, the instance reboots, but it
doesn't come back with the new name.

below i show my recipe and the powershell script itself. any advice?


notice in the recipe i've tried to call the powershell script using
2 different methods (one is commented out in the recipe). neither
are working. are both invocations valid?

i also tried removing parts of the script that would write to STDOUT,
in case that was making chef unhappy. didn't seem to help.



node info:
###################################################################
[cheftain01]$ knife node show ip-DEADBEEF.ec2.internal
Node Name:   ip-DEADBEEF.ec2.internal
Environment: _default
FQDN:        ip-DEADBEEF.ec2.internal
IP:          50.17.113.175
Run List:    role[winpower]
Roles:       winpower
Recipes:     windows::default, windows::reboot_handler, powershell::default, 
powershell::rehostname
Platform:    windows 5.2.3790


recipe:
###################################################################
# Cookbook Name:: powershell
# Recipe:: rehostname
#

windows_reboot 300 do
    reason 'Because chef said so'
    action :nothing
end
windows_reboot 30 do
    action :cancel
end

powershell "update-hostname" do
    powershell_script = <<'POWERSHELL_SCRIPT'
    $webclient = new-object system.net.webclient
    $awsurl = "http://169.254.169.254/latest/user-data";
    $userdata ="c:\Local\Chef\userdata.txt"
    $webClient.DownloadFile("$awsurl","$userdata")
    # -r foo -h sous-chef-win -e trex -c trex
    $namefromuserdata = Get-Content $userdata | %{ $_.Split(' ')[3]; }
    $computername = Get-Content env:computername
    Write-Host -ForegroundColor Yellow "userdata: $namefromuserdata...."
    Write-Host -ForegroundColor Yellow "computername: $computername...."
    if ( $namefromuserdata -ine $computername )
    {
      Write-Host -ForegroundColor Green "renaming $computername to 
$namefromuserdata."
      $sysInfo = Get-WmiObject -Class Win32_ComputerSystem
      $result = $sysInfo.Rename($namefromuserdata)
      switch($result.ReturnValue)
        {
          0 { Write-Host -ForegroundColor Green "Success: renamed 
$computername to $namefromuserdata." }
          5 { Write-Host -ForegroundColor Red "This cmdlet must be execute 
with administrative privileges" }
          default { Write-Host -ForegroundColor Red "Error" }                 
     
        }                                                                     
     
    }
    else { Write-Host -ForegroundColor Green "NOT renaming $computername to 
$namefromuserdata." }
POWERSHELL_SCRIPT
    notifies :request, 'windows_reboot[300]'
    #notifies :create, "ruby_block[remove_rehostname]", :immediately
    creates "C:\\Local\\Chef\\hostname-updated.txt"
end

=begin
powershell "update-hostname" do
    command "C:\\Local\\bin\\update-hostname.ps1"
    action :run
    notifies :request, 'windows_reboot[30]'
end
=end

# not working yet:
ruby_block "remove_rehostname" do
  block do
    Chef::Log.info("Recipe rehostname completed, removing the destructive 
recipe[powershell::rehostname]")
    node.run_list.remove("recipe[powershell::rehostname]") if 
node.run_list.include?("recipe[powershell::rehostname]")
  end
  action :nothing
end



update-hostname.ps1:
###################################################################
$webclient = new-object system.net.webclient
$awsurl = "http://169.254.169.254/latest/user-data";
$userdata ="c:\Local\Chef\userdata.txt"
$webClient.DownloadFile("$awsurl","$userdata")
# in our userdata, hostname is the 4th element in array:
$namefromuserdata = Get-Content $userdata | %{ $_.Split(' ')[3]; }
$computername = Get-Content env:computername
Write-Host -ForegroundColor Yellow "userdata: $namefromuserdata...."
Write-Host -ForegroundColor Yellow "computername: $computername...."
if ( $namefromuserdata -ine $computername )
{
    Write-Host -ForegroundColor Green "renaming $computername to 
$namefromuserdata."
    $sysInfo = Get-WmiObject -Class Win32_ComputerSystem
    $result = $sysInfo.Rename($namefromuserdata)
        switch($result.ReturnValue)
        {  
            0 { Write-Host -ForegroundColor Green "Success: renamed 
$computername to $namefromuserdata." }
            5 { Write-Host -ForegroundColor Red "This cmdlet must be execute 
with administrative privileges" }
            default { Write-Host -ForegroundColor Red "Error" }
        }

else { Write-Host -ForegroundColor Green "NOT renaming $computername to 
$namefromuserdata." }



thanks,
kallen



Archive powered by MHonArc 2.6.16.

§