Puppet - 自定義函式



如前一章所述,函式為使用者提供了開發自定義函式的許可權。Puppet 可以透過使用自定義函式來擴充套件其解釋能力。自定義函式有助於提高和擴充套件 Puppet 模組和清單檔案的強大功能。

編寫自定義函式

在編寫函式之前,需要牢記以下幾點。

  • 在 Puppet 中,函式由編譯器執行,這意味著所有函式都在 Puppet master 上執行,並且它們不需要處理任何 Puppet 客戶端。函式只能與代理互動,前提是資訊以事實的形式提供。

  • Puppet master 會捕獲自定義函式,這意味著如果對 Puppet 函式進行了一些更改,則需要重新啟動 Puppet master。

  • 函式將在伺服器上執行,這意味著函式需要的任何檔案都應該存在於伺服器上,並且如果函式需要直接訪問客戶端機器,則無法執行任何操作。

  • 總共有兩種不同型別的函式可用,一種是返回值的 Rvalue 函式,另一種是不返回任何值的語句函式。

  • 包含函式的檔名應與檔案中的函式名相同。否則,它將不會自動載入。

放置自定義函式的位置

所有自定義函式都作為單獨的.rb檔案實現,並在模組之間分發。需要將自定義函式放在 lib/puppet/parser/function 中。可以從以下位置的.rb檔案載入函式。

  • $libdir/puppet/parser/functions
  • Ruby $LOAD_PATH 中的 puppet/parser/functions 子目錄

建立新函式

新函式是使用puppet::parser::Functions模組內的newfunction方法建立或定義的。需要將函式名稱作為符號傳遞給newfunction方法,並將要執行的程式碼作為塊傳遞。以下示例是一個函式,用於將字串寫入 /user 目錄內的檔案。

module Puppet::Parser::Functions 
   newfunction(:write_line_to_file) do |args| 
      filename = args[0] 
      str = args[1] 
      File.open(filename, 'a') {|fd| fd.puts str } 
   end 
end

一旦使用者聲明瞭函式,就可以在清單檔案中使用它,如下所示。

write_line_to_file('/user/vipin.txt, "Hello vipin!")
廣告