This should reduce the dogpiling in bugzilla for overly-generic errors like "lvcreate failed for VolGroup/lv_root". --- storage/devicelibs/lvm.py | 153 ++++++++++++++++++----------------------- storage/devicelibs/mdraid.py | 85 +++++++++++------------ 2 files changed, 107 insertions(+), 131 deletions(-) diff --git a/storage/devicelibs/lvm.py b/storage/devicelibs/lvm.py index 5fa9198..1f7e1c7 100644 --- a/storage/devicelibs/lvm.py +++ b/storage/devicelibs/lvm.py @@ -157,17 +157,30 @@ def clampSize(size, pesize, roundup=None): return long(round(float(size)/float(pesize)) * pesize) +def lvm(args): + rc = iutil.execWithRedirect("lvm", args, + stdout = "/dev/tty5", + stderr = "/dev/tty5", + searchPath=1) + if not rc: + return + + try: + msg = open("/tmp/program.log").readlines()[-1].strip() + except Exception: + msg = "" + + raise LVMError(msg) + def pvcreate(device): args = ["pvcreate"] + \ config_args + \ [device] - rc = iutil.execWithRedirect("lvm", args, - stdout = "/dev/tty5", - stderr = "/dev/tty5", - searchPath=1) - if rc: - raise LVMError("pvcreate failed for %s" % device) + try: + lvm(args) + except LVMError as msg: + raise LVMError("pvcreate failed for %s: %s" % (device, msg)) def pvresize(device, size): args = ["pvresize"] + \ @@ -175,24 +188,20 @@ def pvresize(device, size): config_args + \ [device] - rc = iutil.execWithRedirect("lvm", args, - stdout = "/dev/tty5", - stderr = "/dev/tty5", - searchPath=1) - if rc: - raise LVMError("pvresize failed for %s" % device) + try: + lvm(args) + except LVMError as msg: + raise LVMError("pvresize failed for %s: %s" % (device, msg)) def pvremove(device): args = ["pvremove"] + \ config_args + \ [device] - rc = iutil.execWithRedirect("lvm", args, - stdout = "/dev/tty5", - stderr = "/dev/tty5", - searchPath=1) - if rc: - raise LVMError("pvremove failed for %s" % device) + try: + lvm(args) + except LVMError as msg: + raise LVMError("pvremove failed for %s: %s" % (device, msg)) def pvinfo(device): """ @@ -237,51 +246,40 @@ def vgcreate(vg_name, pv_list, pe_size): argv.append(vg_name) argv.extend(pv_list) - rc = iutil.execWithRedirect("lvm", argv, - stdout = "/dev/tty5", - stderr = "/dev/tty5", - searchPath=1) - - if rc: - raise LVMError("vgcreate failed for %s" % vg_name) + try: + lvm(argv) + except LVMError as msg: + raise LVMError("vgcreate failed for %s: %s" % (vg_name, msg)) def vgremove(vg_name): args = ["vgremove"] + \ config_args +\ [vg_name] - rc = iutil.execWithRedirect("lvm", args, - stdout = "/dev/tty5", - stderr = "/dev/tty5", - searchPath=1) - - if rc: - raise LVMError("vgremove failed for %s" % vg_name) + try: + lvm(args) + except LVMError as msg: + raise LVMError("vgremove failed for %s: %s" % (vg_name, msg)) def vgactivate(vg_name): args = ["vgchange", "-a", "y"] + \ config_args + \ [vg_name] - rc = iutil.execWithRedirect("lvm", args, - stdout = "/dev/tty5", - stderr = "/dev/tty5", - searchPath=1) - if rc: - raise LVMError("vgactivate failed for %s" % vg_name) + try: + lvm(args) + except LVMError as msg: + raise LVMError("vgactivate failed for %s: %s" % (vg_name, msg)) def vgdeactivate(vg_name): args = ["vgchange", "-a", "n"] + \ config_args + \ [vg_name] - rc = iutil.execWithRedirect("lvm", args, - stdout = "/dev/tty5", - stderr = "/dev/tty5", - searchPath=1) - - if rc: - raise LVMError("vgdeactivate failed for %s" % vg_name) + try: + lvm(args) + except LVMError as msg: + raise LVMError("vgdeactivate failed for %s: %s" % (vg_name, msg)) def vgreduce(vg_name, pv_list, rm=False): """ Reduce a VG. @@ -296,13 +294,10 @@ def vgreduce(vg_name, pv_list, rm=False): else: args.extend([vg_name] + pv_list) - rc = iutil.execWithRedirect("lvm", args, - stdout = "/dev/tty5", - stderr = "/dev/tty5", - searchPath=1) - - if rc: - raise LVMError("vgreduce failed for %s" % vg_name) + try: + lvm(args) + except LVMError as msg: + raise LVMError("vgreduce failed for %s: %s" % (vg_name, msg)) def vginfo(vg_name): args = ["vgs", "--noheadings", "--nosuffix"] + \ @@ -372,26 +367,20 @@ def lvcreate(vg_name, lv_name, size): config_args + \ [vg_name] - rc = iutil.execWithRedirect("lvm", args, - stdout = "/dev/tty5", - stderr = "/dev/tty5", - searchPath=1) - - if rc: - raise LVMError("lvcreate failed for %s/%s" % (vg_name, lv_name)) + try: + lvm(args) + except LVMError as msg: + raise LVMError("lvcreate failed for %s/%s: %s" % (vg_name, lv_name, msg)) def lvremove(vg_name, lv_name): args = ["lvremove"] + \ config_args + \ ["%s/%s" % (vg_name, lv_name)] - rc = iutil.execWithRedirect("lvm", args, - stdout = "/dev/tty5", - stderr = "/dev/tty5", - searchPath=1) - - if rc: - raise LVMError("lvremove failed for %s" % lv_name) + try: + lvm(args) + except LVMError as msg: + raise LVMError("lvremove failed for %s: %s" % (lv_name, msg)) def lvresize(vg_name, lv_name, size): args = ["lvresize"] + \ @@ -399,13 +388,10 @@ def lvresize(vg_name, lv_name, size): config_args + \ ["%s/%s" % (vg_name, lv_name)] - rc = iutil.execWithRedirect("lvm", args, - stdout = "/dev/tty5", - stderr = "/dev/tty5", - searchPath=1) - - if rc: - raise LVMError("lvresize failed for %s" % lv_name) + try: + lvm(args) + except LVMError as msg: + raise LVMError("lvresize failed for %s: %s" % (lv_name, msg)) def lvactivate(vg_name, lv_name): # see if lvchange accepts paths of the form 'mapper/$vg-$lv' @@ -413,23 +399,18 @@ def lvactivate(vg_name, lv_name): config_args + \ ["%s/%s" % (vg_name, lv_name)] - rc = iutil.execWithRedirect("lvm", args, - stdout = "/dev/tty5", - stderr = "/dev/tty5", - searchPath=1) - if rc: - raise LVMError("lvactivate failed for %s" % lv_name) + try: + lvm(args) + except LVMError as msg: + raise LVMError("lvactivate failed for %s: %s" % (lv_name, msg)) def lvdeactivate(vg_name, lv_name): args = ["lvchange", "-a", "n"] + \ config_args + \ ["%s/%s" % (vg_name, lv_name)] - rc = iutil.execWithRedirect("lvm", args, - stdout = "/dev/tty5", - stderr = "/dev/tty5", - searchPath=1) - - if rc: - raise LVMError("lvdeactivate failed for %s" % lv_name) + try: + lvm(args) + except LVMError as msg: + raise LVMError("lvdeactivate failed for %s: %s" % (lv_name, msg)) diff --git a/storage/devicelibs/mdraid.py b/storage/devicelibs/mdraid.py index b082c7b..73099c4 100644 --- a/storage/devicelibs/mdraid.py +++ b/storage/devicelibs/mdraid.py @@ -119,6 +119,21 @@ def get_raid_max_spares(raidlevel, nummembers): raise ValueError, "invalid raid level %d" % raidlevel +def mdadm(args): + rc = iutil.execWithRedirect("mdadm", args, + stdout = "/dev/tty5", + stderr = "/dev/tty5", + searchPath=1) + if not rc: + return + + try: + msg = open("/tmp/program.log").readlines()[-1].strip() + except Exception: + msg = "" + + raise MDRaidError(msg) + def mdcreate(device, level, disks, spares=0): argv = ["--create", device, "--run", "--level=%s" % level] raid_devs = len(disks) - spares @@ -127,27 +142,18 @@ def mdcreate(device, level, disks, spares=0): argv.append("--spare-devices=%d" % spares) argv.extend(disks) - rc = iutil.execWithRedirect("mdadm", - argv, - stderr = "/dev/tty5", - stdout = "/dev/tty5", - searchPath=1) - - if rc: - raise MDRaidError("mdcreate failed for %s" % device) - - # mdadm insists on starting the new array, so we have to stop it here - #self.mddeactivate(device) + try: + mdadm(argv) + except MDRaidError as msg: + raise MDRaidError("mdcreate failed for %s: %s" % (device, msg)) def mddestroy(device): - rc = iutil.execWithRedirect("mdadm", - ["--zero-superblock", device], - stderr = "/dev/tty5", - stdout = "/dev/tty5", - searchPath=1) + args = ["--zero-superblock", device] - if rc: - raise MDRaidError("mddestroy failed for %s" % device) + try: + mdadm(args) + except MDRaidError as msg: + raise MDRaidError("mddestroy failed for %s: %s" % (device, msg)) def mdadd(device, no_degraded=False): args = ["--incremental", "--quiet"] @@ -155,14 +161,10 @@ def mdadd(device, no_degraded=False): args.append("--no-degraded") args.append(device) - rc = iutil.execWithRedirect("mdadm", - args, - stderr = "/dev/tty5", - stdout = "/dev/tty5", - searchPath=1) - - if rc: - raise MDRaidError("mdadd failed for %s" % device) + try: + mdadm(args) + except MDRaidError as msg: + raise MDRaidError("mdadd failed for %s: %s" % (device, msg)) def mdactivate(device, members=[], super_minor=None, update_super_minor=False, uuid=None): @@ -181,29 +183,22 @@ def mdactivate(device, members=[], super_minor=None, update_super_minor=False, else: extra_args = [ ] - rc = iutil.execWithRedirect("mdadm", - ["--assemble", - device, - identifier, - "--run", - "--auto=md"] + extra_args + members, - stderr = "/dev/tty5", - stdout = "/dev/tty5", - searchPath=1) - - if rc: - raise MDRaidError("mdactivate failed for %s" % device) + args = ["--assemble", device, identifier, "--run", "--auto=md"] + args += extra_args + args += members + try: + mdadm(args) + except MDRaidError as msg: + raise MDRaidError("mdactivate failed for %s: %s" % (device, msg)) def mddeactivate(device): - rc = iutil.execWithRedirect("mdadm", - ["--stop", device], - stderr = "/dev/tty5", - stdout = "/dev/tty5", - searchPath=1) + args = ["--stop", device] - if rc: - raise MDRaidError("mddeactivate failed for %s" % device) + try: + mdadm(args) + except MDRaidError as msg: + raise MDRaidError("mddeactivate failed for %s: %s" % (device, msg)) def mdexamine(device): vars = iutil.execWithCapture("mdadm", -- 1.6.0.6 _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list