Skip to content

Commit

Permalink
Merge pull request ceph#60928 from adk3798/fix-nvme-loop-parsing
Browse files Browse the repository at this point in the history
qa/tasks/nvme_loop: update task to work with new nvme list format

Reviewed-by: Laura Flores <[email protected]>
  • Loading branch information
adk3798 authored Dec 10, 2024
2 parents 41ebce3 + ce48761 commit 00bae68
Showing 1 changed file with 105 additions and 6 deletions.
111 changes: 105 additions & 6 deletions qa/tasks/nvme_loop.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ def task(ctx, config):
remote.run(args=['lsblk'], stdout=StringIO())
p = remote.run(args=['sudo', 'nvme', 'list', '-o', 'json'], stdout=StringIO())
new_devs = []
# `nvme list -o json` will return the following output:
# `nvme list -o json` will return one of the following output:
'''{
"Devices" : [
{
Expand All @@ -91,13 +91,112 @@ def task(ctx, config):
}
]
}'''
'''{
"Devices":[
{
"HostNQN":"nqn.2014-08.org.nvmexpress:uuid:00000000-0000-0000-0000-0cc47ada6ba4",
"HostID":"898a0e10-da2d-4a42-8017-d9c445089d0c",
"Subsystems":[
{
"Subsystem":"nvme-subsys0",
"SubsystemNQN":"nqn.2014.08.org.nvmexpress:80868086CVFT623300LN400BGN INTEL SSDPEDMD400G4",
"Controllers":[
{
"Controller":"nvme0",
"Cntlid":"0",
"SerialNumber":"CVFT623300LN400BGN",
"ModelNumber":"INTEL SSDPEDMD400G4",
"Firmware":"8DV101H0",
"Transport":"pcie",
"Address":"0000:02:00.0",
"Slot":"2",
"Namespaces":[
{
"NameSpace":"nvme0n1",
"Generic":"ng0n1",
"NSID":1,
"UsedBytes":400088457216,
"MaximumLBA":781422768,
"PhysicalSize":400088457216,
"SectorSize":512
}
],
"Paths":[
]
}
],
"Namespaces":[
]
}
]
}
]
}
'''
'''{
"Devices":[
{
"HostNQN":"nqn.2014-08.org.nvmexpress:uuid:00000000-0000-0000-0000-0cc47ada6ba4",
"HostID":"898a0e10-da2d-4a42-8017-d9c445089d0c",
"Subsystems":[
{
"Subsystem":"nvme-subsys0",
"SubsystemNQN":"nqn.2014.08.org.nvmexpress:80868086CVFT534400C2400BGN INTEL SSDPEDMD400G4",
"Controllers":[
{
"Controller":"nvme0",
"Cntlid":"0",
"SerialNumber":"CVFT534400C2400BGN",
"ModelNumber":"INTEL SSDPEDMD400G4",
"Firmware":"8DV101H0",
"Transport":"pcie",
"Address":"0000:02:00.0",
"Slot":"2",
"Namespaces":[
{
"NameSpace":"nvme0n1",
"Generic":"ng0n1",
"NSID":1,
"UsedBytes":400088457216,
"MaximumLBA":781422768,
"PhysicalSize":400088457216,
"SectorSize":512
}
],
"Paths":[
]
}
],
"Namespaces":[
]
}
]
}
]
}
'''
nvme_list = json.loads(p.stdout.getvalue())
for device in nvme_list['Devices']:
dev = device['DevicePath']
vendor = device['ModelNumber']
if dev.startswith('/dev/') and vendor == 'Linux':
new_devs.append(dev)
bluestore_zap(remote, dev)
try:
# first try format 1 / older format
dev = device['DevicePath']
vendor = device['ModelNumber']
if dev.startswith('/dev/') and vendor == 'Linux':
new_devs.append(dev)
bluestore_zap(remote, dev)
except KeyError:
for subsystem in device['Subsystems']:
# format 2
if 'Namespaces' in subsystem and subsystem['Namespaces']:
dev = '/dev/' + subsystem['Namespaces'][0]['NameSpace']
# try format 3 last
else:
dev = '/dev/' + subsystem['Controllers'][0]['Namespaces'][0]['NameSpace']
# vendor is the same for format 2 and 3
vendor = subsystem['Controllers'][0]['ModelNumber']
if vendor == 'Linux':
new_devs.append(dev)
bluestore_zap(remote, dev)
log.info(f'new_devs {new_devs}')
assert len(new_devs) <= len(devs)
if len(new_devs) == len(devs):
Expand Down

0 comments on commit 00bae68

Please sign in to comment.