This commit is contained in:
Twan Kamans 2021-10-01 13:13:13 +02:00
parent ea680aa1f5
commit 55e28a7095

View File

@ -47,13 +47,7 @@ def main(arguments):
zabbix_pass = environ.get("ZABBIX_PASS")
netbox_host = environ.get("NETBOX_HOST")
netbox_token = environ.get("NETBOX_TOKEN")
netbox_key = environ.get("NETBOX_KEY")
if(arguments.secret and not netbox_key):
e = ("You need a private user key to"
" use the Netbox secrets functionality.")
logger.warning(e)
EnvironmentVarError(e)
# Set Zabbix API
try:
zabbix = ZabbixAPI(zabbix_host)
@ -62,8 +56,7 @@ def main(arguments):
e = f"Zabbix returned the following error: {str(e)}."
logger.error(e)
# Set Netbox API
netbox = api(netbox_host, token=netbox_token,
private_key=netbox_key, threading=True)
netbox = api(netbox_host, token=netbox_token, threading=True)
# Get all Zabbix and Netbox data
netbox_devices = netbox.dcim.devices.all()
zabbix_groups = zabbix.hostgroup.get(output=['name'])
@ -98,9 +91,6 @@ def main(arguments):
else:
logger.debug(f"{device.name} is not linked to a tenant. "
f"Using HG format '{device.hostgroup}'.")
# -s flag: collect secrets from this device
if(arguments.secret):
device.getNetboxSecrets(netbox)
# Checks if device is in cleanup state
if(device.status != "Active"):
if(device.zabbix_id):
@ -180,7 +170,6 @@ class NetworkDevice():
self.zabbix = zabbix
self.tenant = nb.tenant
self.hostgroup = None
self.secrets = None
self.zbxproxy = "0"
self.hg_format = [self.nb.site.name,
self.nb.device_type.manufacturer.name,
@ -262,19 +251,6 @@ class NetworkDevice():
logger.debug(f"Device {self.name} is non-primary cluster member.")
return False
def getNetboxSecrets(self, nbapi):
"""
Get secrets from this Netbox host
"""
try:
self.secrets = nbapi.secrets.secrets.filter(device=self.nb.name)
if(self.secrets):
logger.debug(f"Got {len(self.secrets)} secret(s)"
f" for host {self.name}.")
except NetboxRequestError as e:
e = f"Device {self.name}: unable to get Netbox secrets, error: {e}"
logger.warning(e)
def getZabbixTemplate(self, templates):
"""
Returns Zabbix template ID
@ -352,8 +328,7 @@ class NetworkDevice():
"""
try:
# Initiate interface class
interface = ZabbixInterface(self.nb.config_context,
self.ip, self.secrets)
interface = ZabbixInterface(self.nb.config_context, self.ip)
# Check if Netbox has device context.
# If not fall back to old config.
if(interface.get_context()):
@ -589,9 +564,8 @@ class NetworkDevice():
class ZabbixInterface():
def __init__(self, context, ip, secrets=None):
def __init__(self, context, ip):
self.context = context
self.secrets = secrets
self.ip = ip
self.skelet = {"main": "1", "useip": "1", "dns": "", "ip": self.ip}
self.interface = self.skelet
@ -615,15 +589,6 @@ class ZabbixInterface():
# Checks if SNMP settings are defined in Netbox
if("snmp" in self.context["zabbix"]):
snmp = self.context["zabbix"]["snmp"]
# Check if matching SNMP Netbox secret is found for host.
supported_secrets = ["community", "authpassphrase",
"privpassphrase"]
# Check if Netbox host has secrets
if(self.secrets):
for secret in self.secrets:
# If secret is supported, add to SNMP details
if(secret.name in supported_secrets):
snmp[secret.name] = secret.plaintext
self.interface["details"] = {}
# Checks if bulk config has been defined
if(snmp.get("bulk")):
@ -692,8 +657,6 @@ if(__name__ == "__main__"):
parser.add_argument("-t", "--tenant", action="store_true",
help=("Add Tenant name to the Zabbix "
"hostgroup name scheme."))
parser.add_argument("-s", "--secret", action="store_true",
help=("Use Netbox secrets for SNMP interfaces."))
parser.add_argument("-p", "--proxy_power", action="store_true",
help=("USE WITH CAUTION. If there is a proxy "
"configured in Zabbix but not in Netbox, sync "