Есть ли способ игнорировать часть шаблонного файла?
У меня есть служба, у которой есть файл конфигурации, и каждый раз, когда служба запускается, она записывает время запуска в файл конфигурации. Это заставляет марионетку обнаруживать изменение, и, поскольку он уведомляет службу, она перезапускает службу. Я не хочу, чтобы марионетка перезапускала службу вскоре после того, как я ее только что запустил.
Так есть ли способ заставить марионетку игнорировать часть шаблонного файла?
Я не думаю, что это возможно, марионетка вычисляет md5 файла для проверки изменений файла. Можно ли записать время начала в другой файл?
Мое решение похоже на решение Zoredache, но немного отличается в том смысле, что вам не нужен интеллектуальный скрипт для сравнения.
Допустим, ваш файл конфигурации /etc/my_application.conf
и это выглядит так:
start_time=<some value set by application on start-up>
option1=VALUE
...
В марионетке добавьте файл в files / для вашего файла конфигурации, который выглядит так:
start_time=DummyValue
option1=VALUE
...
Затем используйте манифест, который развертывает файл в альтернативном месте, и, если есть изменения, запускает копию, которая затем запускает службу, например:
file { '/etc/my_application.staging.conf':
ensure => present,
source => 'puppet:///modules/my_application/my_application.conf',
owner => ...
notify => Exec['install-my_application.conf'],
}
exec { 'install-my_application.conf':
refreshonly => true,
command => '/bin/cp /etc/my_application.staging.conf /etc/my_application.conf',
notify => Service['my_application'],
}
service { 'my_application':
...
}
Это позволяет вам перезапускаться при новых изменениях конфигурации, но не буду перезапустите службу, если my_application.conf изменен локально. Это не идеальный решение, потому что оно не избавляет вас от локальных изменений, но, надеюсь, вы сможете управлять ими с разрешениями и четким предупреждением в верхней части файла конфигурации.