Отслеживаемый вывод IOS для печати на строковом совпадении

-5

Я пытаюсь использовать Ansible для попадания в группу (100+). Cisco Catalyst переключается и проверяет, установлена ли определенная линейная карта. Через SSH это можно сделать с помощью команды "sh mod". Я хочу проанализировать вывод этой команды в playbook, а затем показать вывод команды, если соответствует определенная строка. Прямо сейчас с плейером ниже я получаю следующую ошибку:

fatal: [redacted-hostname]: FAILED! => {"failed": true, msg ":" Условная проверка 'showmod | search (\ "4548 \")' не удалась. Ошибка: Ошибка неожиданного типа шаблонов ({% if showmod | search (\ "4548 \")%} Истина {% else%} False {% endif%}): ожидаемая строка или буфер\n\nВыходила ошибка в '/etc/ansible/playbooks/linecard-4548.yaml': строка 22, столбец 5, но может \n быть в другом месте в файле в зависимости от точной проблемы синтаксиса.\n\nСогласная строка выглядит как:\n\n\n - debug:\"msg = '4548 Card Found'\"\n ^ here\n"}

Текущий код для воспроизведения:

---
- hosts: redacted-hostname
gather_facts: yes
connection: local

tasks:

- name: SYS | Define provider
set_fact:
provider:
host: "{{ inventory_hostname }}"
username: redacted-user
password: redacted-password

- name: IOS | Get Module List
ios_command:
provider: "{{ provider }}"
commands:
- sh mod | inc 4548
register: showmod

- debug: "msg='4548 Card Found'"
when: showmod.stdout | search("/4548/")

Я пробовал, when в отладке с и без .stdout ничего не .stdout. Я провел некоторое исследование, и ошибка, которую я получаю, обычно возникает, когда в моем случае showmod не определен, но это определенно. Если я заменил отладку следующим фрагментом, то программа воспроизведения будет работать нормально, но, конечно же, она будет печатать выходные данные для каждого коммутатора, который не является тем, что я хочу.

  - name: IOS | Show Output
debug:
var: showmod

Какие-либо предложения?

спросил(а) 2021-01-25T19:30:45+03:00 4 месяца, 4 недели назад
1
Решение
63

ios_command возвращает stdout как list и stdout_lines как список списков (тогда как command модуль возвращает stdout как строку и stdout_lines как список).

Поэтому в вашем случае вы можете попробовать:

- debug: "msg='4548 Card Found'"
when: showmod.stdout | join(" ") | search("/4548/")

ответил(а) 2021-01-25T19:30:45+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема