Найти в Дзене
Николай Калюжный

Автоматизация обновления конфигурации сетевых устройств в NetBox с помощью заданий Ansible, Python и Cron

Введение В современных динамичных сетевых средах крайне важно вести точную и актуальную инвентаризацию сетевых устройств. NetBox, мощный инструмент управления IP-адресами (IPAM) с открытым исходным кодом и управления инфраструктурой центра обработки данных (DCIM), служит единым источником достоверной информации для сетевых конфигураций. Однако ручное обновление NetBox с изменениями с сетевых устройств может занять много времени... В современных динамичных сетевых средах крайне важно вести точную и актуальную инвентаризацию сетевых устройств. NetBox, мощный инструмент управления IP-адресами (IPAM) с открытым исходным кодом и управления инфраструктурой центра обработки данных (DCIM), служит единым источником достоверной информации для сетевых конфигураций. Однако ручное обновление NetBox с изменениями с сетевых устройств может занять много времени и привести к ошибкам. В этой записи блога рассматривается оптимизированный подход к автоматизации процесса обновления NetBox с помощью последн
Оглавление

Введение В современных динамичных сетевых средах крайне важно вести точную и актуальную инвентаризацию сетевых устройств. NetBox, мощный инструмент управления IP-адресами (IPAM) с открытым исходным кодом и управления инфраструктурой центра обработки данных (DCIM), служит единым источником достоверной информации для сетевых конфигураций. Однако ручное обновление NetBox с изменениями с сетевых устройств может занять много времени...

Знакомство

В современных динамичных сетевых средах крайне важно вести точную и актуальную инвентаризацию сетевых устройств. NetBox, мощный инструмент управления IP-адресами (IPAM) с открытым исходным кодом и управления инфраструктурой центра обработки данных (DCIM), служит единым источником достоверной информации для сетевых конфигураций. Однако ручное обновление NetBox с изменениями с сетевых устройств может занять много времени и привести к ошибкам.

В этой записи блога рассматривается оптимизированный подход к автоматизации процесса обновления NetBox с помощью последних конфигураций устройств Cisco IOS-XE. Используя возможности автоматизации Ansible, гибкость Python и возможности планирования заданий cron, вы можете гарантировать, что ваш экземпляр NetBox будет оставаться актуальным с минимальным ручным вмешательством. Я проведу вас через настройку этого конвейера автоматизации, от настройки сетевых устройств до обеспечения того, чтобы NetBox отражал последние конфигурации, и все это с практическими примерами и подробными инструкциями.

В этом руководстве мы рассмотрим:

1. Setting Up NetBox: Adding your Cisco IOS-XE devices to NetBox.

2. Configuring Ansible and Python: Fetching device configurations and updating NetBox.

3. Automating with Cron Jobs: Scheduling regular updates to maintain synchronization.

4. Practical Example: Updating NetBox with a new VLAN and SVI configuration on a Cisco IOS-XE 9300.

К концу этого урока у вас будет надежное решение для синхронизации конфигураций сетевых устройств с NetBox, повышая эффективность и точность управления сетью.

Файловая структура

/AutomateNetBox/
├── fetch_config.yml
├── update_netbox.yml
├── inventory
├── scripts/
│ └── update_netbox.py

В качестве примера мы будем использовать одно устройство IOS-XE, но не стесняйтесь добавить все свои сетевые устройства в файл узла инвентаризации Ansible.

Шаг 1: Настройте NetBox

  1. Войдите в NetBox: используйте браузер для перехода к экземпляру NetBox и войдите в систему.
  2. Добавьте устройство: перейдите в раздел «Устройства» > «Добавить устройство» и заполните форму, чтобы добавить устройство Cisco IOS-XE 9300. Убедитесь, что имя устройства совпадает с именем, которое вы будете использовать в скриптах (например, ios-xe-9300-1).

Шаг 2: Установите необходимые инструменты

