В настоящее время у меня есть функциональная книга воспроизведения, которая обращается к сетевым устройствам, возвращает вывод LLDP, форматирует его, а затем записывает обратно в интерфейсы устройства. Мы столкнулись с проблемой, когда нам нужно исключить определенные c интерфейсы (которые указаны в host_vars), чтобы не перезаписать. Проблема, с которой я сталкиваюсь, находится на данном этапе сценария:
- name: CONFIGURE PORT DESCRIPTIONS USING NEIGHBOR DATA
include_tasks: lldp_int_desc.yml
with_items: "{{ neighbors.response }}"
when: "{{ item.local_interface }} not in {{ excluded_ports }}"
Изначально я пытался использовать операторы «блок» и «когда», однако быстро понял, что они не работают с циклами, поэтому обходной путь - использовать include_tasks. Условный оператор "when" берет локальный интерфейс из возвращенного вывода LLDP и проверяет его по списку интерфейсов в каталоге host_vars:
---
excluded_ports:
- Eth1/10
- Eth1/11
Ошибка:
"Условная проверка '{{item.local_interface}} не в {{excluded_ports}}' не удалась. Ошибка была: ошибка шаблона при создании строки шаблона: ожидаемый токен ',', получена 'строка'. Строка: {% if Eth1 / 5 not in [u'Eth1 / 10 ', u'Eth1 / 11']%} True {% else%} False {% endif%}
Таким образом, это проблема с первая переменная представляет собой строку, а вторая - список? Я не уверен, как еще отобразить информацию excluded_ports. Я думал о создании спецификаций c when для каждого интерфейса, но это, похоже, противоречит цели al oop. Любая помощь приветствуется.