繁体   English   中英

Ansible / Jinja2-列表中的映射嵌套键

[英]Ansible/Jinja2 - Map nested key in list

在嵌套变量列表中映射属性时,我无法检索其键。

我想从以下强调的文本变量中检索“ tls_cert_file”的键:

vault_config_listener:
  - tcp:
    - address: "0.0.0.0:8200"
    - tls_cert_file: "/etc/ssl/wildcard.crt"
    - tls_key_file: "/etc/ssl/private/wildcard.key"
    - tls_require_and_verify_client_cert: "false"
  - tcp:
    - address: "127.0.0.1:8200"
    - tls_disable: true

调试任务:

- debug:
    msg: "{{ (vault_config_listener | selectattr('tcp', 'defined') | map(attribute='tcp')) | selectattr('tls_cert_file','defined') | map(attribute='tls_cert_file') | join('') | dirname }}"

输出:

ok: [test] => {
    "msg": ""
}

我一直在运行地图,直到“ tcp”,但没有其他...逻辑上出了什么问题?

要获取tls_cert_file的列表,可以使用

vault_config_listener | selectattr('tcp', 'defined') | map(attribute='tcp') | sum(start=[]) | selectattr('tls_cert_file','defined') | map(attribute='tls_cert_file') | list

note sum(start=[]) –用于展平列表列表。

PS为什么将可能的多个路径连接成字符串?

PPS您的数据结构似乎很奇怪。 为什么要定义tcp属性(例如list),而不仅仅是:

tcp:
  address: 0.0.0.0:8200
  tls_cert_file: /etc/ssl/wildcard.crt
  tls_key_file: /etc/ssl/private/wildcard.key
  tls_require_and_verify_client_cert: false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM