我有一个具有以下格式的 var_file:
bds_info:
- id: BD1
db_name: BD1
db_port: XXXX
server: server1
repo_url: repo1
- id: BD2
db_name: BD2
db_port: XXXX
server: server2
repo_url: repo2
scan_name: scan2
Run Code Online (Sandbox Code Playgroud)
我想做的是将 var_file 中的 scan_name 选择为如下变量:
var_scan_name_to_use: "{{ (bds_info | selectattr('id', 'equalto', (db_name|upper) ) | map(attribute='scan_name') | join) }}"
Run Code Online (Sandbox Code Playgroud)
如果所选的 id 有密钥,则它可以正常工作,但如果没有,则会出现以下错误:
{
"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'scan_name
}
Run Code Online (Sandbox Code Playgroud)
是否可以返回未定义而不是查找错误?
default如果列表中的对象不具有给定属性,您可以指定要使用的值。Run Code Online (Sandbox Code Playgroud){{ users|map(attribute="username", default="Anonymous")|join(", ") }}
来源: https: //jinja.palletsprojects.com/en/2.11.x/templates/#map
因此,鉴于任务:
{{ users|map(attribute="username", default="Anonymous")|join(", ") }}
Run Code Online (Sandbox Code Playgroud)
这产生:
- debug:
msg: >-
{{
bds_info
| selectattr('id', 'equalto', db_name | upper)
| map(attribute='scan_name', default='undefined')
| join
}}
vars:
db_name: BD1
bds_info:
- id: BD1
db_name: BD1
db_port: XXXX
server: server1
repo_url: repo1
- id: BD2
db_name: BD2
db_port: XXXX
server: server2
repo_url: repo2
scan_name: scan2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3164 次 |
| 最近记录: |