Skip to content
Snippets Groups Projects
Unverified Commit 5f930565 authored by Łukasz Plewa's avatar Łukasz Plewa Committed by GitHub
Browse files

Merge pull request #4882 from wlemkows/ndctl-align-63

test: add support for ndctl list v63
parents cd31d7ea 1e01b0ab
No related branches found
No related tags found
No related merge requests found
...@@ -58,7 +58,7 @@ class Ndctl: ...@@ -58,7 +58,7 @@ class Ndctl:
"""ndctl CLI handle""" """ndctl CLI handle"""
def __init__(self): def __init__(self):
self.version = self._get_ndctl_version() self.version = self._get_ndctl_version()
self.ndctl_list_output = self._get_ndctl_list_output() self.ndctl_list_output = self._get_ndctl_list_output('list')
def _get_ndctl_version(self): def _get_ndctl_version(self):
proc = sp.run(['ndctl', '--version'], stdout=sp.PIPE, stderr=sp.STDOUT) proc = sp.run(['ndctl', '--version'], stdout=sp.PIPE, stderr=sp.STDOUT)
...@@ -69,8 +69,8 @@ class Ndctl: ...@@ -69,8 +69,8 @@ class Ndctl:
version = proc.stdout.strip() version = proc.stdout.strip()
return version return version
def _get_ndctl_list_output(self): def _get_ndctl_list_output(self, *args):
proc = sp.run(['ndctl', 'list'], stdout=sp.PIPE, stderr=sp.STDOUT) proc = sp.run(['ndctl', *args], stdout=sp.PIPE, stderr=sp.STDOUT)
if proc.returncode != 0: if proc.returncode != 0:
raise futils.Fail('ndctl list failed:{}{}'.format(os.linesep, raise futils.Fail('ndctl list failed:{}{}'.format(os.linesep,
proc.stdout)) proc.stdout))
...@@ -85,7 +85,7 @@ class Ndctl: ...@@ -85,7 +85,7 @@ class Ndctl:
dev = None dev = None
devtypes = ('blockdev', 'chardev') devtypes = ('blockdev', 'chardev')
for d in self.ndctl_list_output: for d in self._get_ndctl_list_output('list'):
for dt in devtypes: for dt in devtypes:
if dt in d and os.path.join('/dev', d[dt]) == dev_path: if dt in d and os.path.join('/dev', d[dt]) == dev_path:
dev = d dev = d
...@@ -95,9 +95,39 @@ class Ndctl: ...@@ -95,9 +95,39 @@ class Ndctl:
.format(dev_path)) .format(dev_path))
return dev return dev
# for ndctl v63 we need to parse ndctl list in a different way than for v64
def _get_dev_info_63(self, dev_path):
dev = None
devtype = 'chardev'
daxreg = 'daxregion'
for d in self._get_ndctl_list_output('list', '-v'):
if daxreg in d:
devices = d[daxreg]['devices']
for device in devices:
if devtype in device and \
os.path.join('/dev', device[devtype]) == dev_path:
# only params from daxreg are intrested at this point,
# other values are read by _get_dev_info() earlier
dev = d[daxreg]
if not dev:
raise futils.Fail('ndctl does not recognize the device: "{}"'
.format(dev_path))
return dev
def _get_dev_param(self, dev_path, param): def _get_dev_param(self, dev_path, param):
p = None
dev = self._get_dev_info(dev_path) dev = self._get_dev_info(dev_path)
return dev[param]
try:
p = dev[param]
except KeyError:
dev = self._get_dev_info_63(dev_path)
p = dev[param]
return p
def get_dev_size(self, dev_path): def get_dev_size(self, dev_path):
return int(self._get_dev_param(dev_path, 'size')) return int(self._get_dev_param(dev_path, 'size'))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment