Ansible 使用数组的值作为键来循环遍历包含多个值的字典

Ansible using values of an array as a key to loop through a dictionary that contains multiple values

我正在尝试根据目录所属的组以及用户在变量中定义的内容来创建目录。

[web20int]
server1
server2

[web20ext]
server3

[app01dev]
server1


certdir:
    
  web20int:
    - intwiki
    - intblogs

  web20ext:
    - wiki
    - xblogs

  app01dev:
    - app01dev


---
  - name: Set App Name Key List
    set_fact:
      ckeys: "{{ certdir.keys()|list }}"

  - name: Get Group Names
    debug:
      msg: "{{ group_names }} "

  - name: Get Cert App Names
    debug:
      msg: item
    loop: "{{ ckeys }}"

  - name: Setting Union between Group Names and Cert App Names
    set_fact:
      union_key: "{{ ckeys | intersect(group_names) }}"

  - name: Result of union
    debug:
       var: union_key

这是我不明白如何进行嵌套循环或使用 jini2 模板的地方。 我想遍历 union_key 数组,然后遍历 certdir 并获取要放入另一个数组的值列表

  - name: create cert directory for app
    file:
      path: "{{ item }}"
      state: directory
      owner: root
      group: root
      mode: 0755
    loop: "{{ <SOME ARRAY THAT CONTAINS THE DIRECTORY NAMES }}"

例如,server1 属于组: [web20int] [app01dev]

因此我希望数组包含: intwiki intblogs app01dev

谢谢

你可以map the extract filter:

union_key | map('extract', certdir)

但这会给你一个列表列表,所以你需要应用 flatten 过滤器:

loop: "{{ union_key | map('extract', certdir) | flatten }}"

(如果 flatten 给出可迭代对象而不是列表,您可能还需要使用 list 过滤器)

顺便说一句,变量名和任务名说的是'union',但是你做的是'intersection'.