mirror of
https://github.com/TheNetworkGuy/netbox-zabbix-sync.git
synced 2025-07-14 01:41:25 -06:00
Added configuration file in response to #25
This commit is contained in:
parent
e749829cf0
commit
eef905acbe
@ -11,6 +11,9 @@ Make sure that you have a python environment with the following packages install
|
|||||||
pynetbox
|
pynetbox
|
||||||
pyzabbix
|
pyzabbix
|
||||||
```
|
```
|
||||||
|
### Config file
|
||||||
|
First time user? Copy the config.py.example file to config.py. This file is used for modifying filters and setting variables such as custom field names.
|
||||||
|
|
||||||
### Cloning the repository
|
### Cloning the repository
|
||||||
```
|
```
|
||||||
git clone https://github.com/TheNetworkGuy/netbox-zabbix-sync.git
|
git clone https://github.com/TheNetworkGuy/netbox-zabbix-sync.git
|
||||||
|
17
config.py.example
Normal file
17
config.py.example
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Set template and device Netbox "custom field" names
|
||||||
|
template_cf = "zabbix_template"
|
||||||
|
device_cf = "zabbix_hostid"
|
||||||
|
|
||||||
|
# Netbox to Zabbix device state convertion
|
||||||
|
zabbix_device_removal = ["Decommissioning", "Inventory"]
|
||||||
|
zabbix_device_disable = ["Offline", "Planned", "Staged", "Failed"]
|
||||||
|
|
||||||
|
# Custom filter for device filtering. Variable must be present but can be left empty with no filtering.
|
||||||
|
# A couple of examples are as follows:
|
||||||
|
|
||||||
|
# nb_device_filter = {} #No filter
|
||||||
|
# nb_device_filter = {"tag": "zabbix"} #Use a tag
|
||||||
|
# nb_device_filter = {"site": "HQ-AMS"} #Use a site name
|
||||||
|
|
||||||
|
# Default device filter, only get devices which have a name in Netbox.
|
||||||
|
nb_device_filter = {"name__n": "null"}
|
@ -1,11 +1,16 @@
|
|||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
"""Netbox to Zabbix sync script."""
|
"""Netbox to Zabbix sync script."""
|
||||||
|
|
||||||
from os import environ, path
|
from os import environ, path, sys
|
||||||
import logging
|
import logging
|
||||||
import argparse
|
import argparse
|
||||||
from pynetbox import api
|
from pynetbox import api
|
||||||
from pyzabbix import ZabbixAPI, ZabbixAPIException
|
from pyzabbix import ZabbixAPI, ZabbixAPIException
|
||||||
|
try:
|
||||||
|
from config import *
|
||||||
|
except ModuleNotFoundError:
|
||||||
|
print(f"Configuration file config.py not found in main directory. Please create the file or rename the config.py.example file to config.py.")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
# Set logging
|
# Set logging
|
||||||
log_format = logging.Formatter('%(asctime)s - %(name)s - '
|
log_format = logging.Formatter('%(asctime)s - %(name)s - '
|
||||||
@ -24,14 +29,6 @@ logger.addHandler(lgout)
|
|||||||
logger.addHandler(lgfile)
|
logger.addHandler(lgfile)
|
||||||
logger.setLevel(logging.WARNING)
|
logger.setLevel(logging.WARNING)
|
||||||
|
|
||||||
# Set template and device Netbox "custom field" names
|
|
||||||
template_cf = "zabbix_template"
|
|
||||||
device_cf = "zabbix_hostid"
|
|
||||||
|
|
||||||
# Netbox to Zabbix device state convertion
|
|
||||||
zabbix_device_removal = ["Decommissioning", "Inventory"]
|
|
||||||
zabbix_device_disable = ["Offline", "Planned", "Staged", "Failed"]
|
|
||||||
|
|
||||||
|
|
||||||
def main(arguments):
|
def main(arguments):
|
||||||
"""Run the sync process."""
|
"""Run the sync process."""
|
||||||
@ -75,7 +72,7 @@ def main(arguments):
|
|||||||
e = f"Zabbix returned the following error: {str(e)}."
|
e = f"Zabbix returned the following error: {str(e)}."
|
||||||
logger.error(e)
|
logger.error(e)
|
||||||
# Get all Zabbix and Netbox data
|
# Get all Zabbix and Netbox data
|
||||||
netbox_devices = netbox.dcim.devices.filter(name__n="null")
|
netbox_devices = netbox.dcim.devices.filter(**nb_device_filter)
|
||||||
netbox_journals = netbox.extras.journal_entries
|
netbox_journals = netbox.extras.journal_entries
|
||||||
zabbix_groups = zabbix.hostgroup.get(output=['groupid', 'name'])
|
zabbix_groups = zabbix.hostgroup.get(output=['groupid', 'name'])
|
||||||
zabbix_templates = zabbix.template.get(output=['templateid', 'name'])
|
zabbix_templates = zabbix.template.get(output=['templateid', 'name'])
|
||||||
|
Loading…
Reference in New Issue
Block a user