Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions netbox_netprod_importer/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
__email__ = "[email protected]"
__version__ = "0.3.3"
__appname__ = "netbox-netprod-importer"
from .__main__ import *
22 changes: 20 additions & 2 deletions netbox_netprod_importer/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
from tqdm import tqdm

from . import __appname__, __version__
from netbox_netprod_importer.config import get_config, load_config
from netbox_netprod_importer.devices_list import parse_devices_yaml_def
from netbox_netprod_importer.config import get_config, load_config, load_config_from_args
from netbox_netprod_importer.devices_list import parse_devices_yaml_def, parse_devices_dict
from netbox_netprod_importer.devices_list import parse_filter_yaml_def
from netbox_netprod_importer.push import (
NetboxDevicePropsPusher, NetboxInterconnectionsPusher
Expand Down Expand Up @@ -123,6 +123,24 @@ def parse_args():
arg_parser.print_help()
sys.exit(1)

def init_importer(device_dict,user,password,verbose=None):
# Create a parser so we can fill it exactly like the CLI one
parser = argparse.ArgumentParser()
arg_parser = parser
args = arg_parser.parse_args()

# Add the config from the args
args.creds = (user,password)
args.ask_password = False
args.filter=None
args.overwrite=False
args.threads=10
args.importers = parse_devices_dict(device_dict,args.creds)
args.verbose = verbose

return args


def inventory(parsed_args):
import_data(parsed_args)
interconnect(parsed_args)
Expand Down
18 changes: 18 additions & 0 deletions netbox_netprod_importer/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,5 +69,23 @@ def get_config(custom_path=None):
raise FileNotFoundError


def load_config_from_args(verbose=None, disable_ssl_warnings=True, netbox_url="", netbox_token="", remove_domains=['foo.tld'], loglevel=None):
if disable_ssl_warnings == False:
urllib3.disable_warnings()
if loglevel is not None:
numeric_level = getattr(logging, loglevel.upper())
if not isinstance(numeric_level, int):
raise ValueError('Invalid log level: %s' % loglevel)
else:
numeric_level = logging.ERROR
logging.basicConfig(level=numeric_level,
format="%(levelname)s: %(name)s: %(message)s")

return {'verbose': verbose, 'disable_ssl_warnings': disable_ssl_warnings,
'netbox': {'url': netbox_url, 'token': netbox_token, 'remove_domains': remove_domains}}




def load_config(custom_path=None):
get_config(custom_path)
19 changes: 19 additions & 0 deletions netbox_netprod_importer/devices_list.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,25 @@ def parse_devices_yaml_def(devices_yaml, creds=None):
)
return devices

def parse_devices_dict(devices_dict,creds=None):
devices = {}
for hostname, props in devices_dict.items():
try:
devices[hostname] = DeviceImporter(
props.get("target") or hostname,
napalm_driver_name=props["driver"],
napalm_optional_args=props.get("optional_args"),
creds=creds,
discovery_protocol=props.get("discovery_protocol")
)
except Exception as e:
logger.error(
"Cannot connect to device %s: %s", hostname, e
)
return devices




def parse_filter_yaml_def(filter_yaml, creds=None):
netbox_api = NetboxAPI(**get_config()["netbox"])
Expand Down