Ansible从列表中获取第一个元素

时间:2019-02-11 21:38:30

标签: ansible jinja2

假设我有以下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 }}"

当前任务有效,当找不到匹配项时将给出空字符串,但是我想知道是否有更好的方法/更干净的方法无需将字典传递给默认构造函数。

1 个答案:

答案 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 }}"