Я довольно часто использую инструменты 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 необходимо предварительно загрузить файл.
Поскольку я использую марионетку 3.8, я не могу использовать для каждого тип зацикливания. Я видел, что в марионетке 4 вы можете объявить список файлов, а затем зацикливаться на них и делать свое дело. Это круто ... но не работает в марионетке 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}",
}
}