104 lines
No EOL
3.5 KiB
Python
104 lines
No EOL
3.5 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import requests
|
|
import json
|
|
from urllib.parse import urljoin
|
|
|
|
# Get API token
|
|
api_token = os.environ.get('NETBOX_KEY', 'e50298f7fd20f7fd6f1931f635511b34f6e8cfde')
|
|
|
|
# NetBox API setup
|
|
base_url = 'https://netbox.vntx.net/'
|
|
api_url = urljoin(base_url, 'api/')
|
|
headers = {
|
|
'Authorization': f'Token {api_token}',
|
|
'Content-Type': 'application/json',
|
|
'Accept': 'application/json'
|
|
}
|
|
|
|
print("=== Updating 380 Edge Router in NetBox ===\n")
|
|
|
|
# Edge router specific data
|
|
edge_device_id = 9
|
|
site_id = 8
|
|
|
|
# Update primary IP assignment for edge router
|
|
print("Assigning primary IP to edge router...")
|
|
try:
|
|
# First create interface on edge router
|
|
interface_data = {
|
|
'device': edge_device_id,
|
|
'name': 'loopback',
|
|
'type': 'virtual',
|
|
'enabled': True
|
|
}
|
|
response = requests.post(f"{api_url}dcim/interfaces/", headers=headers, json=interface_data)
|
|
if response.status_code == 201:
|
|
interface_id = response.json()['id']
|
|
print(f"✓ Created loopback interface (ID: {interface_id})")
|
|
|
|
# Assign IP to interface
|
|
ip_update = {
|
|
'assigned_object_type': 'dcim.interface',
|
|
'assigned_object_id': interface_id
|
|
}
|
|
# Find the IP
|
|
ip_response = requests.get(f"{api_url}ipam/ip-addresses/",
|
|
headers=headers,
|
|
params={'address': '10.254.254.254/32'})
|
|
if ip_response.json()['count'] > 0:
|
|
ip_id = ip_response.json()['results'][0]['id']
|
|
patch_response = requests.patch(f"{api_url}ipam/ip-addresses/{ip_id}/",
|
|
headers=headers,
|
|
json=ip_update)
|
|
if patch_response.status_code == 200:
|
|
print("✓ Assigned IP to loopback interface")
|
|
|
|
# Set as primary IP for device
|
|
device_update = {'primary_ip4': ip_id}
|
|
device_response = requests.patch(f"{api_url}dcim/devices/{edge_device_id}/",
|
|
headers=headers,
|
|
json=device_update)
|
|
if device_response.status_code == 200:
|
|
print("✓ Set as primary IP for edge router")
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
|
|
# Create interfaces for edge router
|
|
print("\n=== Creating Edge Router Interfaces ===")
|
|
interfaces = [
|
|
'sfp-sfpplus7-core-direct',
|
|
'sfp-sfpplus8-server-switch',
|
|
'sfp-sfpplus11-preseem',
|
|
'sfp-sfpplus12-spectrum',
|
|
'cgnat',
|
|
'vlan9_sfpplus8'
|
|
]
|
|
|
|
for interface in interfaces:
|
|
# Check if already exists
|
|
check = requests.get(f"{api_url}dcim/interfaces/",
|
|
headers=headers,
|
|
params={'device_id': edge_device_id, 'name': interface})
|
|
|
|
if check.json()['count'] == 0:
|
|
if 'vlan' in interface or interface == 'cgnat':
|
|
itype = 'virtual'
|
|
else:
|
|
itype = '10gbase-x-sfpp' # SFP+ interfaces
|
|
|
|
interface_data = {
|
|
'device': edge_device_id,
|
|
'name': interface,
|
|
'type': itype,
|
|
'enabled': True
|
|
}
|
|
|
|
response = requests.post(f"{api_url}dcim/interfaces/", headers=headers, json=interface_data)
|
|
if response.status_code == 201:
|
|
print(f"✓ Created interface: {interface}")
|
|
else:
|
|
print(f"✗ Failed to create interface: {interface}")
|
|
|
|
print("\n✓ Edge router update complete!") |