updated NBCluster class to allow different scope types

This commit is contained in:
Noah
2025-08-22 13:24:15 +10:00
committed by Andrew Foster
parent 453f0e5cb5
commit a20bd47e5d
2 changed files with 24 additions and 23 deletions
+14 -13
View File
@@ -552,7 +552,6 @@ class NetBoxObject:
parsed_data = dict()
for key, value in data.items():
if key not in self.data_model.keys():
log.error(f"Found undefined data model key '{key}' for object '{self.__class__.__name__}'")
continue
@@ -660,6 +659,7 @@ class NetBoxObject:
max_len=self.data_model.get("slug"))
# update all data items
log.debug2(f"Updating {self.name} '{display_name}' with data: {parsed_data.items()}")
data_updated = False
for key, new_value in parsed_data.items():
@@ -751,7 +751,8 @@ class NetBoxObject:
new_value_str = new_value_str.replace("\n", " ")
log.info(f"{self.name.capitalize()} '{display_name}' attribute '{key}' changed from "
f"'{current_value_str}' to '{new_value_str}'")
log.debug2(f"Updating {self.name} '{display_name}' attribute '{key}' from "
f"'{current_value_str}' to '{new_value_str}'")
self.data[key] = new_value
self.updated_items.append(key)
data_updated = True
@@ -1882,7 +1883,7 @@ class NBCluster(NetBoxObject):
api_path = "virtualization/clusters"
object_type = "virtualization.cluster"
primary_key = "name"
secondary_key = "site"
secondary_key = "scope_id"
prune = False
# include_secondary_key_if_present = True
@@ -1899,7 +1900,7 @@ class NBCluster(NetBoxObject):
"group": NBClusterGroup,
"scope_type": self.mapping.scopes_object_types(self.scopes),
# currently only site is supported as a scope
"scope_id": NBSite,
"scope_id": NetBoxObject,
"tags": NBTagList
}
super().__init__(*args, **kwargs)
@@ -1907,20 +1908,20 @@ class NBCluster(NetBoxObject):
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 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"
# 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)
def resolve_relations(self):
self.resolve_scoped_relations("scope_id", "scope_type")
log.debug2(f"Resolving relations for {self.name} '{self.get_display_name()}'")
# self.resolve_scoped_relations("scope_id", "scope_type")
super().resolve_relations()
+10 -10
View File
@@ -484,9 +484,9 @@ class VMWareHandler(SourceBase):
# set deault site name if no relation was found
if site_name is None:
site_name = self.site_name
log.debug(f"No site relation for {type(object_name)}: '{object_name}' found, using default site '{site_name}'")
log.debug2(f"No site relation for {type(object_name)}: '{object_name}' found, using default site '{site_name}'")
# set default site name
# set default site name for devices
if site_name is None and object_type == NBDevice:
site_name = self.site_name
log.debug(f"No site relation for '{object_name}' found, using default site '{site_name}'")
@@ -1477,16 +1477,12 @@ class VMWareHandler(SourceBase):
log.debug(f"Cluster '{name}' passes include and exclude filters. Continuing.")
scope_type = self.get_scope_type(NBCluster, full_cluster_name)
log.debug(f"Cluster '{full_cluster_name}' has scope type '{scope_type}' of type {type(scope_type)}.")
if scope_type is None:
scope_type = self.get_scope_type(NBCluster, name)
log.debug(f"Cluster '{full_cluster_name}' has scope type '{scope_type}' of type {type(scope_type)}.")
site_name = self.get_site_name(NBCluster, full_cluster_name)
log.debug(f"Cluster '{full_cluster_name}' has site name '{site_name}' of type {type(site_name)}.")
scope_id = self.get_scope_id(NBCluster, full_cluster_name)
log.debug(f"Cluster '{full_cluster_name}' has scope id '{scope_id}' of type {type(scope_id)}.")
site_name = self.get_site_name(NBCluster, full_cluster_name)
scope_id = self.get_scope_id(NBCluster, full_cluster_name)
if scope_id is None:
scope_id = self.get_scope_id(NBCluster, name)
log.debug(f"Cluster '{full_cluster_name}' has scope id '{scope_id}' of type {type(scope_id)}.")
@@ -1501,7 +1497,7 @@ class VMWareHandler(SourceBase):
# four scope types here (dcim.site, dcim.location, dcim.region, dcim.sitegroup)
if scope_type is not None:
data["scope_type"] = scope_type
data["scope_id"] = {"name": scope_id}
data["scope_id"] = scope_id
log.debug(f"Cluster '{full_cluster_name}' (or {name}) has scope type '{scope_type}' "
f"and scope id '{scope_id}'.")
elif site_name is not None:
@@ -1514,6 +1510,8 @@ class VMWareHandler(SourceBase):
if site_name is not None:
data["site"] = {"name": site_name}
log.debug(f"Cluster '{full_cluster_name}' (or {name}) has data items '{data.items()}'.")
tenant_name = self.get_object_relation(full_cluster_name, "cluster_tenant_relation")
if tenant_name is not None:
data["tenant"] = {"name": tenant_name}
@@ -1563,8 +1561,10 @@ class VMWareHandler(SourceBase):
cluster_object = fallback_cluster_object
if cluster_object is not None:
# log.debug(f"1st The data items are {data.items()} for cluster '{name}'")
cluster_object.update(data=data, source=self)
else:
# log.debug(f"1st (alternative) The data items are {data.items()} for cluster '{name}'")
cluster_object = self.inventory.add_update_object(NBCluster, data=data, source=self)
self.add_object_to_cache(obj, cluster_object)