Skip to content

Commit

Permalink
find_devs_with_openbsd: ensure we return the last entry (#1149)
Browse files Browse the repository at this point in the history
`sysctl -n hw.disknames` returns a trailing `\n`. We need to clean
this up. In addition, the criteria matching system is a source of
problem because:

- we don't have a way to look up the label of the partition
- we've got situation where an ISO image can be exposed through a virtio
  block device.

So we just totally ignore the value of `criteria`. We end-up with a
slightly longer loop of mount-retry. But this way we're sure we don't
miss a configuration disk.

Tested on Kubvirt with the help of Brady Pratt @jbpratt.
  • Loading branch information
goneri authored Dec 13, 2021
1 parent e963426 commit f4692c5
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 8 deletions.
8 changes: 1 addition & 7 deletions cloudinit/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -1211,7 +1211,7 @@ def find_devs_with_openbsd(criteria=None, oformat='device',
tag=None, no_cache=False, path=None):
out, _err = subp.subp(['sysctl', '-n', 'hw.disknames'], rcs=[0])
devlist = []
for entry in out.split(','):
for entry in out.rstrip().split(','):
if not entry.endswith(':'):
# ffs partition with a serial, not a config-drive
continue
Expand All @@ -1220,12 +1220,6 @@ def find_devs_with_openbsd(criteria=None, oformat='device',
devlist.append(entry[:-1] + 'a')
if not entry.startswith('cd'):
devlist.append(entry[:-1] + 'i')
if criteria == "TYPE=iso9660":
devlist = [i for i in devlist if i.startswith('cd')]
elif criteria in ["LABEL=CONFIG-2", "TYPE=vfat"]:
devlist = [i for i in devlist if not i.startswith('cd')]
elif criteria:
LOG.debug("Unexpected criteria: %s", criteria)
return ['/dev/' + i for i in devlist]


Expand Down
2 changes: 1 addition & 1 deletion tests/unittests/test_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -2336,7 +2336,7 @@ def test_find_devs_with_openbsd(self, m_subp):
def test_find_devs_with_openbsd_with_criteria(self, m_subp):
m_subp.return_value = ('cd0:,sd0:630d98d32b5d3759,sd1:,fd0:', '')
devlist = util.find_devs_with_openbsd(criteria="TYPE=iso9660")
assert devlist == ['/dev/cd0a']
assert devlist == ['/dev/cd0a', '/dev/sd1a', '/dev/sd1i']

# lp: #1841466
devlist = util.find_devs_with_openbsd(criteria="LABEL_FATBOOT=A_LABEL")
Expand Down

0 comments on commit f4692c5

Please sign in to comment.