只有在服务已经运行的情况下,如何使用SaltStack重新启动服务?

假设我有几个服务器上的服务,以集群方式(心跳)控制,禁用(启动时),因为我希望它只在主动节点上运行:

haproxy: service.disabled: [] 

我想能够更新其configuration文件:

 /etc/haproxy/haproxy.cfg: file.managed: - source: salt://haproxy.cfg - watch_in: - service: haproxy 

通过指定这个文件被haproxy服务监视,如果这个文件被修改,它将触发服务重启。 这是我想要的,除了这个服务应该只运行在集群中的活动服务器。

所以我的问题是:我怎样才能实现我的目标,重新启动configuration修改服务,而不必在所有被动节点上启动它?

你必须回答的第一个问题是:

你怎么知道当前节点是否活动?

  • 心跳: 心跳:找出一个集群内的机器状态?
  • 心脏起搏器: http : //oss.clusterlabs.org/pipermail/pacemaker/2014-January/020614.html

然后,而不是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 

没有完全testing。 请让我知道,如果它适合你。