![如何使用 SaltStack 仅在服务已在运行时重新启动它?](https://linux22.com/image/641315/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20SaltStack%20%E4%BB%85%E5%9C%A8%E6%9C%8D%E5%8A%A1%E5%B7%B2%E5%9C%A8%E8%BF%90%E8%A1%8C%E6%97%B6%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E5%AE%83%EF%BC%9F.png)
假设我在多台服务器上有一个服务,以集群方式(心跳)控制,禁用(在启动时),因为我希望它仅在活动节点上运行:
haproxy:
service.disabled: []
我希望能够更新它的配置文件:
/etc/haproxy/haproxy.cfg:
file.managed:
- source: salt://haproxy.cfg
- watch_in:
- service: haproxy
通过指定此文件由服务监视haproxy
,如果修改了此文件,它将触发服务重新启动。这正是我想要的,只是此服务应该只为集群中的活动服务器运行。
所以我的问题是:如何实现在修改配置时重新启动此服务的目标,而不是在所有被动节点上启动它?
答案1
你必须回答的第一个问题是:
如何知道当前节点是否活跃?
然后,而不是watch_in
这service
状态,您可以使用cmd
带有条件的陈述onlyif
,如下所示:
haproxy:
pkg:
- installed
file:
- managed
- name: /etc/haproxy/haproxy.cfg
- source: salt://haproxy/config.cfg
- require:
- pkg: haproxy
- watch_in:
- cmd: haproxy
cmd:
- run
- name: /etc/init.d/haproxy restart
- onlyif: /this/node/is/the/active
尚未完全测试。如果它对您有用,请告诉我。