[blivet][master/rhel7-branch] Add two functions to enable manual addition of ECKD DASDs. (#1070115)
Samantha N. Bueno
sbueno+anaconda at redhat.com
Thu Aug 28 19:18:25 UTC 2014
This just adds a couple of functions which aid in manually adding DASDs.
sanitize_dasd_dev_input takes a device number as a string and verifies
whether its format is an appropriate match against DASD device number
formats.
online_dasd takes a device number as a string and will remove the device
from the ignore list and attempt to bring it online.
Resolves: rhbz#1070115
---
blivet/devicelibs/dasd.py | 44 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
diff --git a/blivet/devicelibs/dasd.py b/blivet/devicelibs/dasd.py
index 5beb11d..4cbdaf3 100644
--- a/blivet/devicelibs/dasd.py
+++ b/blivet/devicelibs/dasd.py
@@ -20,6 +20,7 @@
#
import os
+import string
from blivet.errors import DasdFormatError
from blivet.devices import deviceNameToDiskByPath
from blivet import util
@@ -109,6 +110,49 @@ def dasd_needs_format(dasd):
return False
+def sanitize_dasd_dev_input(dev):
+ """ Given a user-supplied device number, make sure the input is sane, and
+ raise an error if it is not.
+ """
+ if dev is None or dev == "":
+ raise ValueError("You have not specified a device number or the number is invalid")
+ dev = dev.lower()
+ bus = dev[:string.rfind(dev, ".") + 1]
+ dev = dev[string.rfind(dev, ".") + 1:]
+ dev = "0" * (4 - len(dev)) + dev
+ if not len(bus):
+ return "0.0." + dev
+ else:
+ return bus + dev
+
+def online_dasd(dev):
+ """ Given a device number of format 0.0.abcd, switch the device to be
+ online.
+ """
+ online = "/sys/bus/ccw/drivers/dasd-eckd/%s/online" % (dev)
+
+ if not os.path.exists(online):
+ log.info("Freeing DASD device %s" % (dev,))
+ util.run_program(["dasd_cio_free", "-d", dev])
+
+ if not os.path.exists(online):
+ raise ValueError("DASD device %s not found, not even in device ignore list."
+ % (dev))
+
+ try:
+ f = open(online, "r")
+ devonline = f.readline().strip()
+ f.close()
+ if devonline == "1":
+ raise ValueError("Device %s is already online." % (dev))
+ else:
+ f = open(online, "w")
+ log.debug("echo %s > %s" % ("1", online))
+ f.write("%s\n" % ("1"))
+ f.close()
+ except IOError as e:
+ raise ValueError("Could not set DASD device %(dev)s online (%(e)s).") \
+ % {'devnum': dev, 'e': e}
def write_dasd_conf(disks, root):
""" Write /etc/dasd.conf to target system for all DASD devices
--
1.9.3
More information about the anaconda-patches
mailing list