假设我有以下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 }}"
当前任务有效,并且在找不到匹配项时会给出空字符串,但我想知道是否有更好的方法/更干净的方法来执行此操作,而无需将字典传递给默认构造函数。
最佳答案
一个选项是使用json_query
- debug:
msg: "{{ mappings | json_query(\"[?primary=='\" + inventory_hostname + \"'].secondary\") }}"
,但是selectattr也可以工作
- debug:
msg: "{{ mappings | selectattr('primary', 'equalto', inventory_hostname) | map(attribute='secondary') | list }}"
关于Ansible 从列表中获取第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54639553/