在ansible中迭代2个字典

Iterate Over 2 dictionary in ansible

我有 2 个字典:

- Test1:
   1: pass
   2: fail
   3: pass

- Test2:
   1.1.1.1: val1
   2.2.2.2: val2
   3.3.3.3: val3

条件是Test1.value contians 失败

- name: test
  debug:
    msg: "{{item.1.value}} {{item.1.key}} {{item.0.key}} {{item.0.value}}"
  with_together:
    - "{{Test1}}"
    - "{{Test2}}"
  when: item.0.value == "fail"

这没有按预期工作,无法在一个循环中同时获取 2 个字典的键和值

when 语句中,您必须使用 item.0item.1 来评估条件。我建议您在 with_together 循环中使用列表,如果您使用的是变量,则必须使用大括号 {{ variable }} .

尝试如下:

    - name: test
      debug:
        msg: "{{item.1 }}"
      with_together:
        - "{{ Test1.values() | list }}"
        - "{{ Test2.values() | list }}"
      when: item.0 == "fail"

你会得到

TASK [test] *******************************************************************************************************************************************************************************************************
skipping: [127.0.0.1] => (item=['pass', 'val1'])
ok: [127.0.0.1] => (item=['fail', 'val2']) => {
    "msg": "val2"
}
skipping: [127.0.0.1] => (item=['pass', 'val3'])

I achieved this by :
converting dict to list using filter -> |list
since both dict of same size I was able to get data of both dict in single loop:

- name: test
  debug:
    msg: "{{item.0}} {{item.1}} {{item.2}} {{item.3}}"
  with_together:
    - "{{ Test1.values() | list }}"
    - "{{ Test2.values() | list }}"
    - "{{ Test1.keys() | list }}"
    - "{{ Test2.keys() | list }}"
  when: item.0 == "fail"