Puppet Stages & Notify
Posted on July 4, 2013 (Last modified on March 9, 2022) • 1 min read • 184 wordsDie notify Funktion von Puppet hat eine seltsame Eigenschaft, die ich persönlich wenig nachvollziehbar finde. Sie impliziert einen “before”-Zusammenhang zwischen der Resource, die benachrichtigt, und der benachrichtigten. Das führt zu unpraktischen Komplikationen. Der Versuch einer Herleitung:
service { "tomcat" : ensure => running }
file { "/etc/tomcat.conf" : notify => Service["tomcat"] }
Das funktioniert bestens, und bedeutet, dass zuerst die file-Direktive abgearbeitet wird, und dann der Service. Darauf aufbauend kann ich mir sehr gut folgende Erweiterung vorstellen:
class { "deployment::basic_app_server" : }
file { "/etc/tomcat.conf" : notify => Service["tomcat"] }
Nehmen wir an in “deployment::basic_app_server” werden einige zentrale Dinge geregelt, darunter auch der tomcat-Service. Die Absicht: Ich möchte mich darauf verlassen können, dass spezifische Module auf einem bestimmten Konfigurationsstand aufsetzen. Dafür wurden stages eigentlich erfunden (meines Erachtens nach), also erweitern wir zu:
stage { "preparation" : before => Stage["main"] }
class { "deployment::basic\_app\_server" : stage => "preparation" }
file { "/etc/tomcat.conf" : notify => Service["tomcat"] }
Und … bumm. Da notify eine “file-before-service” (da Service wie angenommen in deployment::basic_app_server konfiguriert wird) impliziert, aber die Stages eine “service-before-file”-Beziehung verlangen, geht das nicht. Schön ist das nicht, finde ich.