Ansible получить первый элемент из списка - PullRequest
0 голосов
/ 12 февраля 2019

Предположим, у меня есть следующие vars_file:

mappings:
  - primary: 1.1.1.1
    secondary: 2.2.2.2

  - primary: 12.12.12.12
    secondary: 11.11.11.11

и файл hosts

1.1.1.1
12.12.12.12
5.5.5.5

и следующая задача playbook

- name: Extract secondary from list
  debug:
    msg: "{{ (mappings | selectattr('primary', 'search', inventory_hostname) | list | first | default({'secondary':None})).secondary }}"

Текущая задачаработает и выдаст пустую строку, когда совпадений не будет найдено, но я хотел бы знать, есть ли лучший способ сделать это без передачи словаря в конструктор по умолчанию.

1 Ответ

0 голосов
/ 12 февраля 2019

Можно использовать json_query

- debug:
    msg: "{{ mappings | json_query(\"[?primary=='\" + inventory_hostname + \"'].secondary\") }}"

, но selectattr тоже работает

- debug:
    msg: "{{ mappings | selectattr('primary', 'equalto', inventory_hostname) | map(attribute='secondary') | list }}"
...