
我正在嘗試創建自己的功能。我不斷收到此訊息。
錯誤:無法從遠端伺服器檢索目錄:伺服器上出現錯誤 400:函數「brent_k」未在節點 XYZ.com 上的 /etc/puppet/modules/munin/manifests/init.pp:17 傳回值
這是我的簡單程式碼
xyz.com:/etc/puppet/modules/munin/lib/puppet/parser/functions# cat brent_k.rb
module Puppet::Parser::Functions
newfunction(:brent_k, :type => :rvalue) do |args|
val = 'ok'
val
end
end
然後在我的清單中,我有
$a = brent_k()
我return val
也嘗試過。我怎樣才能解決這個問題?
答案1
當您變更任何自訂 ruby 程式碼(例如自訂函數)時,您必須重新啟動 Puppetmaster。如果您在 Passenger 下執行 Puppet,這表示需要重新啟動 Apache。否則,您將獲得舊版本。
此外,如果您在 puppetmaster 中託管多個環境,並且在其他環境中具有相同名稱的函數,則會出現相當嚴重的錯誤。這樣的話,你在呼叫函數名的時候就沒有辦法確定使用的是哪個環境的函數!它在所有環境中使用相同的函數命名空間...(這已確認發生在 Puppet 2.7.22 中,不確定 3.x 中)
答案2
正如文檔所說:
Puppet Master 快取自訂函數。如果您編輯現有函數(例如,在開發它時),則需要重新啟動 puppet master,然後才能使用新版本。
https://puppet.com/docs/puppet/latest/writing_custom_functions.html
關於重新啟動 Puppet master 的注意事項:
如果執行下列指令重啟Puppet master:
$ service puppetmaster restart
Restarting puppet master
puppetmaster not configured to start, please edit /etc/default/puppetmaster to enable
.
您會注意到服務停止但沒有啟動。
在這種情況下,正如 Steve Shipway 所提到的,您可能在 Passenger 下執行 Puppet master,並且需要重新載入 apache2 才能真正重新啟動 Puppet master:
$ service apache2 reload