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=[])
将列表列表展平为单个列表。
我有一个如下所示的 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=[])
将列表列表展平为单个列表。