假设我在多台服务器上有一个服务,以集群方式(心跳)控制,禁用(在启动时),因为我希望它仅在活动节点上运行:
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
尚未完全测试。如果它对您有用,请告诉我。