Puppet - 函式



Puppet 支援函式,就像任何其他程式語言一樣,因為 Puppet 的基礎開發語言是 Ruby。它支援兩種型別的函式,分別稱為語句右值函式。

  • 語句獨立存在,並且沒有返回值。它們用於執行獨立的任務,例如在新清單檔案中匯入其他 Puppet 模組。

  • 右值返回數值,並且只能在語句需要數值時使用,例如賦值語句或 case 語句。

Puppet 中函式執行的關鍵在於,它只在 Puppet master 上執行,而不在客戶端或 Puppet agent 上執行。因此,它們只能訪問 Puppet master 上可用的命令和資料。已經存在不同型別的函式,使用者甚至有權根據需要建立自定義函式。下面列出了一些內建函式。

檔案函式

檔案資源的檔案函式用於在 Puppet 中載入模組,並以字串的形式返回所需輸出。它查詢的引數是 <模組名稱>/<檔案> 引用,這有助於從 Puppet 模組的檔案目錄載入模組。

例如,script/tesingscript.sh 將從 <模組名稱>/script/files/testingscript.sh 載入檔案。函式能夠讀取和接受絕對路徑,這有助於從磁碟上的任何位置載入檔案。

Include 函式

在 Puppet 中,include 函式與任何其他程式語言中的 include 函式非常相似。它用於宣告一個或多個類,這將導致評估這些類中存在的所有資源,並最終將它們新增到目錄中。它的工作方式是,include 函式接受類名、類列表或用逗號分隔的類名列表。

使用include語句時需要注意的一點是,它可以在一個類中多次使用,但只能包含單個類一次。如果包含的類接受引數,include 函式將自動使用<類名>::<引數名>作為查詢鍵來查詢它們的值。

include 函式不會導致類在宣告時包含在類中,為此我們需要使用包含函式。它甚至不會在已宣告的類及其周圍的類中建立依賴關係。

在 include 函式中,只允許使用類的全名,不允許使用相對名稱。

Defined 函式

在 Puppet 中,defined 函式有助於確定給定類或資源型別是在哪裡定義的,並返回布林值。還可以使用 define 來確定特定資源是否已定義或已定義的變數是否有值。使用 defined 函式時需要注意的關鍵點是,此函式至少接受一個字串引數,該引數可以是類名、型別名、資源引用或“$name”形式的變數引用。

Define 函式檢查本機和已定義的函式型別,包括模組提供的型別。型別和類按其名稱匹配。該函式透過使用資源引用來匹配資源宣告。

Define 函式匹配

# Matching resource types 
defined("file") 
defined("customtype")  

# Matching defines and classes 
defined("testing") 
defined("testing::java")  

# Matching variables 
defined('$name')  

# Matching declared resources 
defined(File['/tmp/file']) 
廣告