From 52c958666768fb6752c8f07e08f588938b84af4c Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Wed, 4 Feb 2026 15:17:30 +0000 Subject: [PATCH] fix: use 'device' instead of 'device_id' for interface creation NetBox API requires 'device' field for creation, not 'device_id'. Separated search and create logic for interfaces. --- scripts/provision_fabric.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/scripts/provision_fabric.py b/scripts/provision_fabric.py index 6c6a7fd..cef22d0 100644 --- a/scripts/provision_fabric.py +++ b/scripts/provision_fabric.py @@ -698,11 +698,18 @@ def create_interfaces(nb: pynetbox.api, devices: dict) -> dict: continue for intf_name, intf_type in interfaces: - intf, created = get_or_create( - nb.dcim.interfaces, - {"device_id": device.id, "name": intf_name}, - {"type": intf_type}, - ) + # Search with device_id but create with device + existing = nb.dcim.interfaces.get(device_id=device.id, name=intf_name) + if existing: + intf = existing + created = False + else: + intf = nb.dcim.interfaces.create({ + "device": device.id, + "name": intf_name, + "type": intf_type, + }) + created = True # Set custom fields for MLAG peer-link if intf_name in ("Ethernet10", "Port-Channel10") and device_name.startswith("leaf"):