[anaconda] Make anaconda changes necessary for libblockdev s390 plugin.

Samantha N. Bueno sbueno+anaconda at redhat.com
Mon May 18 19:10:42 UTC 2015


---
 pyanaconda/anaconda.py                      | 10 ++++++++++
 pyanaconda/ui/gui/spokes/advstorage/dasd.py |  9 +++++----
 pyanaconda/ui/gui/spokes/advstorage/zfcp.py | 12 +++++++-----
 pyanaconda/ui/gui/spokes/lib/dasdfmt.py     | 11 +++++------
 pyanaconda/ui/gui/spokes/storage.py         | 12 ++++++------
 pyanaconda/ui/tui/spokes/storage.py         | 17 +++++++++--------
 6 files changed, 42 insertions(+), 29 deletions(-)

diff --git a/pyanaconda/anaconda.py b/pyanaconda/anaconda.py
index cb4138d..896aae7 100644
--- a/pyanaconda/anaconda.py
+++ b/pyanaconda/anaconda.py
@@ -167,11 +167,21 @@ class Anaconda(object):
     def storage(self):
         if not self._storage:
             import blivet
+            import blivet.arch
+            from gi.repository import BlockDev as blockdev
             self._storage = blivet.Blivet(ksdata=self.ksdata)
 
             if self.instClass.defaultFS:
                 self._storage.setDefaultFSType(self.instClass.defaultFS)
 
+            if blivet.arch.isS390():
+                # want to make sure s390 plugin is loaded
+                if "s390" not in blockdev.get_available_plugin_names():
+                    plugin = blockdev.PluginSpec()
+                    plugin.name = blockdev.Plugin.S390
+                    plugin.so_name = None
+                    blockdev.reinit([plugin], reload=False)
+
         return self._storage
 
     def dumpState(self):
diff --git a/pyanaconda/ui/gui/spokes/advstorage/dasd.py b/pyanaconda/ui/gui/spokes/advstorage/dasd.py
index 88e1a01..61fe5e5 100644
--- a/pyanaconda/ui/gui/spokes/advstorage/dasd.py
+++ b/pyanaconda/ui/gui/spokes/advstorage/dasd.py
@@ -21,6 +21,7 @@
 
 from pyanaconda.ui.gui import GUIObject
 from pyanaconda.ui.gui.utils import gtk_action_nowait
+from gi.repository import BlockDev as blockdev
 
 from blivet.devicelibs.dasd import sanitize_dasd_dev_input, online_dasd
 
@@ -83,7 +84,7 @@ class DASDDialog(GUIObject):
         self._conditionNotebook.set_current_page(1)
 
         try:
-            device = sanitize_dasd_dev_input(self._deviceEntry.get_text())
+            device = blockdev.s390.sanitize_dev_input(self._deviceEntry.get_text())
         except ValueError as e:
             _config_error = str(e)
             self.builder.get_object("deviceErrorLabel").set_text(_config_error)
