我经常使用 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 中不起作用。
那么,除了多次复制/粘贴相同的代码之外,我还有其他解决方案吗?
干杯。
答案1
实现这一目标的最佳选择是创建一个定义的资源类型:
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}",
}
}