Введение В современных динамичных сетевых средах крайне важно вести точную и актуальную инвентаризацию сетевых устройств. 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
- Войдите в NetBox: используйте браузер для перехода к экземпляру NetBox и войдите в систему.
- Добавьте устройство: перейдите в раздел «Устройства» > «Добавить устройство» и заполните форму, чтобы добавить устройство 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.
- Открыть Crontab:
crontab -e
- Добавьте задание 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 источником достоверной информации для конфигураций сетевых устройств.