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