2 votes

Faites redémarrer l'agent puppet lui-même

J'ai un fichier qui notifie l'agent puppet.

Dans le module network, les paramètres de proxy sont inclus dans le fichier .gemrc comme ceci:

file { "/root/.gemrc":
  content => "http_proxy: $http_proxy\n",
  notify => Service['puppet'],
}

Le problème est que puppet s'arrête et ne redémarre pas.

31 août 12:05:13 snch7log01 puppet-agent[1117]: (/Stage[main]/Network/File[/root/.gemrc]/content) content changed '{md5}2b00042f7481c7b056c4b410d28f33cf' to '{md5}60b725f10c9c85c70d97880dfe8191b3'
31 août 12:05:13 snch7log01 puppet-agent[1117]: Caught TERM; calling stop

Je suppose que le code fait quelque chose comme /etc/init.d/puppet stop && /etc/init.d/puppet start Puisque puppet ne fonctionne pas, il ne peut pas se redémarrer... cela a du sens.

Comment faire redémarrer puppet automatiquement lorsque ce fichier change? Notez que ce fichier pourrait ne pas exister non plus.

4voto

Cakemox Points 23637

Vous devrez peut-être ajouter à la déclaration des ressources de service pour 'puppet' :

hasrestart => true,

1voto

Rilindo Points 5018

En plus de vous assurer que "hasrestart" est présent dans le manifeste, vous devriez également vous assurer que

"ensure => running"

est dans le manifeste. Voici ma copie:

class puppet::service {
  service { puppet:
    ensure => running,
    enable  => true,
    hasrestart => true,
    subscribe => File["/etc/puppet/puppet.conf"],
  }     
}

0voto

Mark Gillan Points 11

J'ai eu un problème similaire. J'avais besoin de déployer des correctifs à augeas et j'ai utilisé puppet pour les déployer, mais ils n'ont pris effet qu'après le redémarrage de puppetd. J'avais donc besoin d'un moyen rapide et facile de dire à puppetd de redémarrer une fois. J'ai résolu cela avec un script shell et un exec.

Voici le script :

#!/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

#  Si vous arrivez ici, c'est une copie de fond de ce script qui a été
#  déconnectée de puppet par le nohup ci-dessus. Laissez puppet terminer ce qu'il.
#  est en train de faire, puis redémarrez-le.

sleep 60

/sbin/service puppet restart

Le manifeste pour exécuter le script utilise le fichier journal qu'il crée. (Cela fonctionne bien la première fois - si vous apportez des mises à jour ultérieures, créez un manifeste qui supprimera le fichier journal afin que cela s'exécute à nouveau une fois) :

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X