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)