Puppet: запускать Augeas только при наличии определенного пакета

Я хочу использовать Augeas для изменения "/etc/inittab", но это должно происходить только тогда, когда установлен пакет "sysvinit". Этот пакет не находится под контролем Puppet (и не должен быть).

"Onlyif" из Augeas, похоже, не способен проверять что-либо, кроме Augeas, id Augeas не может проверить, существует ли файл.

Есть ли способ достичь этого без создания собственного факта?

2 ответа

Решение

Напишите провайдеру Augeas и ограничьте его фактом, который проверяет наличие пакета.

Подвести итог:

  • Напиши sysvinit_package факт, со значением true или же false (или даже версия пакета)
  • Напишите тип и провайдера для inittab который ограничен фактом.

Обратите внимание augeasproviders API переделывается, чтобы легко создавать провайдеров вне augeasproviders модуль. См., Например, автономный поставщик shellvar (PoC на данный момент, API, вероятно, будет работать таким же образом).

В качестве альтернативы, если вы просто хотите использовать augeas введите вместо того, чтобы писать провайдера (хотя я бы порекомендовал), вы можете просто написать факт и использовать его в Puppet DSL, чтобы избежать объявления augeas ресурс когда sysvinit не установлен

Ужасной альтернативой будет угробление augeas тип ресурса для exec ресурс работает augtoolи проверка пакета в onlyif команда.

Я бы пошел с обычным фактом.

Другие вопросы по тегам