Skip to content

Commit

Permalink
Merge pull request #1259 from vojtechtrefny/3.10-devel_zdev
Browse files Browse the repository at this point in the history
consolidated s390 device configuration
  • Loading branch information
vojtechtrefny authored Oct 14, 2024
2 parents a8c6688 + 7208a0a commit 86b3df3
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 258 deletions.
63 changes: 10 additions & 53 deletions blivet/devices/disk.py
Original file line number Diff line number Diff line change
Expand Up @@ -498,7 +498,12 @@ def dracut_setup_args(self):
from ..zfcp import has_auto_lun_scan

# zFCP auto LUN scan needs only the device ID
if has_auto_lun_scan(self.hba_id):
# If the user explicitly over-specified with a full path configuration
# respect this choice and emit a full path specification nonetheless.
errorlevel = util.run_program(["lszdev", "zfcp-lun", "--configured",
"%s:%s:%s" % (self.hba_id, self.wwpn,
self.fcp_lun)])
if has_auto_lun_scan(self.hba_id) and errorlevel != 0:
dracut_args = set(["rd.zfcp=%s" % self.hba_id])
else:
dracut_args = set(["rd.zfcp=%s,%s,%s" % (self.hba_id, self.wwpn, self.fcp_lun,)])
Expand All @@ -525,67 +530,19 @@ def __init__(self, device, **kwargs):
:type format: :class:`~.formats.DeviceFormat` or a subclass of it
:keyword str wwn: the disk's WWN
:keyword busid: bus ID
:keyword opts: options
:type opts: dict with option name keys and option value values
"""
self.busid = kwargs.pop('busid')
self.opts = kwargs.pop('opts')
DiskDevice.__init__(self, device, **kwargs)

@property
def description(self):
return "DASD device %s" % self.busid

def get_opts(self):
return ["%s=%s" % (k, v) for k, v in self.opts.items() if v == '1']

def dracut_setup_args(self):
conf = "/etc/dasd.conf"
line = None
if os.path.isfile(conf):
f = open(conf)
# grab the first line that starts with our bus_id
for l in f.readlines():
if l.startswith(self.busid):
line = l.rstrip()
break

f.close()

# See if we got a line. If not, grab our get_opts
if not line:
line = self.busid
for devopt in self.get_opts():
line += " %s" % devopt

# Create a translation mapping from dasd.conf format to module format
translate = {'use_diag': 'diag',
'readonly': 'ro',
'erplog': 'erplog',
'failfast': 'failfast'}

# this is a really awkward way of determining if the
# feature found is actually desired (1, not 0), plus
# translating that feature into the actual kernel module
# value
opts = []
parts = line.split()
for chunk in parts[1:]:
try:
feat, val = chunk.split('=')
if int(val):
opts.append(translate[feat])
except (ValueError, KeyError):
# If we don't know what the feature is (feat not in translate
# or if we get a val that doesn't cleanly convert to an int
# we can't do anything with it.
log.warning("failed to parse dasd feature %s", chunk)

if opts:
return set(["rd.dasd=%s(%s)" % (self.busid,
":".join(opts))])
else:
return set(["rd.dasd=%s" % self.busid])
devspec = util.capture_output(["/lib/s390-tools/zdev-to-dasd_mod.dasd",
"persistent", self.busid]).strip()
# strip to remove trailing newline, which must not appear in zipl BLS
return set(["rd.dasd=%s" % devspec])


NVMeController = namedtuple("NVMeController", ["name", "serial", "nvme_ver", "id", "subsysnqn",
Expand Down
3 changes: 0 additions & 3 deletions blivet/populator/helpers/disk.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,9 +204,6 @@ def match(cls, data):
def _get_kwargs(self):
kwargs = super(DASDDevicePopulator, self)._get_kwargs()
kwargs["busid"] = udev.device_get_dasd_bus_id(self.data)
kwargs["opts"] = {}
for attr in ['readonly', 'use_diag', 'erplog', 'failfast']:
kwargs["opts"][attr] = udev.device_get_dasd_flag(self.data, attr)

log.info("%s is a dasd device", udev.device_get_name(self.data))
return kwargs
Expand Down
Loading

0 comments on commit 86b3df3

Please sign in to comment.