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"  

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

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

4
задан 17 November 2015 в 02:36
1 ответ

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

1
ответ дан 3 December 2019 в 04:09

Теги

Похожие вопросы