У меня есть файл, уведомляющий марионеточного агента.
в network
модуль, настройки прокси включены в файл .gemrc следующим образом:
file { "/root/.gemrc":
content => "http_proxy: $http_proxy\n",
notify => Service['puppet'],
}
Проблема в том, что марионетка останавливается и не перезапускается.
Aug 31 12:05:13 snch7log01 puppet-agent[1117]: (/Stage[main]/Network/File[/root/.gemrc]/content) content changed '{md5}2b00042f7481c7b056c4b410d28f33cf' to '{md5}60b725f10c9c85c70d97880dfe8191b3'
Aug 31 12:05:13 snch7log01 puppet-agent[1117]: Caught TERM; calling stop
Я предполагаю, что код делает что-то вроде /etc/init.d/puppet stop && /etc/init.d/puppet start
Поскольку марионетка не запущена, она не может запуститься сама ... в этом есть смысл.
Как заставить марионетку перезапускаться при изменении этого файла? Обратите внимание, что этот файл также может не существовать.
Возможно, вам потребуется добавить в объявление ресурса службы для «марионетки»:
hasrestart => true,
Помимо того, что в манифесте есть "hasrestart", вы также должны убедиться, что
"ensure => running"
Есть в манифесте. Вот моя копия:
class puppet::service {
service { puppet:
ensure => running,
enable => true,
hasrestart => true,
subscribe => File["/etc/puppet/puppet.conf"],
}
}
У меня была похожая проблема. Мне нужно было развернуть исправления для augeas, и я использовал puppet для их развертывания, но они не вступили в силу до перезапуска puppetd. Так что мне нужен был быстрый и простой способ сказать puppetd, чтобы он перезапустился один раз. Я решил это с помощью сценария оболочки и exec.
Вот сценарий:
#!/bin/bash
if [ X"$1" != Xbackground ]; then
OUTDIR=/var/log/puppet
mkdir -p $OUTDIR
nohup $0 background > $OUTDIR/puppet_restart.out 2>&1 < /dev/null &
exit 0
fi
# If you get here, this is a background copy of this script that has
# been decoupled from puppet by the nohup above. Give puppet a chance
# to finish what it is doing, then restart it.
sleep 60
/sbin/service puppet restart
Манифест для запуска скрипта использует созданный им файл журнала. (Это отлично работает в первый раз - если вы делаете последующие обновления, создайте манифест, который удалит файл журнала, чтобы он запускался еще раз):
file { "/usr/local/bin/puppet_restart":
owner => root,
group => root,
mode => 750,
source => "puppet:///modules/puppet_fix_module/puppet_restart"
}
exec { "restart_puppet":
command => "/usr/local/bin/puppet_restart",
path => ["/usr/bin", "/usr/sbin", "/bin"],
creates => "/var/log/puppet/puppet_restart.out",
require => [ File['/usr/local/bin/puppet_restart'],
File ["/some/other/file/that/requires/restart"],
]
}