mirror of
https://github.com/netbox-community/Device-Type-Library-Import.git
synced 2024-11-07 08:13:58 +01:00
98857fc649
* Delete gitcmd.py * Delete nb-dt-import.py * Add files via upload * Logging cleanup (#78) * Removed multiple imports of settings.py * stating to abstract the netbox api calls to their own class * Abstracted away determine features from main script, implemented as part of class initialization * added helper functions to get repos relative & absolute path * renaming gitcmd to repo * starting to abstract away the get_files * fixed issue where spaces and commas in vendor list with/without spaces breaks matching * Added prelim fix for slugs if same issue vendors arg was facing exists. untested * Finished abstracting the get_files function. Reduced fors and ifs to be cleaner and more efficent * abstracted getFiles to repo class. Fixed slug issue not matching because of new slug format. added non-halting log function and renamed exception handler to log handler. * utilized new logging class throughout script to reduce excess logging * Abstracted and optimized create manufacturers * Abstracted the create interfaces for devices to the netbox api class * Fixed regression where check manufactuerers did not have the latest list * Fixed regression caused by externally calling script. Discovered from https://github.com/netbox-community/Device-Type-Library-Import/pull/76 * abstracted all device interfaces to the devicetype class. optimized function calls to reduce duplicate code and reduce extra log calls * Ran against all devices and passed with flying colors * formatting settings.py * formatting repo.py * formatting main file * formatting log_handler.py * added back executable on file (#79) * Add more info to failed device_type creations (#81) --------- Co-authored-by: Philipp Rintz <13933258+p-rintz@users.noreply.github.com>
53 lines
2.2 KiB
Python
53 lines
2.2 KiB
Python
from argparse import ArgumentParser
|
|
import os
|
|
from log_handler import LogHandler
|
|
from repo import DTLRepo
|
|
from dotenv import load_dotenv
|
|
load_dotenv()
|
|
|
|
REPO_URL = os.getenv("REPO_URL",
|
|
default="https://github.com/netbox-community/devicetype-library.git")
|
|
REPO_BRANCH = os.getenv("REPO_BRANCH", default="master")
|
|
NETBOX_URL = os.getenv("NETBOX_URL")
|
|
NETBOX_TOKEN = os.getenv("NETBOX_TOKEN")
|
|
IGNORE_SSL_ERRORS = (os.getenv("IGNORE_SSL_ERRORS", default="False") == "True")
|
|
REPO_PATH = f"{os.path.dirname(os.path.realpath(__file__))}/repo"
|
|
|
|
# optionally load vendors through a comma separated list as env var
|
|
VENDORS = list(filter(None, os.getenv("VENDORS", "").split(",")))
|
|
|
|
# optionally load device types through a space separated list as env var
|
|
SLUGS = os.getenv("SLUGS", "").split()
|
|
|
|
NETBOX_FEATURES = {
|
|
'modules': False,
|
|
}
|
|
|
|
parser = 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")
|
|
parser.add_argument('--slugs', nargs='+', default=SLUGS,
|
|
help="List of device-type slugs to import eg. ap4431 ws-c3850-24t-l")
|
|
parser.add_argument('--branch', default=REPO_BRANCH,
|
|
help="Git branch to use from repo")
|
|
parser.add_argument('--verbose', action='store_true', default=False,
|
|
help="Print verbose output")
|
|
|
|
args = parser.parse_args()
|
|
|
|
args.vendors = [v.casefold()
|
|
for vendor in args.vendors for v in vendor.split(",") if v.strip()]
|
|
args.slugs = [s for slug in args.slugs for s in slug.split(",") if s.strip()]
|
|
|
|
handle = LogHandler(args)
|
|
# Evaluate environment variables and exit if one of the mandatory ones are not set
|
|
MANDATORY_ENV_VARS = ["REPO_URL", "NETBOX_URL", "NETBOX_TOKEN"]
|
|
for var in MANDATORY_ENV_VARS:
|
|
if var not in os.environ:
|
|
handle.exception("EnvironmentError", var,
|
|
f'Environment variable "{var}" is not set.\n\nMANDATORY_ENV_VARS: {str(MANDATORY_ENV_VARS)}.\n\nCURRENT_ENV_VARS: {str(os.environ)}')
|
|
|
|
dtl_repo = DTLRepo(args, REPO_PATH, handle)
|