Ich weiß, dass die Verwendung prozeduraler Schritte in Puppet im Allgemeinen verpönt ist, da wir es aber zum Bereitstellen von von Veritas verwalteten Clusteranwendungen verwenden, gibt es eine Reihe spezifischer Schritte, die ausgeführt werden müssen, bevor die RPM-Installation aufgerufen wird.
Derzeit frieren wir den Veritas-Cluster manuell ein, damit er nicht versucht, ein Failover der Anwendung durchzuführen. Wir führen Puppet aus, das das RPM installiert (und die Anwendung bei Bedarf herunterfährt), und Puppet wird angewiesen, die Anwendung nicht zu starten. Anschließend starten wir die Anwendung manuell und frieren Veritas wieder ein. Abschließend überprüfen wir den Status.
Ich möchte diese Veritas-Schritte automatisieren, sodass wir nur Puppet ausführen müssen. Diese Schritte werden nur in unserer Produktionsumgebung ausgeführt. Für alle anderen müssen wir nur die RPM-Installation aufrufen. Um die Sache noch komplizierter zu machen, möchte ich keinen dieser Schritte ausführen, wenn sich nichts geändert hat.
Was ist der bevorzugte Weg, so etwas zu tun? Ich habe darüber gelesenEtappen ausführen, aber es scheint, als würde dies eine erhebliche Umgestaltung meines vorhandenen Codes erfordern.
Ich frage mich, ob mir jemand ein paar Ideen geben kann, wie ich damit umgehen kann.
Antwort1
Basierend auf Ihrer Problembeschreibung müssen Sie entweder Pläne verwenden oder alles in eine Exec oder ein Skript werfen, damit Sie die Reihenfolge der Dinge festlegen können. Puppet-Manifeste sind in ihrer jetzigen Form nicht für Ihren Anwendungsfall geeignet.
Ein Beispiel wäre:
exec { 'do veritas upgrade' :
onlyif => '${lookup(veritas_version)} is greater than /usr/bin/veritas --version',
exec => 'freeze && stop && install && start && unfreeze && verify',
}