Описание Python-скрипт для автоматической синхронизации статусов IP-адресов в NetBox на основе их доступности через ICMP ping. Скрипт проверяет все IP-адреса из префиксов, зарегистрированных в NetBox, и обновляет их статусы в соответствии с результатами проверки.
🌟 Возможности Многопроцессорная обработка - использует все доступные ядра CPU для ускорения проверки
Интеллектуальное управление статусами - автоматическое переключение между статусами active, deprecated, reserved
Исключение подсетей - возможность исключения определенных сетей из проверки
Автоматическое добавление - обнаружение новых IP-адресов в префиксах NetBox
Безопасная обработка - сохранение важных статусов (deprecated, reserved)
Требования Системные зависимости bash
sudo apt-get install python3 python3-pip
sudo yum install python3 python3-pip Python библиотеки bash pip install pynetbox
NetBox NetBox v2.10 или выше
API токен с правами на запись в IPAM
Доступ на чтение префиксов
⚙️ Конфигурация
- Основные настройки Отредактируйте параметры подключения в скрипте:
python
nb = pynetbox.api( 'https://netbox.example.com:8443', # URL вашего NetBox token='ваш_api_токен_здесь' # API токен )
- Генерация API токена Войдите в NetBox как администратор
Перейдите: Admin → API Tokens → Add Token
Укажите:
Key: Скопируйте сгенерированный токен
Write enabled: ✓
Expires: По необходимости
- Настройка исключений (опционально) python
prefixes = [net for net in prefixes if '192.168.' not in str(net)]
Настройка VRF (опционально) По умолчанию используется VRF с ID=1. Для изменения:
python respon = nb.ipam.ip_addresses.create( address=addr, vrf=1, # ← Замените на нужный VRF ID description='add by pinger' )
Установка и запуск Способ 1: Прямой запуск bash
chmod +x netbox_pinger.py
./netbox_pinger.py Способ 2: Через Python bash python3 netbox_pinger.py
Способ 3: Docker (опционально) dockerfile FROM python:3.9-slim RUN pip install pynetbox COPY netbox_pinger.py /app/ WORKDIR /app CMD ["python3", "netbox_pinger.py"]
🔄 Логика работы
graph TD A[Получение всех префиксов из NetBox] --> B[Исключение указанных подсетей] B --> C[Генерация списка всех IP-адресов] C --> D[Многопроцессорная проверка ping] D --> E{IP доступен?} E -->|Да| F[Обновить статус на active] E -->|Нет| G[Обновить статус на deprecated/reserved]
Таблица статусов
Ситуация Статус в NetBox Действие скрипта IP доступен, не существует в NetBox - Создать со статусом active IP доступен, статус deprecated/reserved deprecated/reserved Изменить на active IP доступен, статус active active Без изменений IP недоступен, статус active active Изменить на deprecated IP недоступен, не существует в NetBox - Создать со статусом reserved
⚡ Производительность Настройка многопроцессорности Скрипт автоматически настраивает оптимальное количество процессов:
pool_size = cpu_count * 4 (максимум 100)
Пример: 8 ядер → 32 процесса
🔒 Безопасность SSL сертификаты По умолчанию отключена проверка SSL:
python
nb.http_session.verify = False #
python
nb.http_session.verify = True
nb.http_session.verify = '/path/to/certificate.pem' Права доступа Рекомендуется создать отдельного пользователя в NetBox с минимально необходимыми правами:
ipam: add_ipaddress, change_ipaddress, view_ipaddress, view_prefix