我想根据在另一个状态上执行的更改重新启动机器上的服务(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.pt
或cert.ssl.crt.es
。
在原始状态下,我希望ftp服务只有在linux上的cert.ssl.crt.{{ domain }}
任务发生变化时才重启。
澄清一下,Salt必须在状态ID上工作。特定的状态ID是在include
d 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
自给自足,并重启/重新加载相关服务。