Часто задаваемые вопросы об Ansible Network
- Почему иногда мой вывод заменяется на
********? - Почему модули
*_configвсегда возвращаютchanged=trueпри использовании сокращённых команд?
Как повысить производительность сетевых сценариев?
Рассмотрите strategy: free при работе с несколькими узлами
Плагин strategy указывает Ansible, в каком порядке выполнять несколько задач на нескольких узлах. Стратегия задаётся на уровне сценария.
По умолчанию используется стратегия linear. При стратегии linear Ansible дожидается выполнения текущей задачи на всех узлах, прежде чем начать следующую задачу на любом из них. У Ansible могут быть свободные форки, но он не будет их использовать, пока все узлы не завершат текущую задачу. Если для перехода к следующей задаче в сценарии требуется успешное выполнение текущей задачи на всех узлах, используйте стратегию linear.
При использовании стратегии free Ansible задействует доступные форки, чтобы как можно быстрее выполнять задачи на каждом узле. Даже если на одном узле ещё выполняется предыдущая задача, Ansible запускает последующие задачи на других узлах. Стратегия free эффективнее использует доступные форки. Если сценарий приостанавливается на каждой задаче в ожидании медленного узла, рассмотрите возможность использования strategy: free для повышения общей производительности.
Выполняйте show running только в случае крайней необходимости
Команда show running требует больше всего ресурсов при выполнении на сетевом устройстве из-за особенностей обработки запросов сетевой операционной системой. Использование этой команды в сценарии Ansible значительно снизит производительность, особенно на крупных устройствах; повторное выполнение ещё сильнее усугубит ситуацию. Если сценарий проверяет текущую конфигурацию, затем вносит изменения, а после этого снова проверяет текущую конфигурацию, ожидайте, что он будет выполняться очень медленно.
Используйте ProxyCommand только в случае крайней необходимости
Сетевые модули поддерживают использование прокси-узла или промежуточного узла с параметром ProxyCommand. Однако при использовании промежуточного узла Ansible должен открывать новое SSH-соединение для каждой задачи, даже если используется тип постоянного соединения (network_cli или netconf). Чтобы максимально воспользоваться преимуществами типов постоянного соединения, появившихся в версии 2.5, по возможности не используйте промежуточные узлы.
Установите --forks в соответствии с вашими потребностями
При каждом запуске задачи Ansible создаёт для неё отдельный процесс. Параметр --forks определяет количество одновременно выполняемых задач. Если оставить значение по умолчанию, равное --forks=5, и запустить сценарий на 10 узлах, пяти из них придётся ждать, пока освободится форк. Разумеется, чем больше форков вы разрешите, тем больше памяти и вычислительных ресурсов будет использовать Ansible. Поскольку большинство сетевых задач выполняются на управляющем узле, ресурсы процессора или памяти ноутбука могут быстро исчерпаться.
Почему иногда мой вывод заменяется на ********?
Ansible заменяет в выводе все строки, помеченные как no_log, в том числе пароли, на ********. Это сделано для защиты конфиденциальных данных. Большинство пользователей рады тому, что их пароли скрываются. Однако Ansible заменяет на ******** каждую строку, совпадающую с вашим паролем. Это может стать проблемой, если вы используете в качестве пароля распространённое слово. Например, если в качестве пароля выбрать Admin, Ansible заменит в выводе каждое вхождение слова Admin на ********. Из-за этого вывод может стать менее понятным. Чтобы избежать этой проблемы, выберите надёжный пароль, который не встречается в других местах вывода Ansible.
Почему модули *_config всегда возвращают changed=true при использовании сокращённых команд?
При вводе команд непосредственно на сетевом устройстве можно использовать их сокращённые формы. Например, int g1/0/11 и interface GigabitEthernet1/0/11 выполняют одно и то же; shut и shutdown выполняют одно и то же. Модули Ansible Network *_command работают с сокращениями, поскольку выполняют команды через сетевую операционную систему.
Однако при фиксации конфигурации сетевая операционная система преобразует сокращения в полные команды. Независимо от того, используете ли вы shut или shutdown в GigabitEthernet1/0/11, результат в конфигурации будет одинаковым: shutdown.
Модули Ansible Network *_config сравнивают текст команд, заданных вами в lines, с текстом в конфигурации. Если в разделе lines задачи вы используете shut, а в конфигурации указано shutdown, модуль вернёт changed=true, даже если конфигурация уже верна. При каждом запуске задачи конфигурация будет обновляться.
Чтобы избежать этой проблемы, используйте в модулях *_config команды в полной форме:
---
- hosts: all
gather_facts: no
tasks:
- cisco.ios.ios_config:
lines:
- shutdown
parents: interface GigabitEthernet1/0/11
© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/network/user_guide/faq.html