2016-05-03 4 views
1

Я недавно написал состояние соли, которое обрабатывает конфигурацию 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.

Возможно ли это?

+1

Я обновил свой ответ; кажется, вам нужно использовать module.wait, а не module.run, чтобы свойство watch работало так, как ожидалось. Я не поймал этот первый раз, извините. – Andrew

ответ

1

Проверить состояние перезагрузки в состоянии конфигурации; иметь состояние конфигурации-проверки, посмотреть состояние конфигурационных файлов и состояние pkg. Тест будет работать только в том случае, если что-то изменится, и перезагрузка произойдет только в том случае, если тест пройдет и пройдет.

Предостережение: Структурно это будет работать, но я никогда не использовал nginx.configtest, поэтому я не могу обещать, что он ведет себя так, как вы думаете.

Вам также потребуется использовать module.wait, а не module.run; инструкции смотреть не работают с .run. Ссылка here.

Так что становится:

reload-nginx: 
    service.running: 
    - name: nginx 
    - enable: True 
    - reload: True 
    - watch: 
     - module: nginx-config-test 

nginx-config-test: 
    module.wait: 
    - name: nginx.configtest 
    - watch: 
     - file: /etc/nginx/sites-available/* 
+0

Спасибо, я попробую! – Rumbles

+0

Спасибо за ваше предложение, я уточнил вопрос с тем, что я нашел, используя ваше предложение. Не уверен, что то, что я сделал с циклом for, приводит к тому, что следующая часть не работает. Любые дополнительные предложения приветствуются! – Rumbles

+0

Еще раз спасибо, я попробую это утром! – Rumbles