Meine Tradition ist es, alle Zonenserien bei Änderung auf den Zeitstempel zu setzen. Jetzt, da Puppet meine neue Religion ist, möchte ich beim Erstellen von Zonendateien aus exportierten Ressourcen serielle Zeitstempel festlegen. Ein etwas trivialisiertes Beispiel könnte so aussehen:
file { "/tmp/dafile": content = inline_template("<%= Time.now.to_i %>"), }
Das Problem bei diesem Ansatz ist, dass der Inhalt ständig unterschiedlich ist, was (letztendlich) die Neuerstellung von Zonendateien bei jeder Puppet-Konfigurationsabfrage provoziert.
Gibt es eine Möglichkeit, einen Zeitstempel einzufügen, ohne dass er in den Daten enthalten ist, die mit dem vorherigen Status verglichen werden?
domain-name-system
puppet
timestamp
Bittrance
quelle
quelle
Antworten:
Verwenden Sie keine Vorlage. Wenn Sie dort versuchen, eine Seriennummer zu verwenden, besteht das Problem darin, dass Sie jedes Mal Änderungen vornehmen.
Ich habe zwei Ideen:
Einige Beispiele für das Dateifragmentmuster finden Sie hier:
http://projects.puppetlabs.com/projects/puppet/wiki/Generating_a_config_file_from_fragments
https://github.com/ripienaar/puppet-concat
quelle
Wie wäre es mit dem Zeitstempel der Datei:
Das einzige ist, dass dies wahrscheinlich auf jedem Client ausgeführt wird und möglicherweise den Zeitstempel der Datei für jeden Lauf aktualisiert. Wenn dies nicht der Fall ist, sollte es Ihren Anforderungen entsprechen.
quelle
Wie wäre es mit den folgenden,
wo die erb-Vorlagendatei enthält,
quelle
Kannst du externe Befehle innerhalb von Puppet ausführen? (Ich verwende Cfengine, kenne Puppet nicht.) Was ist damit?
/bin/date '+%Y%m%d00'
quelle
exec
Befehl mache (beachten Sie das / bin / Datum dort), aber Sie möchten das nicht als Seriennummer verwenden, als ob Sie mehr als eine Änderung pro Tag in derselben Zone vornehmen, der Seriennummer wird nicht erhöht.Ich habe Folgendes verwendet, um dies durchzuführen:
Die Vorlage hat
#SERIAL#
als Platzhalter, nachdem die temporäre Datei erstellt wurde,Exec
wird die benachrichtigt, die dann den Platzhalter verwendetsed
unddate
durch den aktuellen Unix-Zeitstempel ersetzt, um die Datei schließlich an den richtigen Ort zu schreiben.quelle
Ich habe dazu tendiert, die Änderungszeit der Manifest- oder Hiera-Datei zu verwenden, in der Sie die Host-Einträge deklarieren, und diese in einen geeigneten Zeitstempel für die Serie zu konvertieren. (Sie können auch die neueste Datei aus einer Reihe von Dateien verwenden, wenn diese auf mehrere Dateien aufgeteilt ist, oder einen Zeitstempel für die letzte Änderung, wenn diese über eine andere Route wie eine Datenbank erfolgt.)
Leider ist die maximale Seriennummer eine 32-Bit-Ganzzahl ohne Vorzeichen, sodass Sie nur Zahlen bis 2147483647 verwenden können. Dies erlaubt uns leider nicht, Sekunden seit der Unix-Epoche als Seriennummer zu verwenden . Stattdessen wird standardmäßig JJJJMMTTxx verwendet. Dies setzt jedoch voraus, dass Sie die aktuelle Seriennummer als Status haben, wenn Sie sie bereits am selben Datum festgelegt haben.
Als Alternative und ohne dass Sie keine Datei einlesen und die Anzahl erhöhen müssen, verwende ich die folgende Inline-Vorlage:
Dadurch erhalten Sie ein YYDDDsssss-Format (2-stelliges Jahr, 3-stelliger Tag des Jahres, 5-stellige Sekunde-in-Tag), das bis 2099 funktioniert (wenn Sie wie oben beschrieben mit 2000 beginnen) und jede Sekunde ein Update ermöglicht bis dann. Auf diese Weise können Sie diese Variable als Argument für jedes vorhandene Modul verwenden, mit dem Sie die Bindungskonfigurationen erstellen möchten, anstatt eine Vorlage zu benötigen, aus der Sie die vorhandene Seriennummer (zum Inkrementieren) zurücklesen können.
Vorlagen sind also in Ordnung, wenn Sie ein bisschen kreativ sind, woher Sie die Zeit haben, die Seriennummer mit festzulegen :)
Ich habe das oben genannte mit dem Camptocamp / Bind Puppetforge-Modul verwendet und dies funktioniert korrekt
quelle