Puppet
puppet 最佳實踐:在配置文件之間共享變數
我正在為我目前的 puppet 項目使用角色和配置文件方法。
puppet 最佳實踐告訴我:
- 在主類參數列表中公開所有必要的配置文件參數。
- 執行分層查找以填寫這些參數(在模組分層中具有預設值)
- 不要訪問其他模組/配置文件範圍內的變數
- 保持乾燥(不要重複自己)
現在我面臨以下問題(使用 puppet 5.5):
我有一個所有節點都包含的基本配置文件(配置 apt、設置時區、時間伺服器等)。然後我有幾個特定於應用程序的配置文件(例如,一個用於設置 IIS,一個用於設置 haproxy,等等…)。現在我想在我的應用程序配置文件中添加一個日誌伺服器。當然,我希望只在 hiera 中指定一次日誌伺服器(乾燥),但在所有配置文件中使用它。
我的第一種方法是將日誌伺服器參數添加到我的基本配置文件的參數列表中,然後使用範圍變數訪問從應用程序配置文件訪問它。但這與最佳實踐相矛盾,因為它在模組之間添加了隱藏的介面/依賴關係。
我可以想出的另一種方法是引入一個常用的分層變數,我通過顯式查找來查找它。例如:
class profile::haproxy( Stdlib::Host $log_server = lookup('common::log_server'), ) {}
這對我來說也很可疑。
所以我的問題是:如何在不違反最佳實踐的情況下在模組/配置文件之間共享變數?
我會在 hiera 本身中使用插值函式:
common::log_server: foo profile::haproxy::log_server: "%{lookup('common::log_server')}" profile::iis::log_server: "%{lookup('common::log_server')}"
這使配置文件保持獨立並保持 DRY。