{% for ... %}
。ansible
Iおおよそ次のステップがあります。
- name: Wait for Started status to clear
uri:
url: http://{{ container.ip }}:8080/upgrade/api/v1/upgrades/{{ theuuid }}
return_content: yes
register: progress_status
until: >
{% for c in (progress_status.content | from_json).data.states %}
{{ c.state != 'Started' }}
{% if not loop.last %}and{% endif %}
{% endfor %}
retries: 30
delay: 15
uri
呼び出しはコンテナやJSON形式での「状態」のリストを返します。コンテナのどれもStarted
状態になるまで、このuri
を照会し続けたいと思います。
{% for ... %}
ループのため警告が生成されます。
開始状態を表すjson文字列の応答全体を見ると、それほど具体的ではないテストを行うことができます。しかし、それは各コンテナの状態を調べること(よりブール式true and true and ...
を構築すること)よりも謎めいているようです。しかし、これは私の今の選択肢です。
またはblock
を使用してクエリを実行してから、条件としてファクトを作成し、ブロック上のuntil
としてファクトを使用することができます。しかし、それも読むのが難しいようです。
このようなパターンを処理する方法についての提案はありますか? state=='Started'
を持つすべての要素を削除し、
until: (progress_status.content | from_json).data.states | rejectattr('state','equalto','Started') | list | length == 0
は、ここでは、
(progress_status.content | from_json).data.states
リストを取り、残りのリストの長さをチェックしてください。
私は 'until'文のループが何をし、すべてのコンテナが停止したときにゼロを返すかを行う前のタスク(テンプレートとして)でシェルスクリプトを作成したいと思います。次に、そのスクリプトを 'local_action'として実行することができます ' until'ステートメントはスクリプトの結果を確認するだけで済むので、プレイブックはもっと簡単に見えます。 – ProfHase85