2016-08-03 15 views
0

我有一個腳本,用於從機器檢索IP地址,然後執行一些邏輯操作來決定給變量賦予什麼值。然後,我用這個值來做出關於機器工作環境的一些決定。如何檢索事實並使用它將自定義值存儲在Puppet中的變量中?

我想把這個翻譯成Puppet,但我不知道如何繼續。我知道我可以使用事實檢索IP地址,但是我應該在清單還是模板中執行此操作?另外,我應該在哪裏執行邏輯操作。請記住,我將進行字符串操作。

總而言之,這些是我需要的步驟。

  1. 從機器獲取IP地址。

  2. 執行邏輯操作。

  3. 將結果傳遞給Puppet清單。

重點是:我如何檢索事實作爲一個變量,我應該在哪裏應該使用該變量的代碼?

在此先感謝。

+0

這是非常模糊的。你應該詳細說明第2點和第3點,以便人們可以幫助你。 –

+0

你能提供一個腳本的例子嗎? – ptierno

+0

我認爲這裏的操作並不重要。我將要做簡單的字符串操作,並檢查是否有條件。 重點是我如何檢索事實來處理它,我應該在哪裏放置代碼? 我要編輯這個問題。 – EGS

回答

2

你可以不正是「檢索」用事實的IP,但目錄編譯器可以和做收到它作爲一個事實。前者表明目錄編譯器在該過程中具有主動作用,而沒有。

你有兩個一般的選擇:

  • 計算派生值的節點
  • 計算在主服務器上得到的值

您可以通過編寫一個計算節點上的值上習慣的事實。依靠Facter爲其提供IP,可以簡化其工作。結果將作爲自己的獨立事實呈現給目錄編譯器,並且該端不需要任何特殊的地方就可以在任何地方使用它。

作爲一個事實計算派生值的缺點包括這樣做的代碼被複制到所有可能被檢查的節點上,並且如果一個節點受到損害,那麼原則上這個事實的值可以被欺騙。另外,這個自定義的事實可能需要在Ruby中實現,以防萬一這是你的問題。

在目錄生成器中執行計算並不是特別困難。你可以將它作爲一個自定義函數來實現,這個函數的複雜性與自定義事實相當,但我建議在一個類中進行,並將結果分配給該類的類變量。具體來說,你應該如何實現值計算取決於計算的細節。例如,

class site::derived_data { 
    $ip_pieces = split($ipaddress, '[.]') 

    # This is the derived value we are computing: 
    $department = $ip_pieces[2] ? { 
     0 => 'network operations', 

     # ... 

     default => 'other' 
    } 
} 

然後,您可以使用它在其他地方,像這樣:

class mymodule::myclass(
    # parameters ... 
    ) { 
    include site::derived_data 

    notify { $site::derived_data::department : } 
} 
相關問題