Назад | Перейти на главную страницу

Как сгенерировать файл с помощью скрипта с помощью марионетки

У меня есть следующий ресурс:

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 и, возможно, один из них подойдет вам :)