From afeeb2b6430875cc3979ae4ad690d2a3efc0ac68 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Fri, 11 May 2012 13:27:07 -0400 Subject: moved plugin-specific configs to main config file; propagate "setup" object to server Core --- tools/upgrade/1.2/nagiosgen-convert.py | 75 ++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100755 tools/upgrade/1.2/nagiosgen-convert.py (limited to 'tools/upgrade/1.2/nagiosgen-convert.py') diff --git a/tools/upgrade/1.2/nagiosgen-convert.py b/tools/upgrade/1.2/nagiosgen-convert.py new file mode 100755 index 000000000..2c2142735 --- /dev/null +++ b/tools/upgrade/1.2/nagiosgen-convert.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python + +import os +import sys +import lxml.etree + +import Bcfg2.Options + +def main(): + opts = {'repo': Bcfg2.Options.SERVER_REPOSITORY} + setup = Bcfg2.Options.OptionParser(opts) + setup.parse(sys.argv[1:]) + repo = setup['repo'] + oldconfigfile = os.path.join(repo, 'Properties', 'NagiosGen.xml') + newconfigpath = os.path.join(repo, 'NagiosGen') + newconfigfile = os.path.join(newconfigpath, 'config.xml') + parentsfile = os.path.join(newconfigpath, 'parents.xml') + + if not os.path.exists(oldconfigfile): + print("%s does not exist, nothing to do" % oldconfigfile) + return 1 + + if not os.path.exists(newconfigpath): + print("%s does not exist, cannot write %s" % + (newconfigpath, newconfigfile)) + return 2 + + newconfig = lxml.etree.XML("") + + oldconfig = lxml.etree.parse(oldconfigfile) + for host in oldconfig.getroot().getchildren(): + if host.tag == lxml.etree.Comment: + # skip comments + continue + + if host.tag == 'default': + print("default tag will not be converted; use a suitable Group tag instead") + continue + + newhost = lxml.etree.Element("Client", name=host.tag) + for opt in host: + newopt = lxml.etree.Element("Option", name=opt.tag) + newopt.text = opt.text + newhost.append(newopt) + newconfig.append(newhost) + + # parse the parents config, if it exists + if os.path.exists(parentsfile): + parentsconfig = lxml.etree.parse(parentsfile) + for el in parentsconfig.xpath("//Depend"): + newhost = newconfig.find("Client[@name='%s']" % el.get("name")) + if newhost is not None: + newparents = newhost.find("Option[@name='parents']") + if newparents is not None: + newparents.text += "," + el.get("on") + else: + newparents = lxml.etree.Element("Option", name="parents") + newparents.text = el.get("on") + newhost.append(newparents) + else: + newhost = lxml.etree.Element("Client", name=el.get("name")) + newparents = lxml.etree.Element("Option", name="parents") + newparents.text = el.get("on") + newhost.append(newparents) + newconfig.append(newhost) + + try: + open(newconfigfile, 'w').write(lxml.etree.tostring(newconfig, + pretty_print=True)) + print("%s written" % newconfigfile) + except IOError: + print("Failed to write %s" % newconfigfile) + +if __name__ == '__main__': + sys.exit(main()) -- cgit v1.2.3-1-g7c22