web-dev-qa-db-ja.com

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つだけ持つ必要があります。つまり。 somewhereを実行している限り、およびクラスター内にそのようなプロセスが1つしかない限りanywhereであれば、どのホストでも実行できます。

Ansibleプレイブックでこれを行う便利な方法はありますか?

4
Roy

run_onceパラメータ http://docs.ansible.com/ansible/playbooks_delegation.html#run-once で説明されているように、タスクはバッチの最初のホストでのみ実行されます。順序を指定できないことを考慮に入れてください、しかしそれはどういうわけか「予測可能」です(詳細は https://github.com/ansible/ansible/issues/10964 で)

1
Pablo Martinez