Убедитесь, что установлены Ansible, Python и необходимые библиотеки

pip install ansible netmiko pynetbox

Шаг 3: Настройте Ansible Inventory

Создайте файл инвентаризации для устройства IOS-XE.

AutomateNetBox/инвентаризация

[ios_devices] 172.16.20.1 ansible_user=your_username ansible_password=your_password ansible_network_os=ios

Шаг 4: Создайте Ansible Playbook для получения конфигураций устройств

Создайте сборник схем Ansible для получения текущих конфигураций с устройства IOS-XE.

AutomateNetBox/fetch_config.yml


– name: Fetch IOS Device Configurations
hosts: ios_devices
gather_facts: no
tasks:
– name: Gather running configuration
ios_command:
commands:
– show running-config
register: running_config

– name: Save configuration to file
copy:
content: “{{ running_config.stdout[0] }}”
dest: “/tmp/{{ inventory_hostname }}_config.txt”

Шаг 5: Создание скрипта Python для обновления NetBox

Создайте скрипт Python, который считывает конфигурации и обновляет NetBox.

AutomateNetBox/scripts/update_netbox.py

import pynetbox
import sys
import os

NETBOX_URL = ‘http://your-netbox-url’
NETBOX_TOKEN = ‘your-netbox-api-token’

def parse_config(config_file):
interfaces = []
with open(config_file, ‘r’) as file:
for line in file:
if line.startswith(‘interface’):
interface = line.split()[1]
interfaces.append(interface)
elif line.strip().startswith(‘ip address’):
ip_address = line.strip().split()[2]
interfaces[-1] = (interfaces[-1], ip_address)
return interfaces

def update_netbox(device_name, interfaces):
nb = pynetbox.api(NETBOX_URL, token=NETBOX_TOKEN)
device = nb.dcim.devices.get(name=device_name)

if not device:
print(f”Device {device_name} not found in NetBox”)
return

for interface_name, ip_address in interfaces:
interface = nb.dcim.interfaces.get(device_id=device.id, name=interface_name)

if not interface:
print(f”Interface {interface_name} not found in NetBox for device {device_name}”)
continue

ip_check = nb.ipam.ip_addresses.filter(address=ip_address)
if not ip_check:
nb.ipam.ip_addresses.create({
‘address’: ip_address,
‘assigned_object_id’: interface.id,
‘assigned_object_type’: ‘dcim.interface’,
})

if __name__ == “__main__”:
config_dir = ‘/tmp’
for config_file in os.listdir(config_dir):
if config_file.endswith(‘_config.txt’):
device_name = config_file.split(‘_’)[0]
interfaces = parse_config(os.path.join(config_dir, config_file))
update_netbox(device_name, interfaces)

Шаг 6: Создайте Ansible Playbook для запуска скрипта Python

Создайте сборник схем Ansible для запуска скрипта Python после получения конфигураций.

AutomateNetBox/update_netbox.yml


– name: Update NetBox with IOS Configurations
hosts: localhost
gather_facts: no
tasks:
– name: Run Python script to update NetBox
command: python3 /AutomateNetBox/scripts/update_netbox.py

Шаг 7: Настройте задание Cron для периодических обновлений

Настройте задание cron для периодического запуска сборников схем Ansible.

  1. Открыть Crontab:

crontab -e

  1. Добавьте задание cron:

*/30 * * * * /usr/bin/ansible-playbook -i /путь/к/ansible/инвентарь /путь/к/ansible/fetch_config.yml & /usr/bin/ansible-playbook -i /путь/к/ansible/инвентарь /путь/к/ansible/update_netbox.yml

Сводка

Выполнив эти шаги, вы получите систему, в которой Ansible периодически получает текущие конфигурации с вашего сетевого устройства и обновляет NetBox с любыми изменениями. Задание cron гарантирует, что этот процесс выполняется каждые 30 минут, синхронизируя данные NetBox с фактическими конфигурациями устройства.

