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