Я недавно написал состояние соли, которое обрабатывает конфигурацию nginx для нескольких серверов из некоторых статических переменных в столбце. Я хотел развернуть это на всех серверах, но прежде чем я это сделал, я хотел убедиться, что до того, как конфигурация будет применена на сервере, он был сначала протестирован.Перезагрузите конфигурацию nginx из состояния соли, только если configtest проходит
Nginx имеет встроенный конфигурационный файл, который я часто использую в командной строке, и я обнаружил, что соль имеет модуль nginx, который можно использовать для запуска configtest.
У меня есть следующий в моем файле состояния:
reload-nginx:
service.running:
- enabled: True
- reload: True
- watch:
- pkg: nginx
- file: /etc/nginx/sites-available/*
- file: /etc/nginx/nginx.conf
Это должно перезагрузить Nginx, если файлы конфигурация изменяется, или если Nginx установки модернизировано/изменено. Я считаю, что я могу запустить тест конфигурации, используя следующие в моем файле состояния (непроверенных):
nginx-config-test:
module.run:
- name: nginx.configtest
И я верю, что если я добавляю это состояние на часы в перегрузочной-Nginx состоянии он будет перезарядить, если configtest прошло ,
Однако, я хочу, чтобы перезарядка произойдет только, если один из конфигурационных файлов изменились И тест конфигурации проходит, или если Nginx изменения И в configtest проходит. Я вижу, что могу использовать onlyif для запуска состояния, если ВСЕ вещей True, и из опыта вы можете «использовать несколько применений одного и того же метода (поэтому у меня не может быть 3 разных варианта onlyif - исправьте меня, если я ошибаюсь).
Но я не вижу никакого способа перезагрузить nginx только в том случае, если файлы конфигурации были изменены (или обновлен nginx) и прошел тест configtest.
Возможно ли это?
Я обновил свой ответ; кажется, вам нужно использовать module.wait, а не module.run, чтобы свойство watch работало так, как ожидалось. Я не поймал этот первый раз, извините. – Andrew