@@ -126,8 +127,8 @@ class DASDDialog(GUIObject):
         """
         # attempt to add the device
         try:
-            online_dasd(device)
+            blockdev.s390.dasd_online(device)
             self._update_devicetree = True
-        except ValueError as e:
-            self._discoveryError = str(e)
+        except blockdev.S390Error as err:
+            self._discoveryError = str(err)
             return
diff --git a/pyanaconda/ui/gui/spokes/advstorage/zfcp.py b/pyanaconda/ui/gui/spokes/advstorage/zfcp.py
index 0674b1f..3dfc9a5 100644
--- a/pyanaconda/ui/gui/spokes/advstorage/zfcp.py
+++ b/pyanaconda/ui/gui/spokes/advstorage/zfcp.py
@@ -21,6 +21,8 @@
 
 from pyanaconda.ui.gui import GUIObject
 from pyanaconda.ui.gui.utils import gtk_action_nowait
+from gi.repository import BlockDev as blockdev
+from gi.repository import GLib
 
 from blivet.zfcp import ZFCPDevice
 
@@ -96,11 +98,11 @@ class ZFCPDialog(GUIObject):
         # below really, really is ugly and needs to be re-factored, but this
         # should give a good base idea as far as expected behavior should go
         try:
-            device = dev.sanitizeDeviceInput(self._deviceEntry.get_text())
-            wwpn = dev.sanitizeWWPNInput(self._wwpnEntry.get_text())
-            lun = dev.sanitizeFCPLInput(self._lunEntry.get_text())
-        except ValueError as e:
-            _config_error = str(e)
+            device = blockdev.s390.sanitize_dev_input(self._deviceEntry.get_text())
+            wwpn = blockdev.s390.zfcp_sanitize_wwpn_input(self._wwpnEntry.get_text())
+            lun = blockdev.s390.zfcp_sanitize_lun_input(self._lunEntry.get_text())
+        except blockdev.S390Error as err:
+            _config_error = str(err)
             self.builder.get_object("deviceErrorLabel").set_text(_config_error)
             self._conditionNotebook.set_current_page(2)
 
diff --git a/pyanaconda/ui/gui/spokes/lib/dasdfmt.py b/pyanaconda/ui/gui/spokes/lib/dasdfmt.py
index 1b94705..4a5c789 100644
--- a/pyanaconda/ui/gui/spokes/lib/dasdfmt.py
+++ b/pyanaconda/ui/gui/spokes/lib/dasdfmt.py
@@ -27,8 +27,7 @@ from pyanaconda import constants
 from pyanaconda.i18n import _
 import threading
 
-from blivet.devicelibs.dasd import format_dasd
-from blivet.errors import DasdFormatError
+from gi.repository import BlockDev as blockdev
 
 import logging
 log = logging.getLogger("anaconda")
@@ -55,7 +54,7 @@ class DasdFormatDialog(GUIObject):
         self._hub_label = self.builder.get_object("returnToHubLabel1")
 
         if len(self.to_format) > 0:
-            self._unformatted_label.set_text("\n".join("/dev/" + d for d in to_format))
+            self._unformatted_label.set_text("\n".join("/dev/" + d.name for d in to_format))
         else:
             self._unformatted_label.set_text("")
 
@@ -89,9 +88,9 @@ class DasdFormatDialog(GUIObject):
         """ Loop through our disks and run dasdfmt against them. """
         for disk in self.to_format:
             try:
-                gtk_call_once(self._formatting_label.set_text, _("Formatting /dev/%s. This may take a moment.") % disk)
-                format_dasd(disk)
-            except DasdFormatError as err:
+                gtk_call_once(self._formatting_label.set_text, _("Formatting /dev/%s. This may take a moment.") % disk.name)
+                blockdev.s390.format_dasd(disk.name)
+            except blockdev.S390Error as err:
                 # Log errors if formatting fails, but don't halt the installer
                 log.error(str(err))
                 continue
diff --git a/pyanaconda/ui/gui/spokes/storage.py b/pyanaconda/ui/gui/spokes/storage.py
index 3cba326..8e4e841 100644
--- a/pyanaconda/ui/gui/spokes/storage.py
+++ b/pyanaconda/ui/gui/spokes/storage.py
@@ -40,6 +40,7 @@
 """
 
 from gi.repository import Gdk, GLib, AnacondaWidgets
+from gi.repository import BlockDev as blockdev
 
 from pyanaconda.ui.communication import hubQ
 from pyanaconda.ui.lib.disks import getDisks, isLocalDisk, applyDiskSelection
@@ -59,9 +60,8 @@ from blivet import arch
 from blivet import autopart
 from blivet.size import Size
 from blivet.devices import MultipathDevice, ZFCPDiskDevice
-from blivet.errors import StorageError, DasdFormatError
+from blivet.errors import StorageError
 from blivet.platform import platform
-from blivet.devicelibs.dasd import make_unformatted_dasd_list, format_dasd
 from pyanaconda.threads import threadMgr, AnacondaThread
 from pyanaconda.product import productName
 from pyanaconda.flags import flags
@@ -664,7 +664,7 @@ class StorageSpoke(NormalSpoke, StorageChecker):
         # actions on storage devices
         threadMgr.wait(constants.THREAD_STORAGE)
 
-        to_format = make_unformatted_dasd_list(d.name for d in getDisks(self.storage.devicetree))
+        to_format = self.storage.devicetree.make_unformatted_dasd_list(d for d in getDisks(self.storage.devicetree))
         if not to_format:
             # nothing to do here; bail
             return
