mirror of
https://github.com/TheNetworkGuy/netbox-zabbix-sync.git
synced 2025-07-14 01:41:25 -06:00
91 lines
3.0 KiB
Python
91 lines
3.0 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
All of the Zabbix Usermacro related configuration
|
|
"""
|
|
from re import match
|
|
from logging import getLogger
|
|
from zabbix_utils import APIRequestError
|
|
from modules.exceptions import UsermacroError
|
|
|
|
from pprint import pprint
|
|
|
|
try:
|
|
from config import (
|
|
usermacro_sync,
|
|
)
|
|
except ModuleNotFoundError:
|
|
print("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)
|
|
|
|
class ZabbixUsermacros():
|
|
"""Class that represents a Zabbix interface."""
|
|
|
|
def __init__(self, context, usermacro_map, logger=None):
|
|
self.context = context
|
|
self.usermacro_map = usermacro_map
|
|
self.logger = logger if logger else getLogger(__name__)
|
|
self.usermacros = {}
|
|
self.sync = False
|
|
self.force_sync = False
|
|
self._setConfig()
|
|
|
|
def __repr__(self):
|
|
return self.name
|
|
|
|
def __str__(self):
|
|
return self.__repr__()
|
|
|
|
def _setConfig(self):
|
|
if str(usermacro_sync).lower() == "full":
|
|
self.sync = True
|
|
self.force_sync = True
|
|
elif usermacro_sync:
|
|
self.sync = True
|
|
return True
|
|
|
|
def validate_macro(self, macro_name):
|
|
pattern = '\{\$[A-Z0-9\._]*(\:.*)?\}'
|
|
return match(pattern, macro_name)
|
|
|
|
def render_macro(self, macro_name, macro_properties):
|
|
macro={}
|
|
macrotypes={'text': 0, 'secret': 1, 'vault': 2}
|
|
if self.validate_macro(macro_name):
|
|
macro['macro'] = str(macro_name)
|
|
if isinstance(macro_properties, dict):
|
|
if not 'value' in macro_properties:
|
|
self.logger.error(f'Usermacro {macro_name} has no value, skipping.')
|
|
return False
|
|
else:
|
|
macro['value'] = macro_properties['value']
|
|
|
|
if 'type' in macro_properties and macro_properties['type'].lower() in macrotypes:
|
|
macro['type'] = str(macrotypes[macro_properties['type']])
|
|
else:
|
|
macro['type'] = str(0)
|
|
|
|
if 'description' in macro_properties and isinstance(macro_properties['description'], str):
|
|
macro['description'] = macro_properties['description']
|
|
else:
|
|
macro['description'] = ""
|
|
|
|
elif isinstance(macro_properties, str):
|
|
macro['value'] = macro_properties
|
|
macro['type'] = str(0)
|
|
macro['description'] = ""
|
|
else:
|
|
self.logger.error(f'Usermacro {macro_name} is not a valid usermacro name, skipping.')
|
|
return False
|
|
return macro
|
|
|
|
def generate(self):
|
|
macros=[]
|
|
if "zabbix" in self.context and "usermacros" in self.context['zabbix']:
|
|
for macro, properties in self.context['zabbix']['usermacros'].items():
|
|
m = self.render_macro(macro, properties)
|
|
pprint(m)
|
|
if m:
|
|
macros.append(m)
|
|
return macros
|