Я использую команду exec для запуска сценария оболочки, который изменяет определенные файлы конфигурации других пакетов. Команда exec запускается всякий раз, когда меняются входные параметры, такие как IP-адреса, порты или URL-адрес, или когда изменяется сам сценарий оболочки.
Мне нужно использовать сценарий оболочки, потому что файлы конфигурации программного пакета немного отличаются между выпусками. Я думаю, что проще обновить файл конфигурации для каждого сценария sed, чем предоставлять разные шаблоны марионеток для каждой конкретной версии.
Но эта конфигурация не определяет, когда какой-либо из файлов конфигурации был изменен за пределами марионетки. Puppet не знает о файлах, которые были изменены сценарием оболочки.
Я ищу способ сделать команду exec зависимой от контрольных сумм других произвольных файлов:
exec { "my_command.sh":
only_if_file_has_changed => [
"/etc/mysoftware/config.xml",
"/etc/othersoftware/defaults",
]
}
Это возможно? Пожалуйста, порекомендуйте.
Это будет работать так:
exec { 'my_command.sh':
command => '/bin/my_command.sh',
subscribe => [
File['/etc/mysoftware/config.xml'],
File['/etc/othersoftware/defaults'],
],
refreshonly => true,
}
Очевидным ограничением здесь является то, что файлы /etc/mysoftware/config.xml
и /etc/othersoftware/defaults
также необходимо изменить через Puppet.
Если они заменены чем-то другим (внешним по отношению к Puppet), см. Ответ Феликса.
Вы также можете подписаться на Package['xxx']
или, конечно, любая другая более подходящая зависимость.
Puppet может решить эту проблему с помощью аудит метапараметр.
file { [ "/etc/mysoftware/config.xml",
"/etc/othersoftware/defaults" ]:
audit => 'content',
notify => Exec['my_command'],
}