天天看點

《Puppet實戰手冊》——2.10 使用選擇器和case語句

本節書摘來自異步社群《puppet實戰手冊》一書中的第2章,第2.10節,作者:【英】john arundel著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

雖然可以用if來編寫任何條件語句,但puppet還是提供提供了一些其他的形式來幫助使用者更容易地編寫表達條件語句:選擇器(selecteor)和case語句。

操作步驟

下面是一些關于選擇器和case語句的例子。

1. 把下面的代碼加入到配置清單中:

2. 把下面的代碼加入到清單檔案中:

工作原理

示例示範了選擇器和case語句,接下來分别詳細地了解一下它們如何完成這個工作。

選擇器

在第一個例子中,使用了一個選擇器(?操作符),根據$:: operatingsystem的值為$systemtype變量選擇不同的值。這類似于c或ruby中的三元運算符,但不是僅在兩個可能的值之間進行選擇,而是可以根據需要有盡可能多的可選值。

puppet會比較$::operatingsystem和每個所提供的可能的值:ubuntu、debian等。這些值可以是正規表達式(例如,部分字元串比對或通配符比對),但在此例中,隻使用文字字元串(或全字元比對)。一旦找到了一個比對的值,選擇表達式就會傳回任何與比對的字元串相關聯的值。例如,如果$::operatingsystem的值是fedora,選擇器表達式将傳回字元串redhatlike并把其配置設定給變量$systemtype。

case語句

與選擇器不同,case語句不傳回一個值。case語句非常适合根據某個表達式的值選擇執行不同的代碼。在第二個例子中,使用case語句時,根據$operatingsystem的值,引入了debianlike類或redhatlike類。

此外,puppet将$::operatingsystem的值與可能的比對清單進行比較。這些可以是正規表達式,也可以是字元串,或如例子中一樣的用逗号分隔的字元串清單。當它找到某一個比對的選項時,則執行其對應的大括号之間的相關代碼。

是以,如果$::operatingsystem的值是ubuntu,那麼代碼include debianlike将被執行。

更多參考

一旦讀者掌握了選擇器和case語句的基本用法,就可以參考下面列出的有用的技巧。

正規表達式

類似于if語句,使用者可以在選擇器和case語句中使用正規表達式,還可以捕獲比對組的值,并使用$1、$2等引用它們。

預設值

選擇器和case語句都可以指定一個預設值,在沒有其他的選項相比對的情況下會自動選擇預設值。

繼續閱讀