如何强制盐状态,根据'include'部分中的状态进行更改



我想根据在另一个状态上执行的更改重新启动机器上的服务(haproxy)。这对于onchanges来说很简单,但是我有一个特殊的例子。这里是状态:

include:
- linux.v1_0
(...)
ftp.service:
service.running:
- reload: True
- watch:
- <what to use here?>

我看到有人说要用手表重新启动。问题是,包含的linux.v1_0状态将做出一些更改,我想重新启动haproxy服务,只有当更改实际应用的状态。我希望避免显式地使用systemctl restart haproxy

linux。V1_0状态有如下配置:

{% set ssl = pillar.get("c") %}

{% for domain, cert in ssl.items() %}
cert.ssl.crt.{{ domain }}:
file.managed:
- name: etc/ssl/{{ domain }}
(... more stuff ...)
{% endfor %}

所以任务ID本身可以从不同的域变化,例如cert.ssl.crt.ptcert.ssl.crt.es

在原始状态下,我希望ftp服务只有在linux上的cert.ssl.crt.{{ domain }}任务发生变化时才重启。

v1_0状态。

澄清一下,Salt必须在状态ID上工作。特定的状态ID是在included SLS中还是在内联中都没有关系。这可以通过state.show_sls进行检查。

对于生成的动态状态id,我们可以使用watch条件的_in变体,即watch_in

一样:

{% for domain, cert in ssl.items() %}
cert.ssl.crt.{{ domain }}:
file.managed:
- name: etc/ssl/{{ domain }}
(... more stuff ...)
- watch_in:
service: ftp.service
{% endfor %}

虽然它可以满足这个需求,但任何其他包含linux.v1_0的SLS都必须定义ftp.service:。如果可能的话,请尽量保持linux.v1_0自给自足,并重启/重新加载相关服务。

最新更新