Ansible - 在映射属性时,在键的开头和结尾处'未定义'

时间:2017-08-08 09:52:52

标签: filter ansible yaml jinja2

在变量列表中映射属性时,Ansible正在向键的开头和结尾添加“未定义”。

变量:

vault_config_listener_params:
  - address: "0.0.0.0:8200"
  - tls_cert_file: "/etc/ssl/certs/wildcard.crt"
  - tls_key_file: "/etc/ssl/certs/wildcard.key"

调试任务:

- debug: var=vault_config_listener_params|map(attribute="tls_cert_file")|list

输出:

ok: [id70118] => {
    "vault_config_listener_params|map(attribute=\"tls_cert_file\")|list":
"[Undefined, u'/etc/ssl/certs/wildcard.crt', Undefined]"
}

随着关键路径的提取,maping似乎已经奏效了。但“未定义”来自哪里?

PS:变量需要是一个列表,因为它们使用jinja2在另一个地方循环。

1 个答案:

答案 0 :(得分:2)

首先,在打印任意表达式时不要使用debug' var,而是使用msg

至于你的问题,map非常愚蠢,并没有做你不想要的事情,所以你实际上需要选择首先定义了指定属性的项目,然后获取它的价值观:

- debug:
    msg: "{{ vault_config_listener_params | selectattr('tls_cert_file','defined') | map(attribute='tls_cert_file') | list }}"