From 8311349047d3dc28dcaefba9003b60b663ed3939 Mon Sep 17 00:00:00 2001 From: Narayan Desai Date: Wed, 8 Oct 2008 12:54:05 +0000 Subject: Initial import of NagioGen git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@4928 ce84e21b-d406-0410-9b95-82705330c041 --- src/lib/Server/Plugins/NagiosGen.py | 78 +++++++++++++++++++++++++++++++++++++ src/lib/Server/Plugins/__init__.py | 2 +- 2 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 src/lib/Server/Plugins/NagiosGen.py (limited to 'src') diff --git a/src/lib/Server/Plugins/NagiosGen.py b/src/lib/Server/Plugins/NagiosGen.py new file mode 100644 index 000000000..30ac93984 --- /dev/null +++ b/src/lib/Server/Plugins/NagiosGen.py @@ -0,0 +1,78 @@ +'''This module implements a Nagios configuration generator''' + +import re, os, glob, socket, logging +import Bcfg2.Server.Plugin + +LOGGER = logging.getLogger('Bcfg2.Plugins.NagiosGen') +class NagiosGen(Bcfg2.Server.Plugin.Plugin): + '''NagiosGen is a Bcfg2 plugin that dynamically generates + Nagios configuration file based on Bcfg2 data.''' + __name__ = 'NagiosGen' + __version__ = '0.6' + __author__ = 'bcfg-dev@mcs.anl.gov' + + def __init__(self, core, datastore): + Bcfg2.Server.Plugin.Plugin.__init__(self, core, datastore) + self.Entries = {'ConfigFile': + {'/etc/nagiosgen.status' : self.createhostconfig, + '/etc/nagios/nagiosgen.cfg': self.createserverconfig}} + + self.client_attrib = {'encoding': 'ascii', 'owner':'root', \ + 'group':'root', 'perms':'0400'} + self.server_attrib = {'encoding': 'ascii', 'owner':'nagios', \ + 'group':'nagios', 'perms':'0440'} + + def createhostconfig(self, entry, metadata): + '''Build host specific configuration file''' + host_address = socket.gethostbyname(metadata.hostname) + host_groups = filter(lambda x: os.path.isfile('%s/%s-group.cfg' % \ + (self.data, x)), metadata.groups) + host_config = \ + 'define host{\n\ + use default\n\ + host_name %s\n\ + alias %s\n\ + address %s\n' % \ + (metadata.hostname, metadata.hostname, host_address ) + if host_groups: + host_config += ' hostgroups %s\n' % (",".join(host_groups)) + host_config += ' }\n' + entry.text = host_config + [entry.attrib.__setitem__(key, value) for \ + (key, value) in self.client_attrib.iteritems()] + try: + fileh = open( "%s/%s-host.cfg" % \ + (self.data, metadata.hostname), 'w' ) + fileh.write(host_config) + fileh.close() + except OSError, ioerr: + LOGGER.error("Failed to write %s/%s-host.cfg" % \ + (self.data, metadata.hostname)) + LOGGER.error(ioerr) + + def createserverconfig(self, entry, metadata): + '''Build monolithic server configuration file''' + host_configs = glob.glob('%s/*-host.cfg' % self.data) + group_configs = glob.glob('%s/*-group.cfg' % self.data) + host_data = "" + group_data = "" + for host in host_configs: + hostfile = open( host, 'r' ) + host_data += hostfile.read() + hostfile.close() + for group in group_configs: + group_name = re.sub("(-group.cfg|.*/(?=[^/]+))", "", group) + if host_data.find(group_name) != -1: + groupfile = open( group, 'r' ) + group_data += groupfile.read() + groupfile.close() + entry.text = group_data + host_data + [entry.attrib.__setitem__(key, value) for \ + (key, value) in self.server_attrib.iteritems()] + try: + fileh = open( "%s/nagiosgen.cfg" % (self.data), 'w' ) + fileh.write(group_data + host_data) + fileh.close() + except OSError, ioerr: + LOGGER.error("Failed to write %s/nagiosgen.cfg" % (self.data)) + LOGGER.error(ioerr) diff --git a/src/lib/Server/Plugins/__init__.py b/src/lib/Server/Plugins/__init__.py index 00c161d64..9707fbfeb 100644 --- a/src/lib/Server/Plugins/__init__.py +++ b/src/lib/Server/Plugins/__init__.py @@ -1,6 +1,6 @@ '''imports for Bcfg2.Server.Plugins''' __revision__ = '$Revision$' -__all__ = ['Account', 'Base', 'Bundler', 'Cfg', 'Hostbase', 'Metadata', +__all__ = ['Account', 'Base', 'Bundler', 'Cfg', 'Hostbase', 'Metadata', 'NagiosGen', 'Pkgmgr', 'Rules', 'SSHbase', 'Statistics', 'Svcmgr', 'TCheetah', 'SGenshi', 'TGenshi', 'Vhost'] -- cgit v1.2.3-1-g7c22