Skip to content

Commit

Permalink
Move netbox and zabbix stuff into sub-classes
Browse files Browse the repository at this point in the history
  • Loading branch information
eric-eisenhart committed May 7, 2024
1 parent fe407cf commit 4c91de7
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 18 deletions.
17 changes: 17 additions & 0 deletions src/sonic/netbox_zabbix/netbox.py
Original file line number Diff line number Diff line change
@@ -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,
)
56 changes: 38 additions & 18 deletions src/sonic/netbox_zabbix/netbox_zabbix.py
Original file line number Diff line number Diff line change
@@ -1,26 +1,30 @@
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
except ModuleNotFoundError as err:
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(
Expand All @@ -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")
Expand All @@ -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",
Expand All @@ -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__":
Expand Down
15 changes: 15 additions & 0 deletions src/sonic/netbox_zabbix/zabbix.py
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 4c91de7

Please sign in to comment.