Puppet

Puppet,使用 augeas 更改多個屬性文件

  • January 12, 2016

我經常使用 puppet 和 augeas 工具來配置屬性文件。我的最新要求是將相同的固定更改集應用於相當長的屬性文件列表。所以,我想一次性完成,而不是為每個屬性文件編寫一個 augeas。

例子:

 augeas { 'change_name_whatever':
   lens    => 'a_customized_lens',
   incl    => "$path/file1.properties", 
   changes => $change_set,
 }
 augeas { 'change_name_whatever':
   lens    => 'a_customized_lens',
   incl    => "$path/file2.properties", 
   changes => $change_set,
 }
etc...

我想使用:

 augeas { 'change_name_whatever':
   lens    => 'a_customized_lens',
   incl    => "[list of files to change], 
   changes => $change_set,
 }

但這是不可能的,因為 augeas 需要預載入文件。

因為我使用的是 puppet 3.8,所以我不能使用foreach類型的循環。我看到在 puppet 4 中你可以聲明一個文件列表,然後循環它們並做你的事情。這很酷……但在 puppet 3 中不起作用。

那麼,我是否有任何其他解決方案,然後多次複製/粘貼相同的程式碼?

乾杯。

實現這一目標的最佳選擇是創建一個已定義的資源類型:

define customized::filetype ($change_set) {
augeas { "customized filetype ${title}":
   lens    => 'a_customized_lens',
   incl    => $name, 
   changes => $change_set,
 }
}

然後將其與標題中的數組一起使用:

customized::filetype { [
 "$path/file1.properties",
 "$path/file2.properties"
 ]:
 change_set => $change_set,
}

您甚至可以(我推薦它)將更改集抽象為已定義資源類型中的鍵/值參數。例如:

define customized::filetype ($key, $value) {
augeas { "customized filetype ${title}":
   lens    => 'a_customized_lens',
   incl    => $name, 
   changes => "set ${key} ${value}",
 }
}

引用自:https://serverfault.com/questions/748437