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"  

Однако мне нужно иметь ровно один экземпляр определенного процесса в кластере. То есть. он может работать на любом хосте, если он где-то запущен и пока в кластере есть только один такой процесс.

Может ли быть удобный способ сделать это в сборнике игр?

1 ответ

Вы можете использовать run_once параметр, как описано в http://docs.ansible.com/ansible/playbooks_delegation.html поэтому задача будет выполняться только на первом хосте пакета. Учтите, что вы не можете указать порядок, но он каким-то образом "предсказуем" (дополнительная информация на https://github.com/ansible/ansible/issues/10964).

Другие вопросы по тегам