netbox-community / Device-Type-Library-Import

This library is intended to assist with importing device and module types into NetBox from the NetBox Community DeviceType-Library
https://github.com/netbox-community/devicetype-library
MIT License
265 stars 81 forks source link

KeyError: 'slug' if you specify an argument in '--slugs' #117

Open ShadowSZ72 opened 11 months ago

ShadowSZ72 commented 11 months ago

If you run the script with the argument model-type ./nb-dt-import.py --slugs cisco-ws-c2960-24tc-l

Then I will get an error:

Traceback (most recent call last):
  File "/home/username/reps/Device-Type-Library-Import/./nb-dt-import.py", line 54, in <module>
    main()
  File "/home/username/reps/Device-Type-Library-Import/./nb-dt-import.py", line 32, in main
    module_types = sdr.parse_files(files, slugs=args.slugs)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/username/reps/Device-Type-Library-Import/repo.py", line 101, in parse_files
    if slugs and True not in [True if s.casefold() in data['slug'].casefold() else False for s in slugs]:
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/username/reps/Device-Type-Library-Import/repo.py", line 101, in <listcomp>
    if slugs and True not in [True if s.casefold() in data['slug'].casefold() else False for s in slugs]:
                                                      ~~~~^^^^^^^^
KeyError: 'slug'

I think it's because of "module-types". The files in it do not have the "slug" attribute.

Torstein-Eide commented 11 months ago

A temporary fix is:

diff --git a/nb-dt-import.py b/nb-dt-import.py
index 8255528..5b32d4a 100755
--- a/nb-dt-import.py
+++ b/nb-dt-import.py
@@ -29,7 +29,7 @@ def main():
         files, vendors = settings.dtl_repo.get_devices(
             f'{settings.dtl_repo.repo_path}/module-types/', args.vendors)
         settings.handle.log(f'{len(vendors)} Module Vendors Found')
-        module_types = settings.dtl_repo.parse_files(files, slugs=args.slugs)
+        module_types = settings.dtl_repo.parse_files(files, slugs='')
         settings.handle.log(f'{len(module_types)} Module-Types Found')
         netbox.create_manufacturers(vendors)
         netbox.create_module_types(module_types)`
zeridon commented 7 months ago

The interesting thing is that if you give only vendor modules are imported without complaints. The issue ocurs only on slugs.