Есть ли простой способ получить доступ к значению внутри вложенных dicts, которое не вызывает ошибок, если один из dicts существует. Не знаю, как это назвать, но предлагается как необязательная цепочка для ECMAScript. Единственное, что я нашел, это закрытый PR для добавления safe_item, но он был закрыт.
Я пытаюсь сделать что-то вроде "{{ hostvars[item].ip_addr | default(hostvars[item]['ansible_default_ipv4']['address']) }}"
, но это не ошибка, когда ansible_default_ipv4
не установлен (например, когда один из хостов не работает).
Что-то вроде "{{ hostvars[item].ip_addr | default(hostvars[item] | getattr(['ansible_default_ipv4', 'address'], omit)) }}"
было бы замечательно.
Это немного некрасиво, но вы можете гнездиться default
фильтры:
{{ hostvars[item].ip_addr | default(hostvars[item]['ansible_default_ipv4']['address'] | default(omit)) }}
Обратите внимание, что omit
будет работать только при предоставлении необязательных значений параметру модуля. В других случаях (например, установка значения var с помощью set_fact
), вам нужно будет указать какое-то значение по умолчанию.