如何使用 SaltStack 仅在服务已在运行时重新启动它?

如何使用 SaltStack 仅在服务已在运行时重新启动它?

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

haproxy:
  service.disabled: []

我希望能够更新它的配置文件:

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

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

所以我的问题是:如何实现在修改配置时重新启动此服务的目标,而不是在所有被动节点上启动它?

答案1

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

如何知道当前节点是否活跃?

然后,而不是watch_inservice状态,您可以使用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

尚未完全测试。如果它对您有用,请告诉我。

相关内容