Add SLUG option to specify a space-separated list of device_type slugs to import

This commit is contained in:
Ryan Malloy 2021-10-05 09:02:21 -06:00
parent 3aaf98bfe4
commit 8160b6c4aa
3 changed files with 19 additions and 4 deletions

View File

@ -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

View File

@ -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)

View File

@ -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: