NetBox имеет иерархическую модель данных DCIM. Мы заполнили её снизу вверх:
1. Sites (площадки):
# Создание площадок через API (pynetbox)
import pynetbox
nb = pynetbox.api('https://netbox.datacenter-pro.ru', token='your-api-token-here')
sites = [
{'name': 'DC-MSK-1', 'slug': 'dc-msk-1', 'status': 'active',
'region': {'name': 'Moscow'}, 'facility': 'DataLine OST',
'physical_address': 'г. Москва, ул. Боровая, д. 7',
'description': 'Основная площадка, 80 стоек'},
{'name': 'DC-MSK-2', 'slug': 'dc-msk-2', 'status': 'active',
'region': {'name': 'Moscow'}, 'facility': 'Собственный ДЦ',
'physical_address': 'г. Москва, Южнопортовая, д. 15',
'description': 'Резервная площадка, 48 стоек'},
{'name': 'DC-SPB-1', 'slug': 'dc-spb-1', 'status': 'active',
'region': {'name': 'Saint Petersburg'}, 'facility': 'Selectel',
'description': 'Колокейшн, 20 стоек'},
]
for site in sites:
nb.dcim.sites.create(**site)
2. Racks (стойки) — для каждой площадки создали стойки с указанием высоты (42U/47U), максимальной мощности и расположения в зале:
# Массовое создание стоек
for row in range(1, 11): # 10 рядов
for rack_num in range(1, 9): # 8 стоек в ряду
nb.dcim.racks.create(
name=f'MSK1-R{row:02d}-{rack_num:02d}',
site={'slug': 'dc-msk-1'},
status='active',
u_height=42,
width=600,
outer_depth=1200,
max_weight=800,
comments=f'Ряд {row}, место {rack_num}'
)
3. Devices (устройства) — каждое устройство привязано к стойке с указанием позиции в юнитах:
# Сначала создаём device type (шаблон оборудования)
device_type = nb.dcim.device_types.create(
manufacturer={'name': 'Dell'},
model='PowerEdge R750',
slug='dell-poweredge-r750',
u_height=1,
is_full_depth=True,
comments='2x Xeon 8380, до 2TB RAM'
)
# Затем создаём конкретное устройство
device = nb.dcim.devices.create(
name='srv-web-01',
device_type=device_type.id,
role={'name': 'Web Server'},
site={'slug': 'dc-msk-1'},
rack={'name': 'MSK1-R03-05'},
position=25, # юнит в стойке
face='front',
status='active',
serial='JKXYZ123456',
asset_tag='DCP-SRV-0847',
tenant={'name': 'ClientA'},
primary_ip4={'address': '10.10.3.25/24'}
)
4. Cables (кабели) — соединения между портами устройств. NetBox отслеживает полный путь сигнала от сервера до коммутатора через патч-панель:
# Соединение сервера с коммутатором
nb.dcim.cables.create(
a_terminations=[{'object_type': 'dcim.interface', 'object_id': server_iface.id}],
b_terminations=[{'object_type': 'dcim.interface', 'object_id': switch_port.id}],
type='cat6a',
color='0000ff', # синий
length=3,
length_unit='m',
label='SRV-WEB-01:eth0 -> SW-TOR-03:Gi0/25'
)
За две недели мы внесли все 2000 устройств. Для ускорения использовали CSV-импорт NetBox и скрипты миграции из Excel.
Оставить комментарий