Работа с выводом команд и запросами в модулях сетевого взаимодействия
- Условные операторы в модулях сетевого взаимодействия
- Обработка запросов в модулях сетевого взаимодействия
Условные операторы в модулях сетевого взаимодействия
Ansible позволяет использовать условные операторы для управления потоком выполнения ваших playbooks. Модули команд Ansible для сетевого взаимодействия используют следующие уникальные условные операторы.
-
eq- Равно -
neq- Не равно -
gt- Больше -
ge- Больше или равно -
lt- Меньше -
le- Меньше или равно -
contains- Объект содержит указанный элемент
Условные операторы оценивают результаты команд, выполняемых удалённо на устройстве. После выполнения набора команд, аргумент wait_for может быть использован для оценки результатов перед возвратом управления playbook Ansible.
Например:
---
- name: wait for interface to be admin enabled
arista.eos.eos_command:
commands:
- show interface Ethernet4 | json
wait_for:
- "result[0].interfaces.Ethernet4.interfaceStatus eq connected"
В приведённом выше примере команда show interface Ethernet4 | json выполняется на удалённом устройстве, и результаты оцениваются. Если путь (result[0].interfaces.Ethernet4.interfaceStatus) не равен “connected”, то команда повторно выполняется. Этот процесс продолжается до тех пор, пока условие не будет выполнено или не истечёт лимит попыток (по умолчанию, это 10 попыток с интервалом в 1 секунду).
Модуль команд также может оценивать более одного набора результатов команд в интерфейсе. Например:
---
- name: wait for interfaces to be admin enabled
arista.eos.eos_command:
commands:
- show interface Ethernet4 | json
- show interface Ethernet5 | json
wait_for:
- "result[0].interfaces.Ethernet4.interfaceStatus eq connected"
- "result[1].interfaces.Ethernet5.interfaceStatus eq connected"
В данном примере две команды выполняются на удалённом устройстве, и результаты оцениваются. Указав значение индекса результата (0 или 1), проверяется правильный вывод результата по отношению к условному оператору.
Аргумент wait_for всегда должен начинаться с result, а затем с индекса команды в [], где 0 — первая команда в списке команд, 1 — вторая, 2 — третья и так далее.
Обработка запросов в модулях сетевого взаимодействия
Сетевые устройства могут потребовать ответа на запрос перед выполнением изменения на устройстве. Индивидуальные сетевые модули, такие как cisco.ios.ios_command и cisco.nxos.nxos_command, могут обработать это с помощью параметра prompt.
Примечание
prompt — это регулярное выражение Python. Если вы добавите специальные символы, такие как ? в значение prompt, запрос не будет совпадать, и произойдёт таймаут. Чтобы этого избежать, убедитесь, что значение prompt — это регулярное выражение Python, которое соответствует фактическому запросу устройства. Все специальные символы должны быть обработаны корректно в регулярном выражении prompt.
Вы также можете использовать ansible.netcommon.cli_command для обработки нескольких запросов.
---
- name: multiple prompt, multiple answer (mandatory check for all prompts)
ansible.netcommon.cli_command:
command: "copy sftp sftp://user@host//user/test.img"
check_all: True
prompt:
- "Confirm download operation"
- "Password"
- "Do you want to change that to the standby image"
answer:
- 'y'
- <password>
- 'y'
Вы должны перечислить запрос и ответы в том же порядке (то есть, prompt[0] отвечает answer[0]).
В приведённом выше примере check_all: True гарантирует, что задача даёт соответствующий ответ на каждый запрос. Без этого параметра задача с несколькими запросами дала бы первый ответ на каждый запрос.
В следующем примере второй ответ будет проигнорирован, и y будет ответом, данным на оба запроса. Обратите внимание, что prompt должно быть регулярным выражением Python, поэтому ? экранируется в первом запросе.
---
- name: reboot ios device
ansible.netcommon.cli_command:
command: reload
prompt:
- Save\?
- confirm
answer:
- y
- y
См. также
- Перезагрузка сетевых устройств с помощью Ansible
-
Примеры использования
wait_for,wait_for_connection, иpromptдля сетевых устройств. - Подробное изучение cli_command
-
Подробный обзор использования модуля
cli_command.
© 2012–2018 Michael DeHaan
© 2018–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/network/user_guide/network_working_with_command_output.html