Ich habe vor kurzem einen Salz-Status geschrieben, die die Nginx-Konfiguration für eine Reihe von Servern aus einigen statischen Variablen in der Säule behandelt. Ich wollte dies auf allen Servern ausrollen, aber bevor ich das tat, wollte ich sicherstellen, bevor die Konfiguration auf einem Server angewendet wird, der zuerst getestet wurde.Reload Nginx Config von Salz-Zustand, nur wenn der Configtest
Nginx hat einen eingebauten conftest, den ich häufig in der Befehlszeile verwende, und ich fand, dass salt ein nginx-Modul hat, das verwendet werden kann, um conftetest auszuführen.
Ich habe folgendes in meiner Statusdatei:
reload-nginx:
service.running:
- enabled: True
- reload: True
- watch:
- pkg: nginx
- file: /etc/nginx/sites-available/*
- file: /etc/nginx/nginx.conf
Dies sollte nginx nachladen, wenn die Konfigurationsdateien ändern oder wenn die nginx installieren aktualisiert wird/geändert. Ich glaube, ich kann einen Config-Test führt Sie die folgend in meiner Statusdatei (ungetestet) mit:
nginx-config-test:
module.run:
- name: nginx.configtest
Und ich glaube, wenn ich diesen Zustand auf die Uhr in dem Reload-nginx Zustand hinzufügen, würde es neu zu laden, wenn die configtest weitergegeben .
Allerdings möchte ich das Nachladen nur geschehen, wenn eine der Konfigurationsdateien haben UND die Config-Test bestanden wird geändert, oder wenn nginx ändert UND die configtest Pässe. Ich sehe, dass ich onlyif verwenden kann, um einen Staat zu laufen, wenn ALLE der der Sachen wahr sind, und von der Erfahrung können Sie mehrfache Gebrauch der gleichen Methode haben (also kann ich 3 verschiedene onlyif nicht haben - korrigieren Sie mich, wenn ich falsch bin).
Aber ich sehe keine Möglichkeit, Nginx nur neu zu laden, wenn die Konfigurationsdateien geändert (oder Nginx wurde aktualisiert) und der Configtest bestanden hat.
Ist das möglich?
ich meine Antwort aktualisiert haben; Es scheint, dass Sie module.wait anstelle von module.run verwenden müssen, damit die Eigenschaft watch wie erwartet funktioniert. Das erste Mal habe ich das nicht verstanden, tut mir leid. – Andrew