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).