Spec-Zone.ru › Ansible 2.11

Работа с выводом команд и запросами в модулях сети

  • Условные операторы в модулях сети
  • Обработка запросов в модулях сети

Условные операторы в модулях сети

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–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.10/network/user_guide/network_working_with_command_output.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API