diff --git a/.env.example b/.env.example index 37a6f36..0043ee4 100644 --- a/.env.example +++ b/.env.example @@ -2,3 +2,4 @@ NETBOX_URL= NETBOX_TOKEN= REPO_URL=https://github.com/netbox-community/devicetype-library.git IGNORE_SSL_ERRORS=False +#SLUGS=c9300-48u isr4431 isr4331 diff --git a/nb-dt-import.py b/nb-dt-import.py index f72815c..6a51b86 100755 --- a/nb-dt-import.py +++ b/nb-dt-import.py @@ -8,6 +8,7 @@ import glob import argparse import os import settings +import sys counter = Counter(added=0, updated=0, manufacturer=0) @@ -53,7 +54,8 @@ def getFiles(vendors=None): return files, discoveredVendors -def readYAMl(files): +def readYAMl(files, **kwargs): + slugs = kwargs.get('slugs', None) deviceTypes = [] manufacturers = [] for file in files: @@ -67,6 +69,11 @@ def readYAMl(files): data['manufacturer'] = {} data['manufacturer']['name'] = manufacturer data['manufacturer']['slug'] = slugFormat(manufacturer) + + if slugs and data['slug'] not in slugs: + print(f"Skipping {data['model']}") + continue + deviceTypes.append(data) manufacturers.append(manufacturer) return deviceTypes @@ -387,14 +394,17 @@ def main(): VENDORS = settings.VENDORS REPO_URL = settings.REPO_URL + SLUGS = settings.SLUGS parser = argparse.ArgumentParser(description='Import Netbox Device Types') parser.add_argument('--vendors', nargs='+', default=VENDORS, help="List of vendors to import eg. apc cisco") parser.add_argument('--url', '--git', default=REPO_URL, help="Git URL with valid Device Type YAML files") - args = parser.parse_args() + parser.add_argument('--slugs', nargs='+', default=SLUGS, + help="List of device-type slugs to import eg. ap4431 ws-c3850-24t-l") + args = parser.parse_args() try: if os.path.isdir('./repo'): @@ -416,8 +426,8 @@ def main(): print(str(len(vendors)) + " Vendors Found") - print(str(len(files)) + " Device-Types Found") - deviceTypes = readYAMl(files) + deviceTypes = readYAMl(files, slugs=args.slugs) + print(str(len(deviceTypes)) + " Device-Types Found") createManufacturers(vendors, nb) createDeviceTypes(deviceTypes, nb) diff --git a/settings.py b/settings.py index eb9ecb3..34a9092 100644 --- a/settings.py +++ b/settings.py @@ -10,6 +10,10 @@ IGNORE_SSL_ERRORS = (os.getenv("IGNORE_SSL_ERRORS", "False") == "True") # optionnally load vendors through a space separated list as env var VENDORS = os.getenv("VENDORS", "").split() +# optionally load device types through a space separated list as env var +SLUGS = os.getenv("SLUGS", "").split() + + MANDATORY_ENV_VARS = ["REPO_URL", "NETBOX_URL", "NETBOX_TOKEN"] for var in MANDATORY_ENV_VARS: