[PATCH 2/3] Fix up the z Panel in advanced storage. (#1024949)

Vratislav Podzimek vpodzime at redhat.com
Mon Jan 6 13:35:56 UTC 2014


> diff --git a/pyanaconda/ui/gui/spokes/filter.py b/pyanaconda/ui/gui/spokes/filter.py
> index 308f4b3..072cf65 100644
> --- a/pyanaconda/ui/gui/spokes/filter.py
> +++ b/pyanaconda/ui/gui/spokes/filter.py
> @@ -34,6 +34,7 @@ from pyanaconda.ui.gui.utils import enlightbox
>  from pyanaconda.ui.gui.spokes import NormalSpoke
>  from pyanaconda.ui.gui.spokes.advstorage.fcoe import FCoEDialog
>  from pyanaconda.ui.gui.spokes.advstorage.iscsi import ISCSIDialog
> +from pyanaconda.ui.gui.spokes.advstorage.zfcp import ZFCPDialog
>  from pyanaconda.ui.gui.spokes.lib.cart import SelectedDisksDialog
>  from pyanaconda.ui.gui.categories.storage import StorageCategory
>  
> @@ -43,7 +44,7 @@ DiskStoreRow = namedtuple("DiskStoreRow", ["visible", "selected", "mutable",
>                                             "name", "type", "model", "capacity",
>                                             "vendor", "interconnect", "serial",
>                                             "wwid", "paths", "port", "target",
> -                                           "lun", "ccw"])
> +                                           "lun", "ccw", "wwpn"])
>  
>  class FilterPage(object):
>      """A FilterPage is the logic behind one of the notebook tabs on the filter
> @@ -231,7 +232,7 @@ class MultipathPage(FilterPage):
>                            disk.name, "", disk.model, size_str(disk.size),
>                            disk.vendor, disk.bus, disk.serial,
>                            disk.wwid, "\n".join(paths), "", "",
> -                          "", ""])
> +                          "", "", ""])
>              if not disk.vendor in vendors:
>                  vendors.append(disk.vendor)
>  
> @@ -303,8 +304,20 @@ class OtherPage(FilterPage):
>          interconnects = []
>  
>          for disk in disks:
> +            paths = [d.name for d in disk.parents]
This may be a generator expression instead of a list comprehension.

>              selected = disk.name in selectedNames
>  
> +            store.append([True, selected, not disk.protected,
> +                          disk.name, "", disk.model, size_str(disk.size),
> +                          disk.vendor, disk.bus, disk.serial,
> +                          disk.wwid, "\n".join(paths), "", "",
> +                          "", "", ""])
> +            if not disk.vendor in vendors:
> +                vendors.append(disk.vendor)
> +
> +            if not disk.bus in interconnects:
> +                interconnects.append(disk.bus)
> +
>              if hasattr(disk, "node"):
>                  port = str(disk.node.port)
>                  lun = str(disk.node.tpgt)
> @@ -316,7 +329,7 @@ class OtherPage(FilterPage):
>                            disk.name, "", disk.model, size_str(disk.size),
>                            disk.vendor, disk.bus, disk.serial,
>                            self._long_identifier(disk), "", port, getattr(disk, "initiator", ""),
> -                          lun, ""])
> +                          lun, "", ""])
>  
>              if not disk.vendor in vendors:
>                  vendors.append(disk.vendor)
> @@ -383,19 +396,75 @@ class ZPage(FilterPage):
>          self.model = self.builder.get_object("zModel")
>          self.model.set_visible_func(self.visible_func)
>  
> +        self._ccwEntry = self.builder.get_object("zCCWEntry")
> +        self._wwpnEntry = self.builder.get_object("zWWPNEntry")
> +        self._lunEntry = self.builder.get_object("zLUNEntry")
> +
>          self._isS390 = arch.isS390()
>  
>      def ismember(self, device):
>          return isinstance(device, ZFCPDiskDevice) or isinstance(device, DASDDevice)
>  
> +    def clear(self):
> +        self._lunEntry.set_text("")
> +        self._ccwEntry.set_text("")
> +        self._wwpnEntry.set_text("")
> +
>      def setup(self, store, selectedNames, disks):
> +        """ Set up our Z-page, but only if we're running on s390x. """
>          if not self._isS390:
>              return
> +        else:
> +            ccws = []
> +            wwpns = []
> +            luns = []
> +
> +            self._combo = self.builder.get_object("zTypeCombo")
> +            self._combo.set_active(0)
> +            self._combo.emit("changed")
> +
> +            for disk in disks:
> +                paths = [d.name for d in disk.parents]
The same here.

> +                selected = disk.name in selectedNames
> +
> +                if getattr(disk, "type") == "zfcp":
> +                    # remember to store all of the zfcp-related junk so we can
> +                    # see it in the UI
> +                    if not disk.fcp_lun in luns:
> +                        luns.append(disk.fcp_lun)
> +                    if not disk.wwpn in wwpns:
> +                        wwpns.append(disk.wwpn)
> +                    if not disk.hba_id in ccws:
> +                        ccws.append(disk.hba_id)
> +
> +                    # now add it to our store
> +                    store.append([True, selected, not disk.protected,
> +                                  disk.name, "", disk.model, size_str(disk.size),
> +                                  disk.vendor, disk.bus, disk.serial, "", "\n".join(paths),
> +                                  "", "", disk.fcp_lun, disk.hba_id, disk.wwpn])
> +
> +
> +    def _filter_func(self, device):
> +        if not self.filterActive:
> +            return True
> +
> +        filterBy = self._combo.get_active()
> +
> +        if filterBy == 0:
> +            return True
> +        elif filterBy == 1:
> +            return self._ccwEntry.get_text() in device.hba_id
> +        elif filterBy == 2:
> +            return self._wwpnEntry.get_text() in device.wwpn
> +        elif filterBy == 3:
> +            return self._lunEntry.get_text() in device.fcp_lun
> +
> +        return False
>  
>      def visible_func(self, model, itr, *args):
>          obj = DiskStoreRow._make(model[itr])
>          device = self.storage.devicetree.getDeviceByName(obj.name, hidden=True)
> -        return self.ismember(device)
> +        return self.ismember(device) and self._filter_func(device)
>  
>  class FilterSpoke(NormalSpoke):
>      builderObjects = ["diskStore", "filterWindow",
> @@ -472,7 +541,8 @@ class FilterSpoke(NormalSpoke):
>          # these lists of disks, then call setup on each individual page.  This is
>          # because there could be page-specific setup to do that requires a complete
>          # view of all the disks on that page.
> -        for disk in itertools.ifilterfalse(isLocalDisk, self.disks):
> +        #for disk in itertools.ifilterfalse(isLocalDisk, self.disks):
Some leftover?

-- 
Vratislav Podzimek

Anaconda Rider | Red Hat, Inc. | Brno - Czech Republic



More information about the anaconda-patches mailing list