Jinja2 Ansible并在嵌套的yaml上映射

时间:2016-10-27 08:33:50

标签: ansible jinja2

我有一个看起来像这样的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值。

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

有什么我不明白的吗?这种操作是强制查找吗?

非常感谢。

1 个答案:

答案 0 :(得分:2)

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

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

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