我经常使用 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...
Run Code Online (Sandbox Code Playgroud)
我想使用:
augeas { 'change_name_whatever':
lens => 'a_customized_lens',
incl => "[list of files to change],
changes => $change_set,
}
Run Code Online (Sandbox Code Playgroud)
但这是不可能的,因为 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,
}
}
Run Code Online (Sandbox Code Playgroud)
然后将其与标题中的数组一起使用:
customized::filetype { [
"$path/file1.properties",
"$path/file2.properties"
]:
change_set => $change_set,
}
Run Code Online (Sandbox Code Playgroud)
您甚至可以(我建议这样做)将更改集抽象为定义的资源类型中的键/值参数。例如:
define customized::filetype ($key, $value) {
augeas { "customized filetype ${title}":
lens => 'a_customized_lens',
incl => $name,
changes => "set ${key} ${value}",
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1331 次 |
最近记录: |