diff options
author | Jason Kincl <kincljc@ornl.gov> | 2013-05-22 11:05:18 -0400 |
---|---|---|
committer | Jason Kincl <kincljc@ornl.gov> | 2013-05-22 11:05:18 -0400 |
commit | dafa48723db14f32a6ae07aa9a21df53bd945650 (patch) | |
tree | 70b3a50a1e80780bb867fa99c0e9c5f766b82fa1 /tools | |
parent | 7bfe2b81d22734e559f1335e35ffd720db1ccf0e (diff) | |
download | bcfg2-dafa48723db14f32a6ae07aa9a21df53bd945650.tar.gz bcfg2-dafa48723db14f32a6ae07aa9a21df53bd945650.tar.bz2 bcfg2-dafa48723db14f32a6ae07aa9a21df53bd945650.zip |
1.3 Upgrade Tools: Added script to facilitate upgrading from Probe XML to database backend
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/upgrade/1.3/migrate_probe_groups_to_db.py | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/tools/upgrade/1.3/migrate_probe_groups_to_db.py b/tools/upgrade/1.3/migrate_probe_groups_to_db.py new file mode 100755 index 000000000..540d10505 --- /dev/null +++ b/tools/upgrade/1.3/migrate_probe_groups_to_db.py @@ -0,0 +1,63 @@ +#!/bin/env python + +import os +os.environ['DJANGO_SETTINGS_MODULE'] = 'Bcfg2.settings' + +import lxml.etree +import sys +import Bcfg2.Options + +from Bcfg2.Server.Plugins.Metadata import MetadataClientModel +from Bcfg2.Server.Plugins.Probes import ProbesGroupsModel + +def migrate(xclient): + client_name = xclient.get('name') + try: + try: + client = MetadataClientModel.objects.get(hostname=client_name) + except MetadataClientModel.DoesNotExist: + client = MetadataClientModel(hostname=client_name) + client.save() + except: + print("Failed to migrate client %s" % (client)) + return False + + try: + cgroups = [] + for xgroup in xclient.findall('Group'): + group_name = xgroup.get('name') + cgroups.append(group_name) + try: + group = ProbesGroupsModel.objects.get(hostname=client_name, group=group_name) + except ProbesGroupsModel.DoesNotExist: + group = ProbesGroupsModel(hostname=client_name, group=group_name) + group.save() + + ProbesGroupsModel.objects.filter( + hostname=client.hostname).exclude( + group__in=cgroups).delete() + + except: + print("Failed to migrate groups") + return False + return True + +def main(): + opts = dict(repo=Bcfg2.Options.SERVER_REPOSITORY) + setup = Bcfg2.Options.OptionParser(opts) + setup.parse(sys.argv[1:]) + + probefile = os.path.join(setup['repo'], 'Probes', "probed.xml") + + try: + xdata = lxml.etree.parse(probefile) + except lxml.etree.XMLSyntaxError: + err = sys.exc_info()[1] + print("Could not parse %s, skipping: %s" % (probefile, err)) + + for xclient in xdata.findall('Client'): + print "Migrating Metadata and Probe groups for %s" % xclient.get('name') + migrate(xclient) + +if __name__ == '__main__': + sys.exit(main()) |