mirror of
https://github.com/TheNetworkGuy/netbox-zabbix-sync.git
synced 2025-07-13 15:24:48 -06:00
106 lines
4.4 KiB
Python
106 lines
4.4 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
All of the Zabbix interface related configuration
|
|
"""
|
|
from modules.exceptions import InterfaceConfigError
|
|
|
|
class ZabbixInterface():
|
|
"""Class that represents a Zabbix interface."""
|
|
|
|
def __init__(self, context, ip):
|
|
self.context = context
|
|
self.ip = ip
|
|
self.skelet = {"main": "1", "useip": "1", "dns": "", "ip": self.ip}
|
|
self.interface = self.skelet
|
|
|
|
def _set_default_port(self):
|
|
"""Sets default TCP / UDP port for different interface types"""
|
|
interface_mapping = {
|
|
1: 10050,
|
|
2: 161,
|
|
3: 623,
|
|
4: 12345
|
|
}
|
|
# Check if interface type is listed in mapper.
|
|
if self.interface['type'] not in interface_mapping:
|
|
return False
|
|
# Set default port to interface
|
|
self.interface["port"] = str(interface_mapping[self.interface['type']])
|
|
return True
|
|
|
|
def get_context(self):
|
|
""" check if Netbox custom context has been defined. """
|
|
if "zabbix" in self.context:
|
|
zabbix = self.context["zabbix"]
|
|
if "interface_type" in zabbix:
|
|
self.interface["type"] = zabbix["interface_type"]
|
|
if not "interface_port" in zabbix:
|
|
self._set_default_port()
|
|
return True
|
|
self.interface["port"] = zabbix["interface_port"]
|
|
return True
|
|
return False
|
|
return False
|
|
|
|
def set_snmp(self):
|
|
""" Check if interface is type SNMP """
|
|
# pylint: disable=too-many-branches
|
|
if self.interface["type"] == 2:
|
|
# Checks if SNMP settings are defined in Netbox
|
|
if "snmp" in self.context["zabbix"]:
|
|
snmp = self.context["zabbix"]["snmp"]
|
|
self.interface["details"] = {}
|
|
# Checks if bulk config has been defined
|
|
if "bulk" in snmp:
|
|
self.interface["details"]["bulk"] = str(snmp.pop("bulk"))
|
|
else:
|
|
# Fallback to bulk enabled if not specified
|
|
self.interface["details"]["bulk"] = "1"
|
|
# SNMP Version config is required in Netbox config context
|
|
if snmp.get("version"):
|
|
self.interface["details"]["version"] = str(snmp.pop("version"))
|
|
else:
|
|
e = "SNMP version option is not defined."
|
|
raise InterfaceConfigError(e)
|
|
# If version 1 or 2 is used, get community string
|
|
if self.interface["details"]["version"] in ['1','2']:
|
|
if "community" in snmp:
|
|
# Set SNMP community to confix context value
|
|
community = snmp["community"]
|
|
else:
|
|
# Set SNMP community to default
|
|
community = "{$SNMP_COMMUNITY}"
|
|
self.interface["details"]["community"] = str(community)
|
|
# If version 3 has been used, get all
|
|
# SNMPv3 Netbox related configs
|
|
elif self.interface["details"]["version"] == '3':
|
|
items = ["securityname", "securitylevel", "authpassphrase",
|
|
"privpassphrase", "authprotocol", "privprotocol",
|
|
"contextname"]
|
|
for key, item in snmp.items():
|
|
if key in items:
|
|
self.interface["details"][key] = str(item)
|
|
else:
|
|
e = "Unsupported SNMP version."
|
|
raise InterfaceConfigError(e)
|
|
else:
|
|
e = "Interface type SNMP but no parameters provided."
|
|
raise InterfaceConfigError(e)
|
|
else:
|
|
e = "Interface type is not SNMP, unable to set SNMP details"
|
|
raise InterfaceConfigError(e)
|
|
|
|
def set_default_snmp(self):
|
|
""" Set default config to SNMPv2, port 161 and community macro. """
|
|
self.interface = self.skelet
|
|
self.interface["type"] = "2"
|
|
self.interface["port"] = "161"
|
|
self.interface["details"] = {"version": "2",
|
|
"community": "{$SNMP_COMMUNITY}",
|
|
"bulk": "1"}
|
|
|
|
def set_default_agent(self):
|
|
"""Sets interface to Zabbix agent defaults"""
|
|
self.interface["type"] = "1"
|
|
self.interface["port"] = "10050"
|