クラウドインスタンスを作成し、そのインスタンスにいくつかのプログラムをインストールするAnsibleプレイブックを作成しました。このプレイブックを複数回実行したい(bashスクリプトを使用せずに)。ループを使用して、これら2つのタスクを一緒にループすることは可能ですか(つまり、2つのタスクに対して1つのループですか?)。これまでに見つけたのは、個々のタスクごとに1つのループだけです
いいえ、現在は不可能です。 with_items
は、以前のバージョンのAnsibleでinclude
ステートメントを使用していましたが、残念ながら削除されました。
Ansible 2.0で復活しますが、 v2の新機能-AnsibleFest London 2015 のスライド14/15をご覧ください。
githubからのv2ブランチ で作業を試みることができます。この機能はそこにあるはずです。
1.9.1でできることは、タスクをロールに移動し、プレイブックでこのロールを複数回参照することです。
アップデート:
2.0では、
with_
ループとタスクのインクルード(プレイブックのインクルードは除く)。これにより、タスクのセットを1ショットでループする機能が追加されます。覚えておく必要のあることがいくつかあります。独自のタスクが含まれていますwith_
ループは、特別なアイテム変数の値を上書きします。したがって、インクルードのアイテムと現在のタスクのアイテムの両方にアクセスしたい場合は、set_fact
は、外側のエイリアスを作成します。- include: test.yml with_items: - 1 - 2 - 3
test.ymlで:
- set_fact: outer_loop="{{item}}" - debug: msg="outer item={{outer_loop}} inner item={{item}}" with_items: - a - b - c
ソース: Ansible Docs
条件に基づいて同じyamlファイルを再帰的に含めることで、これを行うことができました。ここに要点があります: https://Gist.github.com/ParagDoke/5ddfc3d5647ce9b0110d1b9790090092 。効果的に、あなたのプレイブックに、いくつかの変数を持つファイルを含めてください:
- name: Invoke poller
vars:
some_condition: '"failed" not in response.content and response.json.status=="running"'
include_tasks: status-poller.yml
その後、status-poller.yml
、自分自身を含めます。
- include_tasks: includes/status-poller.yml
when: some_condition