В предыдущих разделах для отправки команд на оборудование использовался модуль raw. Он универсален, и с его помощью можно отправлять команды на любое устройство.
В этом разделе рассматриваются модули, которые работают с сетевым оборудованием.
Глобально модули для работы с сетевым оборудованием можно разделить на две части:
Если оборудование поддерживает API, как, например, , то для него создано большое количество модулей, которые выполняют конкретные действия по настройке функционала (например, для NXOS создано более 60 модулей).
Для оборудования, которое работает только через CLI, Ansible поддерживает, как минимум, такие три типа модулей:
Соответственно, для разных операционных систем будут разные модули. Например, для Cisco IOS модули будут называться:
Аналогичные три модуля доступны для таких ОС:
Полный список всех сетевых модулей, которые поддерживает Ansible, в .
Обратите внимание, что Ansible очень активно развивается в сторону поддержки работы с сетевым оборудованием, и в следующей версии Ansible, могут быть дополнительные модули. Поэтому, если на момент чтения книги уже есть следующая версия Ansible (версия в книги 2.5), используйте её и посмотрите в документации, какие новые возможности и модули появились.
В этом разделе все рассматривается на примере модулей для работы с Cisco IOS:
Аналогичные модули command, config и facts для других вендоров и ОС работают одинаково, поэтому, если разобраться, как работать с модулями для IOS, с остальными всё будет аналогично.
Кроме того, рассматривается модуль ntc-ansible, который не входит в core модули Ansible.
При работе с сетевым оборудованием надо указать, что должно использоваться подключение типа network_cli. Это можно указывать в инвентарном файле, файлах с перемеными и т.д.
Пример настройки для сценария (play):
--- - name: Run show commands on routers hosts: cisco-routers connection: network_cli
В Ansible переменные можно указывать в разных местах, поэтому те же настройки можно указать по-другому.
Например, в инвентарном файле:
[cisco-routers] 192.168.100.1 192.168.100.2 192.168.100.3 [cisco-switches] 192.168.100.100 [cisco-routers:vars] ansible_connection=network_cli
Или в файлах переменных, например, в group_vars/all.yml:
--- ansible_connection: network_cli
Модули, которые используются для работы с сетевым оборудованием, требуют задания нескольких параметров.
Все описание и примеры относятся к модулям ios_x и могут отличаться для других модулей.
Для каждой задачи должны быть доступны такие параметры:
Пример указания всех параметров в group_vars/all.yml:
--- ansible_connection: network_cli ansible_network_os: ios ansible_user: cisco ansible_password: cisco ansible_become: yes ansible_become_method: enable ansible_become_pass: cisco
В следующих разделах рассматривается работа с модулями ios_command, ios_facts и ios_config. Для того, чтобы все примеры playbook работали, надо создать несколько файлов (проверить, что они есть).
Инвентарный файл myhosts:
[cisco-routers] 192.168.100.1 192.168.100.2 192.168.100.3 [cisco-switches] 192.168.100.100
Конфигурационный файл ansible.cfg:
[defaults] inventory = ./myhosts
В файле group_vars/all.yml надо создать параметры для подключения к оборудованию:
--- ansible_connection: network_cli ansible_network_os: ios ansible_user: cisco ansible_password: cisco ansible_become: yes ansible_become_method: enable ansible_become_pass: cisco