2015-11-20 78 views
0

我對廚師相當陌生,但我已經瀏覽了所有在線教程,覺得自己對基礎知識有一個體面的把握。我試圖從配方中運行Powershell腳本。腳本本身從Powershell運行良好,並按預期更新DNS IP設置。當我運行配方時,它也完成了,沒有錯誤,但嵌入的腳本沒有更新DNS設置,所以我假設它沒有正確執行,我不知道在哪裏查找錯誤/日誌。Chef recipe內的Powershell腳本故障排除

的配方下面貼,並通過chef-client.bat --local-mode --runlist 'recipe[prod_server::dns_settings]'

powershell_script 'Set DNS Servers' do 
    code = <<-EOH 
    $primary = "10.1.10.2" 
    $secondary = "10.1.10.225" 
    $DNSServers = "$primary","$secondary" 
    $message="" 
    function setDNS($DNSServers) 
    { 
     try 
     { 
      $NICs = Get-WMIObject Win32_NetworkAdapterConfiguration |where{$_.IPEnabled -eq "TRUE"} 
      Foreach($NIC in $NICs) 
     { 
     $message += $NIC.SetDNSServerSearchOrder(@($DNSServers)) | Out-String # set the DNS IPs and capture output to string 
     } 
      } 
     catch 
      { 
     $message += "An error occcured while setting NIC object." + "`n`rError: $_"; 
      } 
     #write-host $message #if necessary, display result messages 
    } 
    setDNS($DNSServers) 
    EOH 
    end 
+1

熟悉Chef和PowerShell的人都有點兒小生意。我強烈建議在廚師郵寄名單上詢問,而不是在這裏,因爲我知道他們中的一些人在看清單。 – coderanger

+0

我將取消註釋寫入主機並運行帶-l調試的主廚,IIRC powershell_script資源應在調試模式下打印stdout和stderr。 (但這可能取決於你的廚師版本...) – Tensibai

回答

1

我95%肯定你實際上打一個錯誤,而試圖運行腳本並不能正確處理它被執行。我知道,因爲這個確切的錯誤發生在我身上,一個沉默的失敗,對我來說,這是因爲雙引號。

兩種解決方法:

  1. 刪除所有雙引號。逃離可能的工作,但我從來沒有得到好運。

powershell_script 'Set DNS Servers' do code = <<-EOH $primary = '10.1.10.2' $secondary = '10.1.10.225' $DNSServers = $primary,$secondary $message='' function setDNS($DNSServers) { try { $NICs = Get-WMIObject Win32_NetworkAdapterConfiguration |where{$_.IPEnabled -eq 'TRUE'} Foreach($NIC in $NICs) { $message += $NIC.SetDNSServerSearchOrder(@($DNSServers)) | Out-String # set the DNS IPs and capture output to string } } catch { $message += 'An error occcured while setting NIC object.' + '`n`rError: $_'; } #write-host $message #if necessary, display result messages } setDNS($DNSServers) EOH end

  • 放在一個腳本文件中的腳本,寫入文件作爲一個資源,然後通知執行資源來執行的powershell腳本:
  • ```

    script_path = 
        win_friendly_path(File.join(Chef::Config[:file_cache_path],"os-permissions.ps1")) 
        script_name = "os-permissions.ps1" 
    
        execute script_name do 
        command "powershell \"#{script_path}\"" 
        action :nothing 
        end 
    
        cookbook_file script_path do 
        source "os-permissions.ps1" 
        action :create 
        notifies :run, "execute[#{script_name}]", :immediately 
        end 
    

    有了#2,我在我的食譜稱爲腳本文件中OS-permissions.ps1 \ DEFAULT \

    我無法從腳本中刪除所有雙引號時使用#2。我有時也直接從食譜直接執行腳本,但這並不簡單,可能也不是最佳做法(只是我懶惰)。

    +1

    謝謝尼克。刪除雙引號不起作用,但在添加「windows」和「chef_handler」食譜後,我可以使用第二種方法使其工作。 – MrShushhh

    +0

    不錯!我認爲你需要windows cookbook,因爲win_friendly_path()助手。我不知道你爲什麼需要chef_handler食譜,也許是因爲通知/訂閱系統。 –