From 4c91de7067a4d738dd0ee44aefc2bf4ca50393cb Mon Sep 17 00:00:00 2001 From: Eric Eisenhart Date: Tue, 7 May 2024 11:30:18 -0700 Subject: [PATCH] Move netbox and zabbix stuff into sub-classes --- src/sonic/netbox_zabbix/netbox.py | 17 +++++++ src/sonic/netbox_zabbix/netbox_zabbix.py | 56 ++++++++++++++++-------- src/sonic/netbox_zabbix/zabbix.py | 15 +++++++ 3 files changed, 70 insertions(+), 18 deletions(-) create mode 100644 src/sonic/netbox_zabbix/netbox.py create mode 100644 src/sonic/netbox_zabbix/zabbix.py diff --git a/src/sonic/netbox_zabbix/netbox.py b/src/sonic/netbox_zabbix/netbox.py new file mode 100644 index 0000000..ddfb42f --- /dev/null +++ b/src/sonic/netbox_zabbix/netbox.py @@ -0,0 +1,17 @@ +import pynetbox + +class SonicNetboxZabbix_Netbox: + """ + Utils for Netbox stuff + """ + + def __init__(self, logger, config): + self.log = logger + self.config = config + + self.log.info("Logging into Netbox") + self.api = pynetbox.api( + self.config.netboxurl, + token=self.config.netboxtoken, + threading=True, + ) diff --git a/src/sonic/netbox_zabbix/netbox_zabbix.py b/src/sonic/netbox_zabbix/netbox_zabbix.py index cc33206..f44b2d8 100644 --- a/src/sonic/netbox_zabbix/netbox_zabbix.py +++ b/src/sonic/netbox_zabbix/netbox_zabbix.py @@ -1,10 +1,14 @@ -import pyzabbix -import pynetbox import configargparse -import sys -import pprint +import functools import logging import logging.handlers +import sys + +from pprint import pprint + +from sonic.netbox_zabbix.zabbix import SonicNetboxZabbix_Zabbix +from sonic.netbox_zabbix.netbox import SonicNetboxZabbix_Netbox + try: from sonic.logger import setup_sonic_logger @@ -12,15 +16,15 @@ pass -class NetboxZabbix: +class SonicNetboxZabbix: """ - NetboxZabbix class has tools for setting up hosts in Zabbix based on Netbox data. + SonicNetboxZabbix class has tools for setting up hosts in Zabbix based on Netbox data. """ def __init__(self): """Set up argument parser and load sub-commands.""" try: - self.config = self.parseargs() + self.config = self._parseargs() except Exception as e: print( "An error occured parsing config files or command-line arguments: {}".format( @@ -38,7 +42,7 @@ def __init__(self): try: logging.basicConfig( level=logging.WARNING, - format="%(name)s:%(levelno)s:%(funcName)s:%(message)s", + format="%(name)s:%(funcName)s: %(message)s", ) self.log = logging.getLogger("netbox_zabbix") sysloghandler = logging.handlers.SysLogHandler(address="/dev/log") @@ -55,8 +59,13 @@ def __init__(self): self.log.setLevel(logging.ERROR) self.log.info("Starting Sonic Netbox Zabbix Sync") + + self._zabbix_login() + self._netbox_login() - def parseargs(self): + def _parseargs(self): + """Parse config files and CLI arguments and return a config object""" + argparser = configargparse.ArgParser( default_config_files=[ "/etc/sonic/netbox-zabbix.conf", @@ -72,22 +81,33 @@ def parseargs(self): argparser.add( "-q", "--quiet", action="store_true", help="Show fewer logging messages" ) - argparser.add("--netboxurl", required=True, help="URL for netbox") - argparser.add("--zabbixurl", required=True, help="URL for zabbix") - argparser.add("--netboxtoken", required=True, help="API auth token for Netbox") - argparser.add("--zabbixtoken", required=True, help="API auth token for Zabbix") + argparser.add("--netboxurl", "-n", required=True, help="URL for netbox") + argparser.add("--zabbixurl", "-z", required=True, help="URL for zabbix") + argparser.add("--netboxtoken", "-N", required=True, help="API auth token for Netbox") + argparser.add("--zabbixtoken", "-Z", required=True, help="API auth token for Zabbix") return argparser.parse_args() - def run(self, argv): + def _zabbix_login(self): + """Log into Zabbix, creating self.zabbix self""" + self.log.info("Logging into Zabbix") + self.zabbix = SonicNetboxZabbix_Zabbix(self.log,self.config) + + def _netbox_login(self): + """Log into Netbox and add napi to self""" + self.log.info("Logging into Netbox") + self.netbox = SonicNetboxZabbix_Netbox(self.log,self.config) + + def run(self): """Run cli app with the given arguments.""" - # self.config.print_help() + self.log.info("Starting run()") + def main(): - """Run NetboxZabbix cli with sys.argv from command line.""" - app = NetboxZabbix() - app.run(sys.argv[1:]) + """Run SonicNetboxZabbix cli with sys.argv from command line.""" + app = SonicNetboxZabbix() + app.run() if __name__ == "__main__": diff --git a/src/sonic/netbox_zabbix/zabbix.py b/src/sonic/netbox_zabbix/zabbix.py new file mode 100644 index 0000000..3851d8f --- /dev/null +++ b/src/sonic/netbox_zabbix/zabbix.py @@ -0,0 +1,15 @@ +from pyzabbix import ZabbixAPI, ZabbixAPIException + +class SonicNetboxZabbix_Zabbix: + """ + Utils for Zabbix stuff + """ + + def __init__(self, logger, config): + self.log = logger + self.config = config + + # self.log.info("Logging into Zabbix") + api = ZabbixAPI(self.config.zabbixurl) + api.login(api_token=self.config.zabbixtoken) + self.api = api