仅当配置测试通过时,才从 salt state 重新加载 nginx 配置
Reload nginx config from salt state, only if the configtest passes
我最近写了一个 salt state,它从 pillar 中的一些静态变量处理许多服务器的 nginx 配置。我想将它推广到所有服务器,但在我这样做之前,我想确保在将配置应用到服务器之前,它首先经过测试。
Nginx 有一个内置的配置测试,我经常在命令行上使用它,我发现 salt 有一个 nginx 模块可以用来 运行 配置测试。
我的状态文件中有以下内容:
reload-nginx:
service.running:
- enabled: True
- reload: True
- watch:
- pkg: nginx
- file: /etc/nginx/sites-available/*
- file: /etc/nginx/nginx.conf
如果配置文件发生变化,或者 nginx 安装为 upgraded/changed,这应该会重新加载 nginx。我相信我可以 运行 在我的状态文件中使用以下内容进行配置测试(未测试):
nginx-config-test:
module.run:
- name: nginx.configtest
而且我相信如果我将此状态添加到处于 reload-nginx 状态的手表中,如果配置测试通过,它会重新加载。
但是,我希望仅当任一配置文件已更改 AND 配置测试通过,或者 nginx 发生更改时才会重新加载 AND 配置测试通过。我看到我可以使用 onlyif 来 运行 如果 所有 的事情都是真的,并且根据经验你可以'多次使用同一个方法(所以我可以'没有 3 个不同的 onlyif - 如果我错了请纠正我)。
但我看不到只有当配置文件已更改(或 nginx 已更新)并且配置测试已通过时才能重新加载 nginx 的方法。
这可能吗?
让reload状态观察config-test状态;让配置测试状态监视配置文件状态和 pkg 状态。测试只会 运行 如果发生变化,并且只有当测试 运行 并通过时才会重新加载。
警告:从结构上讲这会起作用,但我从未使用过 nginx.configtest,所以我不能保证它会按照您的想法运行。
您还需要使用 module.wait 而不是 module.run; watch 语句不适用于 .运行。参考 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/*
我最近写了一个 salt state,它从 pillar 中的一些静态变量处理许多服务器的 nginx 配置。我想将它推广到所有服务器,但在我这样做之前,我想确保在将配置应用到服务器之前,它首先经过测试。
Nginx 有一个内置的配置测试,我经常在命令行上使用它,我发现 salt 有一个 nginx 模块可以用来 运行 配置测试。
我的状态文件中有以下内容:
reload-nginx:
service.running:
- enabled: True
- reload: True
- watch:
- pkg: nginx
- file: /etc/nginx/sites-available/*
- file: /etc/nginx/nginx.conf
如果配置文件发生变化,或者 nginx 安装为 upgraded/changed,这应该会重新加载 nginx。我相信我可以 运行 在我的状态文件中使用以下内容进行配置测试(未测试):
nginx-config-test:
module.run:
- name: nginx.configtest
而且我相信如果我将此状态添加到处于 reload-nginx 状态的手表中,如果配置测试通过,它会重新加载。
但是,我希望仅当任一配置文件已更改 AND 配置测试通过,或者 nginx 发生更改时才会重新加载 AND 配置测试通过。我看到我可以使用 onlyif 来 运行 如果 所有 的事情都是真的,并且根据经验你可以'多次使用同一个方法(所以我可以'没有 3 个不同的 onlyif - 如果我错了请纠正我)。
但我看不到只有当配置文件已更改(或 nginx 已更新)并且配置测试已通过时才能重新加载 nginx 的方法。
这可能吗?
让reload状态观察config-test状态;让配置测试状态监视配置文件状态和 pkg 状态。测试只会 运行 如果发生变化,并且只有当测试 运行 并通过时才会重新加载。
警告:从结构上讲这会起作用,但我从未使用过 nginx.configtest,所以我不能保证它会按照您的想法运行。
您还需要使用 module.wait 而不是 module.run; watch 语句不适用于 .运行。参考 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/*