[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