From eb49e56bb69614b253555d526399f4442cf3ada2 Mon Sep 17 00:00:00 2001 From: Sven Velt Date: Thu, 17 Jun 2010 20:01:37 +0200 Subject: [PATCH] Rebuild config file parsing, added defaults Signed-off-by: Sven Velt --- nagixsc_conf2http.py | 61 +++++++++++++++++++----- nagixsc_http2nagios.py | 87 +++++++++++++++++++++++++++------- sample-configs/conf2http.cfg | 12 +++-- sample-configs/http2nagios.cfg | 14 +++--- 4 files changed, 133 insertions(+), 41 deletions(-) diff --git a/nagixsc_conf2http.py b/nagixsc_conf2http.py index 1c5d28f..c87959b 100755 --- a/nagixsc_conf2http.py +++ b/nagixsc_conf2http.py @@ -37,18 +37,49 @@ if cfg_list == []: print 'Config file "%s" could not be read!' % options.cfgfile sys.exit(1) -config = {} +config = { + 'ip': '0.0.0.0', + 'port': '15666', + 'ssl': False, + 'sslcert': None, + 'conf_dir': '', + 'pidfile': '/var/run/nagixsc_conf2http.pid' + } + +if 'ip' in cfgread.items('server'): + config['ip'] = cfgread.get('server', 'ip') + +if 'port' in cfgread.items('server'): + config['port'] = cfgread.get('server', 'port') try: - config['ip'] = cfgread.get('server', 'ip') - config['port'] = cfgread.getint('server', 'port') - config['ssl'] = cfgread.getboolean('server', 'ssl') - config['cert'] = cfgread.get('server', 'sslcert') + config['port'] = int(config['port']) +except ValueError: + print 'Port "%s" not an integer!' % config['port'] + sys.exit(127) - config['conf_dir'] = cfgread.get('server', 'conf_dir') +if 'ssl' in cfgread.items('server'): + try: + config['ssl'] = cfgread.getboolean('server', 'ssl') + except ValueError: + print 'Value for "ssl" ("%s") not boolean!' % config['ssl'] + sys.exit(127) + +if config['ssl']: + if 'sslcert' in cfgread.items('server'): + config['sslcert'] = cfgread.get('server', 'sslcert') + else: + print 'SSL but no certificate file specified!' + sys.exit(127) + +try: + config['conf_dir'] = cfgread.get('server', 'conf_dir') +except ConfigParser.NoOptionError: + print 'No "conf_dir" specified!' + sys.exit(127) + +if 'pidfile' in cfgread.items('server'): + config['pidfile'] = cfgread.get('server', 'pidfile') -except ConfigParser.NoOptionError, e: - print 'Config file error: %s ' % e - sys.exit(1) users = {} for u in cfgread.options('users'): @@ -129,14 +160,18 @@ def main(): if options.nossl: config['ssl'] = False - if config['ssl'] and not os.path.isfile(config['cert']): - print 'SSL certificate "%s" not found!' % config['cert'] + if config['ssl'] and not os.path.isfile(config['sslcert']): + print 'SSL certificate "%s" not found!' % config['sslcert'] + sys.exit(127) + + if not os.path.isdir(config['conf_dir']): + print 'Not a config file directory: "%s"' % config['conf_dir'] sys.exit(127) if options.daemon: - daemonize(pidfile='/var/run/nagixsc_conf2http.pid') + daemonize(pidfile=config['pidfile']) - server = MyHTTPServer((config['ip'], config['port']), Conf2HTTPHandler, ssl=config['ssl'], sslpemfile=config['cert']) + server = MyHTTPServer((config['ip'], config['port']), Conf2HTTPHandler, ssl=config['ssl'], sslpemfile=config['sslcert']) try: server.serve_forever() except: diff --git a/nagixsc_http2nagios.py b/nagixsc_http2nagios.py index 0a709a5..dd05e62 100755 --- a/nagixsc_http2nagios.py +++ b/nagixsc_http2nagios.py @@ -37,23 +37,73 @@ if cfg_list == []: print 'Config file "%s" could not be read!' % options.cfgfile sys.exit(1) -config = {} +config = { + 'ip': '0.0.0.0', + 'port': '15666', + 'ssl': False, + 'sslcert': None, + 'conf_dir': '', + 'pidfile': '/var/run/nagixsc_conf2http.pid' + } + +if 'ip' in cfgread.items('server'): + config['ip'] = cfgread.get('server', 'ip') + +if 'port' in cfgread.items('server'): + config['port'] = cfgread.get('server', 'port') try: - config['ip'] = cfgread.get('server', 'ip') - config['port'] = cfgread.getint('server', 'port') - config['ssl'] = cfgread.getboolean('server', 'ssl') - config['cert'] = cfgread.get('server', 'sslcert') + config['port'] = int(config['port']) +except ValueError: + print 'Port "%s" not an integer!' % config['port'] + sys.exit(127) - config['max_xml_file_size'] = cfgread.get('server', 'max_xml_file_size') - config['checkresultdir'] = cfgread.get('mode_checkresult', 'dir') +if 'ssl' in cfgread.items('server'): + try: + config['ssl'] = cfgread.getboolean('server', 'ssl') + except ValueError: + print 'Value for "ssl" ("%s") not boolean!' % config['ssl'] + sys.exit(127) + +if config['ssl']: + if 'sslcert' in cfgread.items('server'): + config['sslcert'] = cfgread.get('server', 'sslcert') + else: + print 'SSL but no certificate file specified!' + sys.exit(127) + +try: + config['mode'] = cfgread.get('server', 'mode') +except ConfigParser.NoOptionError: + print 'No "mode" specified!' + sys.exit(127) + +if config['mode']=='checkresult': + try: + config['checkresultdir'] = cfgread.get('mode_checkresult','dir') + except ConfigParser.NoOptionError: + print 'No "dir" in section "mode_checkresult" specified!' + sys.exit(127) + + if os.access(config['checkresultdir'],os.W_OK) == False: + print 'Checkresult directory "%s" is not writable!' % config['checkresultdir'] + sys.exit(1) + +elif config['mode']=='passive': + try: + config['mode_pipe'] = cfgread.get('mode_passive','pipe') + except ConfigParser.NoOptionError: + print 'No "pipe" in section "mode_passive" specified!' + sys.exit(127) + + if os.access(config['pipe'],os.W_OK) == False: + print 'Nagios command pipe "%s" is not writable!' % config['pipe'] + sys.exit(1) + +else: + print 'Mode "%s" is neither "checkresult" nor "passive"!' + sys.exit(127) -except ConfigParser.NoOptionError, e: - print 'Config file error: %s ' % e - sys.exit(1) -if os.access(config['checkresultdir'],os.W_OK) == False: - print 'Checkresult directory "%s" is not writable.' % config['checkresultdir'] - sys.exit(1) users = {} for u in cfgread.options('users'): @@ -130,20 +180,21 @@ def main(): if options.nossl: config['ssl'] = False - if config['ssl'] and not os.path.isfile(config['cert']): - print 'SSL certificate "%s" not found!' % config['cert'] + if config['ssl'] and not os.path.isfile(config['sslcert']): + print 'SSL certificate "%s" not found!' % config['sslcert'] sys.exit(127) if options.daemon: - daemonize(pidfile='/var/run/nagixsc_http2nagios.pid') + daemonize(pidfile=config['pidfile']) + else: + print 'curl -v -u nagixsc:nagixsc -F \'xmlfile=@xml/nagixsc.xml\' http://127.0.0.1:%s/\n\n' % config['port'] - server = MyHTTPServer((config['ip'], config['port']), HTTP2NagiosHandler, ssl=config['ssl'], sslpemfile=config['cert']) + server = MyHTTPServer((config['ip'], config['port']), HTTP2NagiosHandler, ssl=config['ssl'], sslpemfile=config['sslcert']) try: server.serve_forever() except: server.socket.close() if __name__ == '__main__': - print 'curl -v -u nagixsc:nagixsc -F \'xmlfile=@xml/nagixsc.xml\' http://127.0.0.1:15667/\n\n' main() diff --git a/sample-configs/conf2http.cfg b/sample-configs/conf2http.cfg index 181a806..4e0e5a1 100644 --- a/sample-configs/conf2http.cfg +++ b/sample-configs/conf2http.cfg @@ -1,11 +1,15 @@ +; Lines starting with "#" are defaults + [server] -ip: 0.0.0.0 -port: 15666 -ssl: false -sslcert: server.pem +#ip: 0.0.0.0 +#port: 15666 +#ssl: false +#sslcert: server.pem conf_dir: ./sample-configs/conf +#pidfile: /var/run/nagixsc_conf2http.pid + [users] ; echo -n "Password" | md5sum - nagixsc: 019b0966d98fb71d1a4bc4ca0c81d5cc ; PW: nagixsc diff --git a/sample-configs/http2nagios.cfg b/sample-configs/http2nagios.cfg index 93ffe56..1543d7b 100644 --- a/sample-configs/http2nagios.cfg +++ b/sample-configs/http2nagios.cfg @@ -1,10 +1,12 @@ +; Lines starting with "#" are defaults + [server] -ip: 0.0.0.0 -port: 15667 -ssl: false -sslcert: server.pem +#ip: 0.0.0.0 +#port: 15667 +#ssl: false +#sslcert: server.pem -max_xml_file_size: 102400 +#pidfile: /var/run/nagixsc_http2nagios.pid mode: checkresult @@ -12,7 +14,7 @@ mode: checkresult pipe: /var/lib/nagios3/rw/nagios.cmd [mode_checkresult] -#dir: /var/lib/nagios3/spool/checkresults +;dir: /var/lib/nagios3/spool/checkresults dir: /tmp/cr [users] -- 2.30.2