diff --git a/convert-config.py b/convert-config.py deleted file mode 100755 index 8ff11e90e..000000000 --- a/convert-config.py +++ /dev/null @@ -1,229 +0,0 @@ -#!/usr/bin/env python -import sys -import re - -def readObject(): - inObject = False - - obj = { - 'type': None, - 'properties': {} - } - - for line in sys.stdin: - # remove new-line as well as other whitespace characters - line = line.strip() - - # replace tabs with space - line = line.replace("\t", ' ') - - # ignore comments and empty lines - if line == '' or line[0] == '#': - continue - - if not inObject: - match = re.match('^define +([^ ]+) *{$', line) - - if not match: - raise ValueError('Invalid line in config file: ' + line) - - obj['type'] = match.group(1) - inObject = True - else: - match = re.match('^}$', line) - - if match: - return obj - - match = re.match('^ *([^ ]+) *(.*)$', line) - - if match: - obj['properties'][match.group(1)] = match.group(2) - else: - raise ValueError('Invalid line in config file: ' + line) - - return None - -def dumpValue(obj, indent = 0): - result = ''; - - indent += 1 - - if isinstance(obj, dict): - result = "{\n" - - for k, v in obj.iteritems(): - op = '+=' if isinstance(v, (dict, list)) else '=' - result += "\t" * indent + k + ' ' + op + ' ' + dumpValue(v, indent) + ",\n" - - result += "\t" * (indent - 1) + "}" - elif isinstance(obj, list): - result = "{\n" - - for v in obj: - result += "\t" * indent + dumpValue(v) + ",\n" - - result += "\t" * (indent - 1) + "}" - elif isinstance(obj, (int, long)): - result = str(obj) - else: - result = ''.join(['"', str(obj), '"']) - - return result - -def printObject(obj): - if 'abstract' in obj and obj['abstract']: - print 'abstract', - - if 'local' in obj and obj['local']: - print 'local', - - if 'temporary' in obj and obj['temporary']: - print 'temporary', - - print 'object', obj['type'], ''.join(['"', obj['name'], '"']), - - if 'parents' in obj and len(obj['parents']) > 0: - print 'inherits', - print ', '.join([''.join(['"', parent, '"']) for parent in obj['parents']]), - - print dumpValue(obj['properties']) - print - -nagios_svc_template = { - 'name': 'nagios-service', - 'type': 'service', - 'abstract': True, - 'properties': { - 'check_type': 'nagios', - 'macros': { - 'USER1': '/tmp/nagios/plugins', - 'SERVICESTATE': 0, - 'SERVICEDURATIONSEC': 0, - 'TOTALHOSTSERVICESCRITICAL': 0, - 'TOTALHOSTSERVICESWARNING': 0 - } - } -} - -printObject(nagios_svc_template) - -allObjects = [] -objects = {} - -while True: - obj = readObject() - - if obj == None: - break - - props = obj['properties'] - - # transform the name property - name = None - for prop in [obj['type'] + '_name', 'name', 'service_description']: - if prop in props: - if prop == 'service_description': - name = props[prop] + '-' + props['host_name'] - else: - name = props[prop] - del props[prop] - break - - if name == None: - raise ValueError('Object has no name: ' + str(obj)) - - obj['name'] = name - - if not obj['type'] in objects: - objects[obj['type']] = {} - - allObjects.append(obj) - objects[obj['type']][obj['name']] = obj - -for obj in allObjects: - props = obj['properties'] - newprops = {} - - obj['parents'] = [] - - # transform 'register' property - if 'register' in props: - if int(props['register']) == 0: - obj['abstract'] = True - - del props['register'] - - # transform 'use' property - if 'use' in props: - obj['parents'] = props['use'].split(',') - del props['use'] - - # transform commands into service templates - if obj['type'] == 'command': - obj['abstract'] = True - obj['type'] = 'service' - obj['parents'].append('nagios-service') - - if 'command_line' in props: - newprops['check_command'] = props['command_line'] - del props['command_line'] - - # transform contactgroups/hostgroups/servicegroups - #elif obj['type'] in ['contactgroup', 'hostgroup', 'servicegroup']: - # if 'alias' in props: - # newprops['alias'] = props['alias'] - # del props['alias'] - # - # if 'members' in props: - # newprops['members'] = props['members'].split(',') - # del props['members'] - - # transform services - elif obj['type'] == 'service': - newprops['macros'] = {} - - if 'check_command' in props: - tokens = props['check_command'].split('!') - obj['parents'].append(tokens[0]) - - num = 0 - for token in tokens[1:]: - num += 1 - newprops['macros']['ARG' + str(num)] = token - - del props['check_command'] - - if 'check_interval' in props: - newprops['check_interval'] = int(float(props['check_interval']) * 60) - del props['check_interval'] - - if 'retry_interval' in props: - newprops['retry_interval'] = int(float(props['retry_interval']) * 60) - del props['retry_interval'] - - if 'max_check_attempts' in props: - newprops['max_check_attempts'] = int(props['max_check_attempts']) - del props['max_check_attempts'] - - newprops['macros']['SERVICEDESC'] = obj['name'] - - if 'host_name' in props: - newprops['host_name'] = props['host_name'] - newprops['macros']['HOSTNAME'] = props['host_name'] - del props['host_name'] - - newprops['alias'] = obj['name'] - obj['name'] = newprops['host_name'] + '-' + obj['name'] - - for k, v in props.iteritems(): - if k[0] == '_': - newprops['macros'][k] = v - - obj['properties'] = newprops - - #if len(props) > 0: - # obj['properties']['old'] = props - - printObject(obj) -