我想使用 Augeas 修改“/etc/inittab”,但这只有在安装了“sysvinit”包时才会发生。该包不受 Puppet 控制(也不应该受控制)。
Augeas 中的“onlyif”似乎无法检查 Augeas 之外的任何其他内容,即 Augeas 无法检查文件是否存在。
有没有办法在不创建自定义事实的情况下实现这一点?
答案1
写一个Augeas 提供商和限制它到事实检查包是否存在。
把它们加起来:
- 写一个
sysvinit_package
事实,带有价值true
或false
(甚至是包装版本) inittab
编写一个仅限于事实的类型和提供程序。
注意:augeasproviders
API 正在重新设计,以便轻松在augeasproviders
模块外创建提供程序。请参阅shellvar 独立提供程序(目前为 PoC,API 最终可能会以这种方式工作)例如。
或者,如果您只想使用类型augeas
而不是编写提供程序(尽管我建议这样做),您可以只编写一个事实并在 Puppet DSL 中使用它,以避免augeas
在sysvinit
未安装时声明资源。
答案2
一个糟糕的选择是放弃运行资源augeas
的资源类型,并在命令中检查包。exec
augtool
onlyif
我会遵循习惯事实。