Puppet:仅当特定包存在时运行 Augeas

Puppet:仅当特定包存在时运行 Augeas

我想使用 Augeas 修改“/etc/inittab”,但这只有在安装了“sysvinit”包时才会发生。该包不受 Puppet 控制(也不应该受控制)。

Augeas 中的“onlyif”似乎无法检查 Augeas 之外的任何其他内容,即 Augeas 无法检查文件是否存在。

有没有办法在不创建自定义事实的情况下实现这一点?

答案1

写一个Augeas 提供商限制它事实检查包是否存在。

把它们加起来:

  • 写一个sysvinit_package事实,带有价值truefalse(甚至是包装版本)
  • inittab编写一个仅限于事实的类型和提供程序。

注意:augeasprovidersAPI 正在重新设计,以便轻松在augeasproviders模块外创建提供程序。请参阅shellvar 独立提供程序(目前为 PoC,API 最终可能会以这种方式工作)例如。

或者,如果您只想使用类型augeas而不是编写提供程序(尽管我建议这样做),您可以只编写一个事实并在 Puppet DSL 中使用它,以避免augeassysvinit未安装时声明资源。

答案2

一个糟糕的选择是放弃运行资源augeas的资源类型,并在命令中检查包。execaugtoolonlyif

我会遵循习惯事实。

相关内容