Yura YuLife

ITエンジニアの覚え書き。

ansible でネストされた item に対してループを回す

動作環境

  • ansible 2.1

with_subelements でネストされたループを回す

with_items のかわりに with_subelements を利用することで、ネストされた item に対してループを回すことが出来ます。

vars/main.yml

users:
  - sam:
    email:
      - sam@example.com
      - sam@example.jp
  - mary:
    email:
      - mary@example.com
  - mike:
    email:
      - mike@example.com
      - mike@example.net

tasks/main.yml

- name: print email addresses
  debug: msg="{{ item[1] }}"
  with_subelements:
    - "{{ users }}"
    - email

実行結果

ok: [localhost] => (item=({u'sam': None}, u'sam@example.com')) => {
    "item": [
        {
            "sam": null
        }, 
        "sam@example.com"
    ], 
    "msg": "sam@example.com"
}
ok: [localhost] => (item=({u'sam': None}, u'sam@example.jp')) => {
    "item": [
        {
            "sam": null
        }, 
        "sam@example.jp"
    ], 
    "msg": "sam@example.jp"
}
ok: [localhost] => (item=({u'mary': None}, u'mary@example.com')) => {
    "item": [
        {
            "mary": null
        }, 
        "mary@example.com"
    ], 
    "msg": "mary@example.com"
}
ok: [localhost] => (item=({u'mike': None}, u'mike@example.com')) => {
    "item": [
        {
            "mike": null
        }, 
        "mike@example.com"
    ], 
    "msg": "mike@example.com"
}
ok: [localhost] => (item=({u'mike': None}, u'mike@example.net')) => {
    "item": [
        {
            "mike": null
        }, 
        "mike@example.net"
    ], 
    "msg": "mike@example.net"
}

参考URL