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.1/posixunified.py | 115 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 tools/upgrade/1.1/posixunified.py (limited to 'tools/upgrade/1.1/posixunified.py') diff --git a/tools/upgrade/1.1/posixunified.py b/tools/upgrade/1.1/posixunified.py new file mode 100644 index 000000000..8eb4ed734 --- /dev/null +++ b/tools/upgrade/1.1/posixunified.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python + +from copy import deepcopy +import lxml.etree +import os +import sys + +import Bcfg2.Options + +""" +NOTE: This script takes a conservative approach when it comes to + updating your Rules. It creates a new unified-rules.xml file + without the attributes you have defined in your current rules. The + reason for this is to keep this script simple so we don't have + to go through and determine the priorities associated with your + current rules definitions. +""" + +if __name__ == '__main__': + opts = { + 'repo': Bcfg2.Options.SERVER_REPOSITORY, + } + setup = Bcfg2.Options.OptionParser(opts) + setup.parse(sys.argv[1:]) + repo = setup['repo'] + unifiedposixrules = "%s/Rules/unified-rules.xml" % repo + rulesroot = lxml.etree.Element("Rules") + + for plug in ['Base', 'Bundler']: + for root, dirs, files in os.walk('%s/%s' % (repo, plug)): + if '.svn' in dirs: + dirs.remove('.svn') + for filename in files: + if filename.startswith('new'): + continue + xdata = lxml.etree.parse(os.path.join(root, filename)) + # replace ConfigFile elements + for c in xdata.findall('//ConfigFile'): + parent = c.getparent() + oldc = c + c.tag = 'Path' + parent.replace(oldc, c) + # replace Directory elements + for d in xdata.findall('//Directory'): + parent = d.getparent() + oldd = d + d.tag = 'Path' + parent.replace(oldd, d) + # Create new-style Rules entry + newd = deepcopy(d) + newd.set('type', 'directory') + rulesroot.append(newd) + # replace BoundDirectory elements + for d in xdata.findall('//BoundDirectory'): + parent = d.getparent() + oldd = d + d.tag = 'BoundPath' + parent.replace(oldd, d) + # Create new-style entry + newd = deepcopy(d) + newd.set('type', 'directory') + # replace Permissions elements + for p in xdata.findall('//Permissions'): + parent = p.getparent() + oldp = p + p.tag = 'Path' + parent.replace(oldp, p) + # Create new-style Rules entry + newp = deepcopy(p) + newp.set('type', 'permissions') + rulesroot.append(newp) + # replace BoundPermissions elements + for p in xdata.findall('//BoundPermissions'): + parent = p.getparent() + oldp = p + p.tag = 'BoundPath' + parent.replace(oldp, p) + # Create new-style entry + newp = deepcopy(p) + newp.set('type', 'permissions') + # replace SymLink elements + for s in xdata.findall('//SymLink'): + parent = s.getparent() + olds = s + s.tag = 'Path' + parent.replace(olds, s) + # Create new-style Rules entry + news = deepcopy(s) + news.set('type', 'symlink') + rulesroot.append(news) + # replace BoundSymLink elements + for s in xdata.findall('//BoundSymLink'): + parent = s.getparent() + olds = s + s.tag = 'BoundPath' + parent.replace(olds, s) + # Create new-style entry + news = deepcopy(s) + news.set('type', 'symlink') + # write out the new bundle + try: + newbundle = open("%s/%s/new%s" % (repo, plug, filename), 'w') + except IOError: + print("Failed to write %s" % filename) + continue + newbundle.write(lxml.etree.tostring(xdata, pretty_print=True)) + newbundle.close() + + try: + newrules = open(unifiedposixrules, 'w') + rulesroot.set('priority', '1') + newrules.write(lxml.etree.tostring(rulesroot, pretty_print=True)) + newrules.close() + except IOError: + print("Failed to write %s" % unifiedposixrules) -- cgit v1.2.3-1-g7c22