[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