Назад | Перейти на главную страницу

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"  

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

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

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