web-dev-qa-db-ja.com

Ansible wait_forを使用して、複数行のコマンドステータスを確認するにはどうすればよいですか?

Ansible v2.4.0.0

Ansibleタスクで以下を実行するGitlab-CEをインストールしています。ご覧のとおり、一部のプロセスはダウンしていますが、最終的にはアップします。

# gitlab-ctl status
run: gitlab-workhorse: 0s, normally up
run: logrotate: 1s, normally up
down: nginx: 0s, normally up
down: postgresql: 1s, normally up
run: redis: 0s, normally up
run: sidekiq: 0s, normally up
run: Unicorn: 0s, normally up

すべてのサービスが実行状態にあることを確認するAnsiblewait_forタスクを作成するにはどうすればよいですか? IOWこれが表示されたときにのみ次のタスクに進みたい

# gitlab-ctl status
run: gitlab-workhorse: 0s, normally up
run: logrotate: 1s, normally up
run: nginx: 0s, normally up
run: postgresql: 1s, normally up
run: redis: 0s, normally up
run: sidekiq: 0s, normally up
run: Unicorn: 0s, normally up
5
Chris F

retries/untilメソッドを使用できます。

- command: gitlab-ctl status
  register: cmd_res
  retries: 5
  until: cmd_res.stdout_lines | reject('search','^run') | list | count == 0

runで始まる行を出力から削除し、それらをカウントします。そのような行が残っていない場合にのみ、次のタスクに進みます。

14