Spec-Zone.ru › Ansible

Часто задаваемые вопросы по Ansible для работы с сетями

  • Как улучшить производительность playbook для работы с сетями?

    • Рассмотрите strategy: free при работе на нескольких хостах
    • Выполняйте show running только в крайнем случае
    • Используйте ProxyCommand только в крайнем случае
    • Установите --forks в соответствии с вашими потребностями
  • Почему мой вывод иногда заменяется на ********?
  • Почему модули конфигурации *_config всегда возвращают changed=true при использовании сокращенных команд?

Как улучшить производительность playbook для работы с сетями?

Рассмотрите strategy: free при работе на нескольких хостах

Плагин strategy указывает Ansible, как упорядочить несколько задач на нескольких хостах. Стратегия устанавливается на уровне playbook.

По умолчанию используется стратегия linear. Если стратегия установлена на linear, Ansible ожидает, пока текущая задача выполнится на всех хостах, прежде чем начать следующую задачу на любом из них. Ansible может иметь доступные потоки, но не будет использовать их, пока все хосты не завершат текущую задачу. Если каждая задача в вашем playbook должна быть выполнена на всех хостах, прежде чем перейти к следующей, используйте стратегию linear.

Используя стратегию free, Ansible использует доступные потоки для выполнения задач на каждом хосте как можно быстрее. Даже если предыдущая задача все еще выполняется на одном хосте, Ansible выполняет последующие задачи на других хостах. Стратегия free более эффективно использует доступные потоки. Если ваш playbook зависает на каждой задаче, ожидая одного медленного хоста, рассмотрите использование strategy: free для повышения общей производительности.

Выполняйте show running только в крайнем случае

Команда show running является самой ресурсоемкой командой для выполнения на сетевом устройстве из-за способа обработки запросов операционной системой сети. Использование этой команды в вашем playbook Ansible значительно замедлит производительность, особенно на больших устройствах; повторное её использование увеличит потери производительности. Если у вас есть 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 Network *_command работают со сокращениями, так как они выполняют команды через операционную систему сети.

Однако при внесении изменений в конфигурацию операционная система сети преобразует сокращения в команды полного написания. Независимо от того, используете ли вы shut или shutdown на GigabitEthernet1/0/11, результат в конфигурации будет тем же: shutdown.

Модули Ansible Network *_config сравнивают текст команд, которые вы указываете в lines с текстом в конфигурации. Если вы используете shut в разделе lines вашей задачи, а в конфигурации указано 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–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/network/user_guide/faq.html

Spec-Zone.ru

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