Files
icinga122/main.py
2022-03-14 14:25:39 +01:00

88 lines
2.8 KiB
Python

from pyparsing import (Suppress, Keyword, Word, alphas, alphanums, Combine,
OneOrMore, quotedString, removeQuotes, Group, ZeroOrMore, SkipTo, LineEnd, Regex)
import pprint
from collections import defaultdict
LBRACE, RBRACE, EQ = map(Suppress, "{}=")
DEFINE = Keyword("define")
filter_comments = Regex(r"#.*")
filter_comments = filter_comments.suppress()
ident = Word(alphas, alphanums)
dottedIdent = Combine(ident + OneOrMore("_" + ident))
value = Regex('.*')
propertyDefn = Group((dottedIdent | ident)("name") + value("value"))
objectBodyDefn = Group(ZeroOrMore(propertyDefn("properties*")))
objectDefn = Group(DEFINE + ident("type") + LBRACE + objectBodyDefn("body") + RBRACE)
parser = ZeroOrMore(objectDefn)
config = defaultdict(defaultdict)
for obj in parser.parseFile('objects.cache'):
if obj.body.properties:
o = defaultdict(defaultdict)
for prop in obj.body.properties:
o[prop.name] = prop.value
if obj.type in ('service', 'host'):
config[obj.type][o["host_name"]] = o
if obj.type == 'timeperiod':
config[obj.type][o["timeperiod_name"]] = o
if obj.type == 'command':
config[obj.type][o["command_name"]] = o
else:
print(' ', '<none>')
print()
#pprint.pp(config)
#from icinga2confgen.Servers.Server import Server
#from icinga2confgen.ConfigBuilder import ConfigBuilder
#from string import Template
for hostname,obj in config["host"].items():
template = r'''
object Host "{hostname}" {{
address = "{address}"
check_command = "hostalive"
}}'''.format(hostname=hostname,address=obj["address"])
print(template)
for hostname,obj in config["service"].items():
template = r'''
object Service "{service}" {{
import "generic-service"
host_name = "{hostname}"
check_command = "{command}"
check_interval = {check_interval}m
retry_interval = {retry_interval}m
}}'''.format(hostname=hostname, service=obj["service_description"], check_interval=int(float(obj["check_interval"])),
retry_interval=int(float(obj["retry_interval"])),command=obj["check_command"])
print(template)
for command, obj in config["command"].items():
args = obj["command_line"].split(' ')
template = r'''
object CheckCommand "{command_name}" {{
command = [
PluginDir + "/{command_name_arg}", # {command_name_args}
]
arguments = {{
"-H" = "$ping_address$"
"-w" = "$ping_wrta$,$ping_wpl$%"
"-c" = "$ping_crta$,$ping_cpl$%"
"-p" = "$ping_packets$"
"-t" = "$ping_timeout$"
}}
vars.arg_address = "$address$"
vars.ping_wrta = 100
vars.ping_wpl = 5
vars.ping_crta = 200
vars.ping_cpl = 15
}}
'''.format(command_name=command, command_name_arg=args[0].split('/')[-1], command_name_args=' '.join(args[1:-1]))
print(template)