Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

consolidated s390 device configuration #1162

Closed
wants to merge 7 commits into from
63 changes: 10 additions & 53 deletions blivet/devices/disk.py
Original file line number Diff line number Diff line change
Expand Up @@ -496,7 +496,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 @@ -523,67 +528,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])


class NVDIMMNamespaceDevice(DiskDevice):
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 @@ -202,9 +202,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
Loading