【发布时间】:2016-05-05 17:45:35
【问题描述】:
我最近编写了一个 salt state,它通过柱子中的一些静态变量处理多个服务器的 nginx 配置。我想将其推广到所有服务器,但在此之前,我想确保在将配置应用到服务器之前,它首先经过测试。
Nginx 有一个我经常在命令行上使用的内置 configtest,我发现 salt 有一个 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
而且我相信如果我在 reload-nginx 状态下将此状态添加到手表,如果 configtest 通过,它将重新加载。
但是,我希望仅当任一配置文件已更改 并且 配置测试通过,或者如果 nginx 更改 并且 配置测试通过时,才会重新加载。我知道如果 ALL 的事情都是真的,我可以使用 onlyif 来运行一个状态,并且根据经验,你可以多次使用相同的方法(所以我不能有 3 个不同的 onlyif - 正确如果我错了,我)。
但只有在配置文件已更改(或 nginx 已更新)且 configtest 已通过时,我看不到任何重新加载 nginx 的方法。
这可能吗?
【问题讨论】:
-
我已经更新了我的答案;看来您需要使用 module.wait 而不是 module.run 才能使 watch 属性按预期工作。抱歉,我第一次没听懂。
标签: nginx salt-stack