在变量列表中映射属性时,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在另一个地方循环。
答案 0 :(得分:2)
首先,在打印任意表达式时不要使用debug
' var
,而是使用msg
。
至于你的问题,map
非常愚蠢,并没有做你不想要的事情,所以你实际上需要选择首先定义了指定属性的项目,然后获取它的价值观:
- debug:
msg: "{{ vault_config_listener_params | selectattr('tls_cert_file','defined') | map(attribute='tls_cert_file') | list }}"