本節書摘來自異步社群《puppet實戰手冊》一書中的第2章,第2.12節,作者:【英】john arundel著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
puppet通過regsubst函數提供了一種簡單的方式來處理文本,在字元串中進行搜尋和替換,或者從字元串中提取所需模式(子串)。人們經常需要用它來處理來自fact或來自外部程式的資料。
在這個例子中,讀者将看到如何使用regsubst提取ipv4位址的前三位(網絡部分,假設它是一個c類位址)。
操作步驟
按照下面的步驟來完成示例。
1. 在配置清單中添加下面的代碼:
2. 運作puppet:
工作原理
regsubst至少需要三個參數:source(輸入源)、pattern(比對模式)和replacement(替換内容)。在例子中,指定的source字元串作為$:: ipaddress,而這台機器上的值如下:
<code>10.96.247.132</code>
指定的pattern如下:
<code>(.*)\..*</code>
而replacement的内容如下:
<code>\1.0</code>
pattern将比對整個ip位址,捕獲圓括号内的ip位址前三位。捕獲的文本可以通過1的形式在replacement字元串中使用。
所有比對的文本(本示例中是整個字元串)都會被參數中指定的replacement所替換。在這裡是1(從source字元串中捕獲的文本),後面跟随字元串.0,它的計算結果如下:
<code>10.96.247.0</code>
當然,可以通過其他方式得到相同的結果,包括:
<code>$class_c = regsubst($::ipaddress, '\.\d+$', '.0')</code>
更多參考
pattern可以是任意的正規表達式,與if語句中正規表達式使用相同的(ruby)文法。