Installation via Docker
To pull the latest stable version to your local cache, use the following docker pull command:
docker pull ghcr.io/thenetworkguy/netbox-zabbix-sync:main
Make sure to specify the needed environment variables for the script to work (see here) on the command line or use an env file.
docker run -d -t -i -e ZABBIX_HOST='https://zabbix.local' \
-e ZABBIX_TOKEN='othersecrettoken' \
-e NETBOX_HOST='https://netbox.local' \
-e NETBOX_TOKEN='secrettoken' \
--name netbox-zabbix-sync ghcr.io/thenetworkguy/netbox-zabbix-sync:main
This should run a one-time sync, you can check the sync with
docker logs netbox-zabbix-sync
.
The image uses the default config.py
for it's configuration, you can use a
volume mount in the docker run command to override with your own config file if
needed (see config file):
docker run -d -t -i -v $(pwd)/config.py:/opt/netbox-zabbix/config.py ...
Installation from Source
Cloning the repository
git clone https://github.com/TheNetworkGuy/netbox-zabbix-sync.git
Packages
Make sure that you have a python environment with the following packages
installed. You can also use the requirements.txt
file for installation with
pip.
# Packages:
pynetbox
pyzabbix
# Install them through requirements.txt from a venv:
virtualenv .venv
source .venv/bin/activate
.venv/bin/pip --require-virtualenv install -r requirements.txt
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.
cp config.py.example config.py
Set environment variables
Set the following environment variables:
export ZABBIX_HOST="https://zabbix.local"
export ZABBIX_USER="username"
export ZABBIX_PASS="Password"
export NETBOX_HOST="https://netbox.local"
export NETBOX_TOKEN="secrettoken"
Or, you can use a Zabbix API token to login instead of using a username and
password. In that case ZABBIX_USER
and ZABBIX_PASS
will be ignored.
export ZABBIX_TOKEN=othersecrettoken
If you are using custom SSL certificates for NetBox and/or Zabbix, you can set the following environment variable to the path of your CA bundle file:
export REQUESTS_CA_BUNDLE=/path/to/your/ca-bundle.crt
NetBox custom fields
Use the following custom fields in NetBox (if you are using config context for the template information then the zabbix_template field is not required):
* Type: Integer
* Name: zabbix_hostid
* Required: False
* Default: null
* Object: dcim > device
* Type: Text
* Name: zabbix_template
* Required: False
* Default: null
* Object: dcim > device_type
You can make the zabbix_hostid
field hidden or read-only to prevent human
intervention.
This is optional and there is a use case for leaving it read-write in the UI to manually change the ID. For example to re-run a sync.