forked from netbox-community/Device-Type-Library-Import
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsettings.py
More file actions
58 lines (47 loc) · 2.39 KB
/
Copy pathsettings.py
File metadata and controls
58 lines (47 loc) · 2.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import os
from argparse import ArgumentParser
from pathlib import Path
from dotenv import load_dotenv
from log_handler import LogHandler
from repo import DTLRepo
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").lower() == "true"
REPO_PATH = Path(__file__).resolve().parent / "repo"
REPLACE_EXISTING_IMAGES = os.getenv("REPLACE_EXISTING_IMAGES", default="False").lower() == "true"
VERBOSE = os.getenv("VERBOSE", default="False").lower() == "true"
# 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()
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(
"--replace-existing-images",
action="store_true",
default=REPLACE_EXISTING_IMAGES,
help="Force image upload replacing existing images",
)
parser.add_argument("--verbose", "-v", action="store_true", default=VERBOSE, 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 = ["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: {MANDATORY_ENV_VARS}.\n\nCURRENT_ENV_VARS: {os.environ}',
)
dtl_repo = DTLRepo(args, REPO_PATH, handle)