Ich muss einen Zustand nur einmal ausführen. Ich konnte keinen einfachen Weg finden, dies zu tun.
Nun zum Kontext
Ich installiere zwei MySQL-Server über Salt. Ich möchte einen zum Sklaven des anderen machen.
Um den Slave einzurichten, muss ich am Ende der Master-Installation die Master-Statusinformationen erhalten:
SHOW MASTER STATUS;
Jetzt kann ich einen benutzerdefinierten Status verwenden, der die mysql.query
Funktion ausführt , um sie abzurufen.
mysql_master_status:
mystate.query:
- query: SHOW MASTER STATUS
Es wird jedoch jedes Mal ausgeführt, wenn der Highstate für meinen Server ausgeführt wird. So geben Sie jedes Mal andere Stamminformationen.
Ich habe versucht, eine Dateiexistenz als Flag zu verwenden:
/tmp/only_once:
file.missing: []
mysql_master_status:
mystate.query:
- query: SHOW MASTER STATUS
- require:
- file: /tmp/only_once
Es funktioniert, aber ich war nicht glücklich, da ich jetzt jedes Mal zwei fehlerhafte Zustände habe.
Meine benutzerdefinierte Lösung
Ich endete mit einem neuen Parameter für mystate
, der bei flag
der ersten Ausführung eine Flag-Datei erstellt und mit Erfolg zurückgibt, wenn die Datei vorhanden ist:
mysql_master_status:
mystate.query:
- query: SHOW MASTER STATUS
- flag: /tmp/only_once
Und nochmal die Frage
Trotzdem würde ich gerne wissen, ob und wie man einen Zustand nur einmal ausführen würde.
Ich denke, der einfachste Weg wäre, diesen Status in eine andere Statusdatei (mysql_master_status.sls) zu verschieben und ihn nicht in der Datei top.sls zu referenzieren. Stattdessen führen Sie diesen Status einmal mit salt 'target' state.sls mysql_master_status aus
Thomas
quelle