Splitting a Nagios configuration file
Have you ever inherited a nagios setup where the configuration file hierarchy is a complete mess ?
Ever wanted to split that services.cfg with 2000 objects in it into one file per host ?
It is relatively easy to do with pynag. Consider this script which copies all the nagios objects and creates an example hierarchy under /tmp/nagios/conf.d/
#!/usr/bin/env python # # This pynag script will parse all your nagios configuration # And write a copy of every single object to /tmp/nagios/conf.d # # This can be very handy if your configuration files are a mess # or if you are thinking about splitting a big file of services # into one file per host # # The script will only write the copy to /tmp so you will # have to manually remove old objects before you copy this # into your /etc/nagios/conf.d or wherever you want to keep # your objects import pynag.Model from pynag.Model import ObjectDefinition # cfg_file is where our main nagios config file is pynag.Model.cfg_file = '/etc/nagios/nagios.cfg' # pynag_directory is where the new objects will be saved pynag.Model.pynag_directory = '/tmp/nagios/conf.d' all_objects = ObjectDefinition.objects.all # Use this instead if you only want to clean up a single directory # config_file='/etc/nagios/all_the_services.cfg' # all_objects = ObjectDefinition.objects.filter(filename__contains=config_file) for i in all_objects: print "Saving", i.object_type, i.get_description(), "...", # Set a new filename for our object, None means # That pynag decides where it goes new_filename = None # Alternative: # if i.object.type == 'host' and i.host_name is not None: # new_filename = '/tmp/nagios/conf.d/hosts/%s" % i.host_name i.set_filename(new_filename) i.save() print "Saved to", i.get_filename()