天天看點

《Puppet實戰手冊》——2.12 使用正規表達式進行替換

本節書摘來自異步社群《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)文法。