web-dev-qa-db-ja.com

複数のAnsibleタスクの1つのループ

クラウドインスタンスを作成し、そのインスタンスにいくつかのプログラムをインストールするAnsibleプレイブックを作成しました。このプレイブックを複数回実行したい(bashスクリプトを使用せずに)。ループを使用して、これら2つのタスクを一緒にループすることは可能ですか(つまり、2つのタスクに対して1つのループですか?)。これまでに見つけたのは、個々のタスクごとに1つのループだけです

25
AverageWorker

いいえ、現在は不可能です。 with_itemsは、以前のバージョンのAnsibleでincludeステートメントを使用していましたが、残念ながら削除されました。

Ansible 2.0で復活しますが、 v2の​​新機能-AnsibleFest London 2015 のスライド14/15をご覧ください。

enter image description here

githubからのv2ブランチ で作業を試みることができます。この機能はそこにあるはずです。

1.9.1でできることは、タスクをロールに移動し、プレイブックでこのロールを複数回参照することです。

27
udondan

アップデート:

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

21
Wtower

条件に基づいて同じ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
3
Parag Doke