@@ -672,8 +672,8 @@ class StorageSpoke(NormalSpoke, StorageChecker):
         hubQ.send_message(self.__class__.__name__, _("Formatting DASDs"))
         for disk in to_format:
             try:
-                format_dasd(disk)
-            except DasdFormatError as err:
+                blockdev.s390.dasd_format(disk)
+            except blockdev.S390Error as err:
                 # Log errors if formatting fails, but don't halt the installer
                 log.error(str(err))
                 continue
@@ -774,7 +774,7 @@ class StorageSpoke(NormalSpoke, StorageChecker):
 
         if arch.isS390():
             # check for unformatted DASDs and launch dasdfmt if any discovered
-            dasds = make_unformatted_dasd_list(self.selected_disks)
+            dasds = self.storage.devicetree.make_unformatted_dasd_list(disks)
             if len(dasds) > 0:
                 # We want to apply current selection before running dasdfmt to
                 # prevent this information from being lost afterward
diff --git a/pyanaconda/ui/tui/spokes/storage.py b/pyanaconda/ui/tui/spokes/storage.py
index 1c7b600..210a8df 100644
--- a/pyanaconda/ui/tui/spokes/storage.py
+++ b/pyanaconda/ui/tui/spokes/storage.py
@@ -31,9 +31,9 @@ from pyanaconda.storage_utils import AUTOPART_CHOICES, sanity_check, SanityError
 
 from blivet import arch
 from blivet.size import Size
-from blivet.errors import StorageError, DasdFormatError
+from blivet.errors import StorageError
 from blivet.devices import DASDDevice, FcoeDiskDevice, iScsiDiskDevice, MultipathDevice, ZFCPDiskDevice
-from blivet.devicelibs.dasd import format_dasd, make_unformatted_dasd_list
+from gi.repository import BlockDev as blockdev
 from pyanaconda.flags import flags
 from pyanaconda.kickstart import doKickstartStorage, resetCustomStorageData
 from pyanaconda.threads import threadMgr, AnacondaThread
@@ -89,7 +89,7 @@ class StorageSpoke(NormalTUISpoke):
             # dasds, automatically format them. pass in storage.devicetree here
             # instead of storage.disks since mediaPresent is checked on disks;
             # a dasd needing dasdfmt will fail this media check though
-            to_format = make_unformatted_dasd_list(d.name for d in getDisks(self.storage.devicetree))
+            to_format = storage.devicetree.make_unformatted_dasd_list(getDisks(self.storage.devicetree))
             if to_format:
                 self.run_dasdfmt(to_format)
 
@@ -276,7 +276,8 @@ class StorageSpoke(NormalTUISpoke):
                     # if we're on s390x, since they need to be formatted before we
                     # can use them.
                     if arch.isS390():
-                        to_format = make_unformatted_dasd_list(self.selected_disks)
+                        _disks = [d for d in self.disks if d.name in self.selected_disks]
+                        to_format = self.storage.devicetree.make_unformatted_dasd_list(_disks)
                         if to_format:
                             self.run_dasdfmt(to_format)
                             return None
@@ -308,7 +309,7 @@ class StorageSpoke(NormalTUISpoke):
 
             warntext = _("Warning: All storage changes made using the installer will be lost when you choose to format.\n\nProceed to run dasdfmt?\n")
 
-            displaytext = summary + "\n".join("/dev/" + d for d in to_format) + "\n" + warntext
+            displaytext = summary + "\n".join("/dev/" + d.name for d in to_format) + "\n" + warntext
 
             # now show actual prompt; note -- in cmdline mode, auto-answer for
             # this is 'no', so unformatted DASDs will remain so unless zerombr
@@ -321,9 +322,9 @@ class StorageSpoke(NormalTUISpoke):
 
         for disk in to_format:
             try:
-                print(_("Formatting /dev/%s. This may take a moment.") % disk)
-                format_dasd(disk)
-            except DasdFormatError as err:
+                print(_("Formatting /dev/%s. This may take a moment.") % disk.name)
+                blockdev.s390_dasd_format(disk.name)
+            except blockdev.S390Error as err:
                 # Log errors if formatting fails, but don't halt the installer
                 log.error(str(err))
                 continue
-- 
1.9.3



More information about the anaconda-patches mailing list