Ansible Playbook:确保进程在集群的任何一个节点上运行?

Ansible Playbook:确保进程在集群的任何一个节点上运行?

Ansible 可以很容易地确保每个主机上都有一个进程在运行。

我可以做类似的事情:

---
- hosts: app_cluster
  tasks: 

  - name: Look for the "foo" process
    shell: ps -ef |  grep foo | grep -v grep
    register: process_list
    changed_when: false  

  - name: Start "foo" if needed
    shell: nohup /bin/foo &
    when: "process_list.stdout.find('foo') == -1"  

但是,我需要集群中某个进程只有一个实例。也就是说,它可以在任何主机上运行,​​只要它在运行某处只要有且只有一个这样的过程任何地方在集群中。

在 ansible 剧本中是否有一种方便的方法来做到这一点?

答案1

run_once您可以使用http://docs.ansible.com/ansible/playbooks_delegation.html#run-once因此任务将仅在批次的第一个主机中运行。请注意,您无法指定顺序,但它在某种程度上是“可预测的”(更多信息请参见https://github.com/ansible/ansible/issues/10964

相关内容