diff options
author | Sol Jerome <sol.jerome@gmail.com> | 2013-06-02 14:20:37 -0500 |
---|---|---|
committer | Sol Jerome <sol.jerome@gmail.com> | 2013-06-02 14:20:37 -0500 |
commit | 9de1086c937c5f8919cb279e7f601d7de064f901 (patch) | |
tree | 83362fdb6ee6bfb17bc8aa1477cb5c06f54022ca /tools | |
parent | fdeba3b8f2cea7ecb2200cab42ce28fd1e1e6a5c (diff) | |
parent | 521862b6584eb4d68e12df5d1a5c4f7a8ef1bdf5 (diff) | |
download | bcfg2-9de1086c937c5f8919cb279e7f601d7de064f901.tar.gz bcfg2-9de1086c937c5f8919cb279e7f601d7de064f901.tar.bz2 bcfg2-9de1086c937c5f8919cb279e7f601d7de064f901.zip |
Merge branch 'maint'
Signed-off-by: Sol Jerome <sol.jerome@gmail.com>
Conflicts:
doc/installation/distributions.txt
doc/server/snapshots/index.txt
src/lib/Bcfg2/Server/Plugin/helpers.py
src/sbin/bcfg2-server
Diffstat (limited to 'tools')
-rw-r--r-- | tools/upgrade/1.3/README | 5 | ||||
-rwxr-xr-x | tools/upgrade/1.3/migrate_info.py | 6 | ||||
-rwxr-xr-x | tools/upgrade/1.3/migrate_probe_groups_to_db.py | 68 |
3 files changed, 78 insertions, 1 deletions
diff --git a/tools/upgrade/1.3/README b/tools/upgrade/1.3/README index 2831d8f00..1a919f869 100644 --- a/tools/upgrade/1.3/README +++ b/tools/upgrade/1.3/README @@ -19,3 +19,8 @@ migrate_dbstats.py migrate_perms_to_mode.py - Convert perms attribute to mode (note that if you have info/:info files, you should run migrate_info.py first) + +migrate_probe_groups_to_db.py + - Migrate Probe host and group data from XML to DB backend for Metadata + and Probe plugins. Does not migrate individual probe return data. Assumes + migration to BOTH Metadata and Probe to database backends. diff --git a/tools/upgrade/1.3/migrate_info.py b/tools/upgrade/1.3/migrate_info.py index e72599daf..3ccbf0285 100755 --- a/tools/upgrade/1.3/migrate_info.py +++ b/tools/upgrade/1.3/migrate_info.py @@ -1,12 +1,16 @@ #!/usr/bin/env python import os +import re import sys import lxml.etree import Bcfg2.Options from Bcfg2.Server.Plugin import INFO_REGEX +PERMS_REGEX = re.compile(r'perms:\s*(?P<perms>\w+)') + + def convert(info_file): info_xml = os.path.join(os.path.dirname(info_file), "info.xml") if os.path.exists(info_xml): @@ -16,7 +20,7 @@ def convert(info_file): fileinfo = lxml.etree.Element("FileInfo") info = lxml.etree.SubElement(fileinfo, "Info") for line in open(info_file).readlines(): - match = INFO_REGEX.match(line) + match = INFO_REGEX.match(line) or PERMS_REGEX.match(line) if match: mgd = match.groupdict() for key, value in list(mgd.items()): 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..73339e787 --- /dev/null +++ b/tools/upgrade/1.3/migrate_probe_groups_to_db.py @@ -0,0 +1,68 @@ +#!/bin/env python +""" Migrate Probe host and group data from XML to DB backend for Metadata +and Probe plugins. Does not migrate individual probe return data. Assumes +migration to BOTH Metadata and Probe to database backends. """ + +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): + """ Helper to do the migration given a <Client/> XML element """ + 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(): + """ 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()) |