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

Сделать перезапуск марионеточного агента

У меня есть файл, уведомляющий марионеточного агента.

в 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"],
               ]
}