Сбор конфигураций на сетевом оборудование средствами Netbox

Редактировал(а) Антон Волков 2025/12/14 19:37

Установка napalm

Для просмотра конфигурации устройств в netbox есть плагин, который называется netbox-napalm-plugin, он позволяет просматривать определенную информацию запрашиваемую у коммутатора или маршрутизатора, имеющего ssh или другой api через интерфейс netbox, про этом в самом netbox ничего не хранится.

Для начала необходимо установить сам napalm, плагин netbox-napalm-plugin и в нашем случае драйвер для RouterOS - napalm-ros.

При этом данные пакеты лучше добавить в зависимости самого netbox, что бы не было проблем при обновлении в будущем.

$ cd /usr/local/share/netbox/
---Воспользуемся виртуальным окружением Netbox---
$ . venv/bin/activate
---Добавляем зависимости---
(venv)$ echo netbox-napalm-plugin >> /usr/local/share/netbox/requirements.txt
(venv)$ echo napalm-ros >> /usr/local/share/netbox/requirements.txt
---Ставим плагины---
(venv)$ pip install netbox-napalm-plugin
(venv)$ pip install napalm-ros

napalm позволяет запрашивать с оборудования структурированные данные в формате json, что в свою очередь очень удобно при использовании с сторонними API.

После установки необходимо добавить записи в конфиг /usr/local/share/netbox/netbox/netbox/configuration.py

1
2
3
4
5
6
7
8
9
10
11
PLUGINS = ["netbox_napalm_plugin"]
PLUGINS_CONFIG = {
'netbox_napalm_plugin': {
       'NAPALM_USERNAME': '<ssh_user>',
       'NAPALM_PASSWORD': '<ssh_Password>',
       'NAPALM_ARGS': {
           'api_key': '<netbox-api>',
           'ssh_port': '22',
                 }
           }
}

Для например cisco требуются сообщать secret после ввода логина и пароля, для этого мы можем указывать дополнительные аргументы в конфигурационном файле:

NAPALM_ARGS = { 'secret': NAPALM_PASSWORD, # Include any additional args here }

---Выполняем миграцию и пополняем статическое содержимое---
(venv)$ python3.11 netbox/manage.py migrate
(venv)$ python3.11 netbox/manage.py collectstatic --no-input
---Перезапускаем службы---
# service netbox restart
# service netbox_rq restart

На примере микротиков, нам надо завести на всех устройствах учетку для napalm и разрешить подключаться с netbox к api и по ssh.

Добавление и настройка устройств в Netbox

После установки плагина у нас в меню появиться новый пункт: 

1731575594944-287.png

К данному меню вернемся позже.

Для начала проверим правильно ли мы настроили устройства и можно ли запросить у них информацию через napalm.

Для этого можно выполнить команду

(venv)$ napalm --user napalm --password 'P@ssw0rd' --vendor ros --debug 172.16.1.1 call get_interfaces

Мы увидим вывод:

{
   "uptime": 7331045.0,
   "vendor": "MikroTik",
   "model": "CCR1036-8G-2S+",
   "hostname": "CORE-MSK-ITSOFT",
   "fqdn": "",
   "os_version": "6.49.13 (long-term)",
   "serial_number": "C6CC0C33A2EA",
   "interface_list": [
.......

Теперь для того, что бы napalm мог запрашивать данные с устройств, нам необходимо добавить производителя:

1731576364910-819.png

платформу, где выберем ранее добавленного производителя:

1731576239344-294.png

И тип устройства, который можно добавить из шаблона или забить руками.

Далее в появившемся меню napalm, о котором говорилось в самом начале, создаем новую запись, где выбираем нашу платформу и указываем для нее драйвер napalm, в нашем случае "ros".

1731576601376-456.png

Теперь мы можем добавить устройство.

1731659226716-847.png

Заполняем все обязательные поля и платформу, которую мы ранее добавили.

1731659456693-430.png

1731659380401-366.png

После создания устройства переходим во вкладку интерфейсы и добавляем Ip адрес интерфейсу.

1731659505279-560.png

Вбиваем адрес с префиксом маски подсети и возвращаемся обратно в редактирование устройства, где в качестве основного адреса выбираем только что добавленный адрес.

1731659616566-752.png

Сохраняем и теперь мы можем увидеть, что у нас появились новые вкладки на странице устройства.

1731659670999-207.png

1731659694059-548.png

1731659748487-229.png

Еще раз напоминаю, данные получаемые по napalm не хранятся в netbox, а каждый раз запрашиваются с устройства.