Ansible - Использование условного оператора when на al oop для исключения совпадающих интерфейсов - PullRequest
0 голосов
/ 09 июля 2020

В настоящее время у меня есть функциональная книга воспроизведения, которая обращается к сетевым устройствам, возвращает вывод 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. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 09 июля 2020

, когда предложение само по себе является необработанным выражением jinja2, поэтому вам не следует использовать {{}}, поэтому просто измените предложение на

- 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...