Книга: PyNEng
Назад: Основы playbook
Дальше: ios_command

24. Сетевые модули

Модули для работы с сетевым оборудованием

В предыдущих разделах для отправки команд на оборудование использовался модуль raw. Он универсален, и с его помощью можно отправлять команды на любое устройство.

В этом разделе рассматриваются модули, которые работают с сетевым оборудованием.

Глобально модули для работы с сетевым оборудованием можно разделить на две части:

  • модули для оборудования с поддержкой API
  • модули для оборудования, которое работает только через CLI

Если оборудование поддерживает API, как, например, , то для него создано большое количество модулей, которые выполняют конкретные действия по настройке функционала (например, для NXOS создано более 60 модулей).

Для оборудования, которое работает только через CLI, Ansible поддерживает, как минимум, такие три типа модулей:

  • os_command - выполняет команды show
  • os_facts - собирает факты об устройствах
  • os_config - выполняет команды конфигурации

Соответственно, для разных операционных систем будут разные модули. Например, для Cisco IOS модули будут называться:

  • ios_command
  • ios_config
  • ios_facts

Аналогичные три модуля доступны для таких ОС:

  • Dellos10
  • Dellos6
  • Dellos9
  • EOS
  • IOS
  • IOS XR
  • JUNOS
  • SR OS
  • VyOS

Полный список всех сетевых модулей, которые поддерживает Ansible, в .

Обратите внимание, что Ansible очень активно развивается в сторону поддержки работы с сетевым оборудованием, и в следующей версии Ansible, могут быть дополнительные модули. Поэтому, если на момент чтения книги уже есть следующая версия Ansible (версия в книги 2.5), используйте её и посмотрите в документации, какие новые возможности и модули появились.

В этом разделе все рассматривается на примере модулей для работы с Cisco IOS:

  • ios_command
  • ios_config
  • ios_facts

Аналогичные модули 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 и могут отличаться для других модулей.

Для каждой задачи должны быть доступны такие параметры:

  • ansible_network_os - например, ios, eos
  • ansible_user - имя пользователя
  • ansible_password - пароль
  • ansible_become - нужно ли переходить в привилегированный режим (enable, для Cisco)
  • ansible_become_method - каким образом надод переходить в привилегированный режим
  • ansible_become_pass - пароль для привилегированного режима

Пример указания всех параметров в 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 
Назад: Основы playbook
Дальше: ios_command