Если вы добавите все сетевые устройства в файл хоста Ansible – все устройства будут согласованы с Netbox, пока они существовали в разделе Устройства в Netbox.

Практический пример

Я проведу вас через пример процесса, создав VLAN и SVI на Cisco IOS-XE 9300 с помощью простого сценария Netmiko, и продемонстрирую, как NetBox автоматически обновляется с учетом этих изменений. Я также покажу вам, как будут выглядеть обновленные записи NetBox после обновления конфигураций.

Шаг 1: Создание VLAN и SVI на IOS-XE с помощью Netmiko

Сначала создайте скрипт Python с помощью Netmiko для настройки VLAN 20 и SVI 192.168.1.1 на IOS-XE 9300.

create_vlan_svi.py

from netmiko import ConnectHandler

Сведения об устройстве

ios_device = {
‘device_type’: ‘cisco_ios’,
‘host’: ‘172.16.20.1’,
‘username’: ‘your_username’,
‘password’: ‘your_password’,
‘secret’: ‘your_enable_password’, # Optional if needed
}

Подключение к устройству

net_connect = ConnectHandler(**ios_device)
net_connect.enable()

Конфигурационные команды

config_commands = [
‘vlan 20’,
‘name Management_VLAN’,
‘interface Vlan20’,
‘ip address 192.168.1.1 255.255.255.0’,
]

Отправка команд настройки

output = net_connect.send_config_set(config_commands)
print(output)

Сохранить конфигурацию

net_connect.send_command(‘write memory’)

Отключитесь от устройства

net_connect.disconnect()

Запустите этот скрипт для настройки VLAN 20 и SVI на IOS-XE 9300.

Python create_vlan_svi.py

Шаг 2: Согласование NetBox с конфигурацией устройства с помощью автоматизированного рабочего процесса

Предположим, что прошло 30 минут и задание cron выполнено.

Шаг 3: Обновленные записи NetBox

Предполагая, что Cronjob для обновления NetBox работает правильно, вот что вы можете ожидать от обновленных записей NetBox:

1. Device Details: The device should already be listed in NetBox if it was added previously.

2. Interfaces: The new VLAN interface (Vlan20) will be added with its IP address.

Пример обновленных записей NetBox

Устройство: ios-xe-9300-1

Name: ios-xe-9300-1

• Device Type: Cisco IOS-XE 9300

• Management IP Address: 172.16.20.1

Интерфейсы:

• GigabitEthernet1:

• Description: Existing description

• IP Address: Existing IP address (if any)

• Vlan20:

• Description: Configured by Ansible (or any specific description)

• IP Address: 192.168.1.1/24

IP-адреса:

• 192.168.1.1/24:

• Assigned to: Interface Vlan20 on ios-xe-9300-1

Верификация NetBox

Чтобы проверить обновленные записи в NetBox, вы можете использовать веб-интерфейс NetBox:

1. Navigate to Devices:

• Go to Devices and select ios-xe-9300-1.

• Verify that the interface Vlan20 has been added with the correct IP address.

2. Navigate to IP Addresses:

• Go to IPAM > IP Addresses.

• Search for 192.168.1.1.

• Verify that the IP address is assigned to Vlan20 on ios-xe-9300-1.

Заключение

Выполнив следующие действия, вы:

1. Настройка VLAN и SVI: использование скрипта Netmiko для настройки VLAN 20 и SVI 192.168.1.1 на IOS-XE 9300.

2. Получил обновленные конфигурации: использовал Ansible для получения обновленных конфигураций

3. Обновлен NetBox: Использован скрипт Python в плейбуке Ansible для обновления NetBox с новыми конфигурациями.

4. Проверенные изменения: Проверено, что новая VLAN и SVI правильно отражены в NetBox.

Это гарантирует, что экземпляр NetBox всегда будет в актуальном состоянии с последними настройками сетевых устройств. Сделайте Netbox источником достоверной информации для конфигураций сетевых устройств.