У меня есть следующий ресурс:
exec{'regen-nagios-hosts':
command => '/usr/local/bin/generate-nagios-host-definitions-from-hostfile < /etc/hosts > /etc/nagios3/conf.d/sv-hosts.cfg',
user => 'root',
before => Class['nagios::server'],
notify => Service['nagios3'],
require => File['/etc/hosts'],
}
В идеале я бы хотел перезапустить Nagios, только если файл изменился. Кажется, что мне действительно нужен файловый ресурс, но у файловых ресурсов есть шаблон или фактическое содержимое, а не сценарий. Как я могу сгенерировать файл (или изменить свой метод) для перезапуска Nagios, только когда /etc/nagios3/conf.d/sv-hosts.cfg
изменения?
Предполагая, что каждый раз, когда ваш скрипт запускается, он будет генерировать файл точно так же, как и для данного файла hosts, вы можете внести незначительные изменения.
# generate the file into some arbitrary location, that is not actually referenced by nagios
exec{'regen-nagios-hosts':
command => '/usr/local/bin/generate-nagios-host-definitions-from-hostfile < /etc/hosts > /etc/nagios3/generatedtmpsv-hosts.cfg',
user => 'root',
before => Class['nagios::server'],
require => File['/etc/hosts'],
}
# have a file resource use the generated file to update the production file
# the update will only happen when the checksums have changed
# on update notify the service to restart.
file { '/etc/nagios3/conf.d/sv-hosts.cfg'':
ensure => present,
source => '/etc/nagios3/generatedtmp/sv-hosts.cfg'
require => Exec['regen-nagios-hosts'],
notify => Service['nagios3'],
}
В долгосрочной перспективе было бы лучше попробовать найти способы преобразовать ваш скрипт в шаблон. Или найдите другой способ, который лучше подходит к марионеточному образу жизни.
Проблема с вашим определением exec заключается в том, что он изменит / обновит файл независимо от того, действительно ли было изменено содержимое. Взгляните на onlyif
в спецификация typedef
На вашем месте я бы создал sv-hosts.cfg
файл во временном файле и сравните его с текущим. Если есть некоторые отличия, просто скопируйте файл tmp в новое место и перезапустите nagios.
Также взгляните на справочная документация по типу, потому что существует так много конкретных типов nagios и, возможно, один из них подойдет вам :)