自帶傀儡功能

自帶傀儡功能

我正在嘗試創建自己的功能。我不斷收到此訊息。

錯誤:無法從遠端伺服器檢索目錄:伺服器上出現錯誤 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

相關內容