假设我有以下vars_file
:
mappings:
- primary: 1.1.1.1
secondary: 2.2.2.2
- primary: 12.12.12.12
secondary: 11.11.11.11
并托管文件
1.1.1.1
12.12.12.12
5.5.5.5
以及以下剧本任务
- name: Extract secondary from list
debug:
msg: "{{ (mappings | selectattr('primary', 'search', inventory_hostname) | list | first | default({'secondary':None})).secondary }}"
当前任务有效,当找不到匹配项时将给出空字符串,但是我想知道是否有更好的方法/更干净的方法无需将字典传递给默认构造函数。
答案 0 :(得分:2)
一种选择是使用 json_query
- debug:
msg: "{{ mappings | json_query(\"[?primary=='\" + inventory_hostname + \"'].secondary\") }}"
,但是 selectattr 也可以工作
- debug:
msg: "{{ mappings | selectattr('primary', 'equalto', inventory_hostname) | map(attribute='secondary') | list }}"