Назад | Перейти на главную страницу

Ценность глубоко в dicts

Есть ли простой способ получить доступ к значению внутри вложенных 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), вам нужно будет указать какое-то значение по умолчанию.