From 4ae49c6361ee0ee7d1e0670f41158ae282b29716 Mon Sep 17 00:00:00 2001 From: Apollon Oikonomopoulos <apollon@noc.grnet.gr> Date: Wed, 20 Apr 2011 12:23:10 +0300 Subject: [PATCH] Add GRNET's configuration migration scripts tools/cfgupgrade_grnet: Migrate GRNET's old configuration parameters tools/upgrade-kvm-runtime: Handle kvm runtime upgrades, removing the obsolete run_as parameter Use responsibly. Signed-off-by: Apollon Oikonomopoulos <apollon@noc.grnet.gr> --- Makefile.am | 2 ++ tools/cfgupgrade_grnet | 56 +++++++++++++++++++++++++++++++++++++++ tools/upgrade-kvm-runtime | 47 ++++++++++++++++++++++++++++++++ 3 files changed, 105 insertions(+) create mode 100755 tools/cfgupgrade_grnet create mode 100755 tools/upgrade-kvm-runtime diff --git a/Makefile.am b/Makefile.am index cc1558b9c..c8d61ec31 100644 --- a/Makefile.am +++ b/Makefile.am @@ -361,6 +361,8 @@ dist_tools_SCRIPTS = \ tools/cfgshell \ tools/cfgupgrade \ tools/cfgupgrade12 \ + tools/cfgupgrade_grnet \ + tools/upgrade-kvm-runtime \ tools/cluster-merge \ tools/lvmstrap \ tools/move-instance \ diff --git a/tools/cfgupgrade_grnet b/tools/cfgupgrade_grnet new file mode 100755 index 000000000..02bce5587 --- /dev/null +++ b/tools/cfgupgrade_grnet @@ -0,0 +1,56 @@ +#!/usr/bin/env python + +import os +import sys + +from ganeti import config + + +cfg = config.ConfigWriter(cfg_file=sys.argv[1], offline=True) + +if "kvm" in cfg._config_data.cluster.hvparams: + kvm = cfg._config_data.cluster.hvparams["kvm"] + + if "run_as" in kvm: + if kvm["run_as"]: + print "Found run_as HV parameter, replacing with 'user' security model" + kvm["security_model"] = "user" + kvm["security_domain"] = kvm["run_as"] + else: + print "Found empty run_as KVM HV parameter, removing" + del kvm["run_as"] + +instances = cfg._config_data.instances + +for name in instances: + instance = instances[name] + if "run_as" in instance.hvparams: + if instance.hvparams["run_as"]: + print "Found old 'run_as' parameter, converting to 'user' security model" + instance.hvparams["security_model"] = "user" + instance.hvparams["security_domain"] = instance.hvparams["run_as"] + else: + print "Found empty run_as KVM HV parameter, removing" + del instance.hvparams["run_as"] + + if instance.disk_template != "blockdev": + continue + + for disk in instance.disks: + if len(disk.logical_id) == 3: + print "Found old blockdev configuration on instance %s, fixing" % name + lid = disk.logical_id[2] + if not lid.startswith("/dev/disk/"): + lid = os.path.join("/dev/disk", lid) + + disk.logical_id = ["manual", lid] + try: + disk.physical_id = ["manual", lid] + except AttributeError: + pass + +print "Verifying configuration" +cfg.VerifyConfig() + +print "Writing config" +cfg._WriteConfig() diff --git a/tools/upgrade-kvm-runtime b/tools/upgrade-kvm-runtime new file mode 100755 index 000000000..616386897 --- /dev/null +++ b/tools/upgrade-kvm-runtime @@ -0,0 +1,47 @@ +#!/usr/bin/env python + +import os +import sys + +from glob import glob + +from ganeti import constants +from ganeti import serializer +from ganeti import utils +from ganeti.hypervisor.hv_kvm import KVMHypervisor + +if len(sys.argv) == 1: + root = KVMHypervisor._CONF_DIR +else: + root = sys.argv[1] + +for path in glob(os.path.join(root, "*.runtime")): + try: + data = utils.ReadFile(path) + except EnvironmentError, e: + print "Failed to read file %s: %s" % (path, str(e)) + continue + + try: + kvm_cmd, nics, hvparams = serializer.Load(data) + except Exception, e: + print "Failed to parse file %s: %s" % (path, str(e)) + continue + + # Replace the run_as parameter or remove it completely + if "run_as" in hvparams: + if hvparams["run_as"]: + print "Replacing 'run_as' in %s with 'security_model' = 'user'" % path + hvparams["security_model"] = "user" + hvparams["security_domain"] = hvparams["run_as"] + else: + print "Removing 'run_as' from %s" % path + + del hvparams["run_as"] + + try: + utils.WriteFile(path, + data=serializer.Dump((kvm_cmd, nics, hvparams)), + backup=True) + except EnvironmentError, e: + print "Failed to write %s" % path -- GitLab