adds support for site scope on cluster object in NetBox 4.2.0 #436

This commit is contained in:
Ricardo Bartels
2025-02-19 22:45:02 +01:00
parent 9400b16eb3
commit 80ac276b7b
3 changed files with 36 additions and 4 deletions

View File

@@ -1167,6 +1167,17 @@ class NetBoxObject:
if isinstance(this_site, dict):
return this_site.get("name")
this_scope_type = this_data_set.get("scope_type")
this_site = this_data_set.get("scope_id")
if this_scope_type == "dcim.site" and this_site is not None:
if isinstance(this_site, NetBoxObject):
return this_site.get_display_name()
if isinstance(this_site, dict):
return this_site.get("name")
class NBObjectList(list):
"""
@@ -1589,11 +1600,26 @@ class NBCluster(NetBoxObject):
"type": NBClusterType,
"tenant": NBTenant,
"group": NBClusterGroup,
"site": NBSite,
"scope_type": ["dcim.site", "dcim.sitegroup", "dcim.location", "dcim.region"],
"scope_id": NBSite,
"tags": NBTagList
}
super().__init__(*args, **kwargs)
def update(self, data=None, read_from_netbox=False, source=None):
# Add adaption for change in NetBox 4.2.0 Device model
if version.parse(self.inventory.netbox_api_version) >= version.parse("4.2.0"):
if data.get("site") is not None:
data["scope_id"] = data.get("site")
data["scope_type"] = "dcim.site"
del data["site"]
if data.get("scope_id") is not None:
data["scope_type"] = "dcim.site"
super().update(data=data, read_from_netbox=read_from_netbox, source=source)
class NBDevice(NetBoxObject):
name = "device"

View File

@@ -281,7 +281,8 @@ class SourceBase:
if type(device_object) == NBVM:
interface_class = NBVMInterface
site_name = grab(device_object, "data.cluster.data.site.data.name")
interface_cluster = grab(device_object, "data.cluster")
site_name = interface_cluster.get_site_name()
elif type(device_object) == NBDevice:
interface_class = NBInterface
site_name = grab(device_object, "data.site.data.name")

View File

@@ -1378,10 +1378,15 @@ class VMWareHandler(SourceBase):
data = {
"name": name,
"type": {"name": "VMware ESXi"},
"group": group,
"site": {"name": site_name}
"group": group
}
if version.parse(self.inventory.netbox_api_version) >= version.parse("4.2.0"):
data["scope_id"] = {"name": site_name}
data["scope_type"] = "dcim.site"
else:
data["site"] = {"name": site_name}
tenant_name = self.get_object_relation(full_cluster_name, "cluster_tenant_relation")
if tenant_name is not None:
data["tenant"] = {"name": tenant_name}