Skip to content

Update netbox_api.py - Fix Error creating manufacturers (Only some of the manufacturers were imported.) #173

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 21 additions & 10 deletions netbox_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,26 +64,37 @@ def get_manufacturers(self):
return {str(item): item for item in self.netbox.dcim.manufacturers.all()}

def create_manufacturers(self, vendors):
to_create = []
# Get existing manufacturers (name + slug)
self.existing_manufacturers = self.get_manufacturers()
existing_slugs = {item.slug for item in self.existing_manufacturers.values()}
existing_names = {item.name for item in self.existing_manufacturers.values()}

to_create = []

for vendor in vendors:
try:
manGet = self.existing_manufacturers[vendor["name"]]
self.handle.verbose_log(f'Manufacturer Exists: {manGet.name} - {manGet.id}')
except KeyError:
# Ensure slug is set
vendor.setdefault('slug', vendor['name'].lower().replace(' ', '-'))

# Check existence by name or slug
if vendor["name"] in existing_names or vendor["slug"] in existing_slugs:
self.handle.verbose_log(f'Manufacturer Exists: {vendor["name"]} (slug: {vendor["slug"]})')
else:
to_create.append(vendor)
self.handle.verbose_log(f"Manufacturer queued for addition: {vendor['name']}")
self.handle.verbose_log(f"Manufacturer queued for addition: {vendor['name']} (slug: {vendor['slug']})")

# Only if there are manufacturers to create → API call
if to_create:
self.handle.log(f"Creating {len(to_create)} new manufacturers...")
try:
created_manufacturers = self.netbox.dcim.manufacturers.create(to_create)
for manufacturer in created_manufacturers:
self.handle.verbose_log(f'Manufacturer Created: {manufacturer.name} - '
+ f'{manufacturer.id}')
self.handle.verbose_log(f'Manufacturer Created: {manufacturer.name} - {manufacturer.id}')
self.counter.update({'manufacturer': 1})
except pynetbox.RequestError as request_error:
self.handle.log("Error creating manufacturers")
self.handle.verbose_log(f"Error during manufacturer creation. - {request_error.error}")
# Log error with detailed API error message
self.handle.log(f"Error creating manufacturers: {request_error.error}")
else:
self.handle.log("No new manufacturers to create.")

def create_device_types(self, device_types_to_add):
for device_type in device_types_to_add:
Expand Down