Я пытаюсь заставить Puppet обновить наши серверы Varnish 3 до Varnish 4, крупного обновления, для которого требуется обновленный файл конфигурации, иначе оно не запускается. Это на Ubuntu 12.04.
Модуль Varnish по сути построен с использованием этих классов и зависимостей:
Class['varnish::repo']
-> Class['varnish::install']
-> Class['varnish::tools']
-> Class['varnish::config']
~> Class['varnish::service']
Я обновил URL-адрес Apt-repo в varnish::repo
, устанавливать ensure=>latest
в varnish::install
и предоставил обновленный файл конфигурации для varnish::config
. Все идет нормально.
Когда Puppet запускает эти зависимости, запуск завершается неудачно на varnish::install
stage, потому что Apt пытается перезапустить демон Varnish сразу после его обновления, не давая Puppet возможности заменить файл конфигурации. Провал в varnish::install
class приводит к нарушению цепочки зависимостей и приводит к сбою остальных классов. В результате установка Varnish не работает, и требуется восстановление вручную.
Как вы с этим справляетесь?
Я думал об использовании policy-rc.d
, который, по сути, указывает Apt не выполнять автоматические остановки и запуск служб. Я попытался создать файл перед обновлением и удалить его после.
file {'/usr/sbin/policy-rc.d':
ensure => $ensure,
content => "#!/bin/sh\nexit 101",
owner => 'root',
group => 'root',
mode => '0755',
}
Конечно создание и удаление является проблемой, потому что Puppet рассматривает это как повторяющийся ресурс.
Вы спросите, почему я хочу снова удалить политику после ее установки? Потому что мы используем unattended-upgrades
для выполнения незначительных обновлений безопасности, и я хочу позволять автоматический перезапуск службы в этих случаях, но не в этом случае. Кроме того, policy-rc.d влияет на все услуги, а не только лак.
Может быть, я ошибочно думаю об этом, но могу ли я как-то сказать Puppet или Apt подождать с перезапуском, пока не будет заменен файл конфигурации?
Почему бы не заменить файл конфигурации перед установкой обновления? Если он загружается при перезапуске, он не будет использовать «неправильный» файл конфигурации до тех пор, пока обновление не перезапустит его. . .