summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorJason Kincl <kincljc@ornl.gov>2013-05-22 11:05:18 -0400
committerJason Kincl <kincljc@ornl.gov>2013-05-22 11:05:18 -0400
commitdafa48723db14f32a6ae07aa9a21df53bd945650 (patch)
tree70b3a50a1e80780bb867fa99c0e9c5f766b82fa1 /tools
parent7bfe2b81d22734e559f1335e35ffd720db1ccf0e (diff)
downloadbcfg2-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-xtools/upgrade/1.3/migrate_probe_groups_to_db.py63
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())