mirror of
https://github.com/bb-Ricardo/netbox-sync.git
synced 2026-05-08 11:00:12 -05:00
updated NBCluster class to allow different scope types
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user