Puppet: Erzwingen Sie einen Neustart des Dienstes, nachdem die Konfigurationsdatei geändert wurde

Puppet: Erzwingen Sie einen Neustart des Dienstes, nachdem die Konfigurationsdatei geändert wurde

Wie kann ich sicherstellen, dass der entsprechende Dienst neu gestartet wird, wenn eine neue Version der Konfigurationsdatei über Puppet vom Master-Repository auf einen der verwalteten Server heruntergeladen wird?

Typisches Szenario – nehmen wir an, es gibt eine neue Munin- oder Apache-Konfiguration. Der Puppet-Client entdeckt sie, überschreibt lokale Dateien … und … – wie stellt man sicher, dass der Dienst neu gestartet/neu geladen wird?

vielen Dank!

Antwort1

Eine Alternative zu „Notify“ ist „Subscribe“:

file { "/etc/sshd_config":
    source => "....",
}

service { sshd:
    ensure => running,
    subscribe => File["/etc/sshd_config"],
}

Der Unterschied besteht darin, dass die Beziehung vom anderen Ende aus beschrieben wird. Sie können Apache beispielsweise veranlassen, /etc/apache/httpd.conf zu abonnieren, aber eine Vhost-Datei erstellen, die Apache benachrichtigt, da Ihre Apache-Klasse nicht über jeden Ihrer Vhosts Bescheid weiß.

Eine ähnliche Situation mit zwei Enden gilt für require und before. Es ist nur eine Frage dessen, was in der jeweiligen Situation mehr Sinn ergibt.

Wie Chad erwähnt hat, müssen Sie einen Musterparameter hinzufügen, wenn Puppet ständig versucht, Ihren Dienst zu starten. Dabei handelt es sich um einen regulären Ausdruck, der auf die Liste der Prozesse angewendet wird. Standardmäßig führt Puppet einen Stopp und Start aus, um einen Dienst neu zu starten. Wenn Sie „hasrestart => true“ hinzufügen, wird der im Parameter „restart“ angegebene Befehl verwendet, um den Dienst neu zu starten.

Antwort2

es scheint, ich habe etwas gefunden:

file { "/etc/sshd_config":
    source => "....",
    notify => Service[sshd]
}

service { sshd:
    ensure => running
}

wir werden sehen, wie das funktioniert. Ihre Gedanken zu diesem Thema sind jedenfalls willkommen.

Antwort3

(Ich weiß, das ist eine uralte Frage, aber ich dachte, ich gebe meinen Senf dazu und finde eine (meiner Meinung nach) viel einfachere Möglichkeit, sie zu beantworten.)

Sie können auch gerne die Pfeilnotation verwenden:

file { "/etc/sshd_config":
  source => "....",
} ~>
service { sshd:
  ensure => running
}

oder

File['/etc/sshd_config'] ~> Service['sshd']

Antwort4

Es gibt mehrere gleichwertige Notationen:

Benachrichtigen:

file { '/etc/sshd_config':
    notify => Service[sshd],
}

service { sshd:
    ensure => running
}

Abonnieren:

file { '/etc/sshd_config':
   ...
}

service { sshd:
    ensure => running,
    subscribe => File['/etc/sshd_config'],
}

Pfeilnotation:

File['/etc/sshd_config'] ~> Service['sshd']

Verkettungsdeklarationen

file { '/etc/sshd_config':
   ...
}
~> service { sshd:
    ensure => running,
}

reloadWenn Sie statt auslösen möchten restart, passen Sie die Servicedeklaration an:

service { sshd:
    ensure => running,
    restart => 'pkill -HUP sshd', # if service support such reload
}

verwandte Informationen