Jinja2 Ansible 和嵌套 yaml 上的映射

Jinja2 Ansible and map on nested yaml

我有一个如下所示的 yaml :

apache:
  apache_mods:
  - libapache2-mod-perl2
  - libapache2-reload-perl
  vhosts:
    - name: default
      servername: "*"
      port: 81
      conf-file: default.conf
      documentroot: /var/www/html
      directories:
        - path: "/var/www/"
          is_protected: "htpasswd1"
        - path: "/var/www/cgi-bin/" 
          is_cgi: "yes" 
        - path: "/var/www/html/data" 
          is_protected: "htpasswd3"
        - path: "/var/www/html/data-bandwith"
          is_protected: "htpasswd2"
        - path: "/var/www/html/fusion"
          options: |
            ForceType text/plain
        - path: /var/www/html/cedexis/
        - path: "/var/www/php"
          is_php: "yes"
          php_version: "5.6"

我想获取所有 is_protected 值。

在第 2 级没问题:"{{ apache.vhosts | map(attribute=\"port\") | list }}" 例如给我所有端口,但我无法访问第 3 级,链接 map 根本不起作用。

有什么我不明白的吗?这种操作必须进行查找吗?

非常感谢。

您需要获取链中的嵌套列表:

- debug: msg="{{ apache.vhosts | map(attribute='directories') | sum(start=[]) | map(attribute='is_protected') | reject('undefined') | list }}"

我使用 sum(start=[]) 将列表列表展平为单个列表。