diff --git a/module/netbox/inventory.py b/module/netbox/inventory.py index 890ddbe..d48ae9e 100644 --- a/module/netbox/inventory.py +++ b/module/netbox/inventory.py @@ -100,12 +100,15 @@ class NetBoxInventory: if data_id is not None and data_id != 0: return self.get_by_id(object_type, nb_id=data_id) - # add slug to data if slug is primary key - if object_type.primary_key == "slug" and data.get("name") is not None: - data["slug"] = NetBoxObject.format_slug(data.get("name")) + # try to find object by slug + if "slug" in object_type.data_model.keys() and data.get("name") is not None: + object_slug = NetBoxObject.format_slug(data.get("name")) + for this_object in self.get_all_items(object_type): + if this_object.data.get("slug") == object_slug: + return this_object # try to find by primary/secondary key - if data.get(object_type.primary_key) is not None: + elif data.get(object_type.primary_key) is not None: object_name_to_find = None for this_object in self.get_all_items(object_type): diff --git a/module/netbox/object_classes.py b/module/netbox/object_classes.py index cb98066..3f05fc5 100644 --- a/module/netbox/object_classes.py +++ b/module/netbox/object_classes.py @@ -468,15 +468,14 @@ class NetBoxObject: # value must be a string witch a certain max length if isinstance(defined_value_type, int): if not isinstance(value, str): - log.error(f"Invalid data type for '{self.__class__.__name__}.{key}' (must be str), got: '{value}'") + log.error(f"Invalid data type for '{self.__class__.__name__}.{key}' (must be str), got: " + f"{value} ({type(value)})") continue value = value[0:defined_value_type] if key == "slug": value = self.format_slug(text=value, max_len=defined_value_type) - else: - value = value[0:defined_value_type] if isinstance(defined_value_type, list): @@ -1230,7 +1229,7 @@ class NBPrefix(NetBoxObject): class NBManufacturer(NetBoxObject): name = "manufacturer" api_path = "dcim/manufacturers" - primary_key = "slug" + primary_key = "name" prune = False data_model = { "name": 50,