filesystem: let ZPool be more like Mount

This commit is contained in:
Dan Bungert 2023-07-18 10:16:04 -06:00
parent 8e084673c5
commit 203b9485a4
3 changed files with 45 additions and 20 deletions

View File

@ -1100,7 +1100,10 @@ class ZPool:
return self.pool
@property
def mount(self):
def path(self):
if self.fs_properties is not None:
if not yaml.safe_load(self.fs_properties.get('canmount', 'off')):
return None
return self.mountpoint

View File

@ -1299,30 +1299,52 @@ class TestZPool(SubiTestCase):
def test_zpool_from_action(self):
m = make_model()
d = make_disk(m)
d1 = make_disk(m)
d2 = make_disk(m)
fake_up_blockdata(m)
blockdevs = m._probe_data['blockdev']
config = [
dict(type='disk', id=d.id, path=d.path, ptable=d.ptable,
serial=d.serial, info={d.path: blockdevs[d.path]}),
dict(type='zpool', id='zpool-1', vdevs=[d.id], pool='p1',
dict(type='disk', id=d1.id, path=d1.path, ptable=d1.ptable,
serial=d1.serial, info={d1.path: blockdevs[d1.path]}),
dict(type='disk', id=d2.id, path=d2.path, ptable=d2.ptable,
serial=d2.serial, info={d2.path: blockdevs[d2.path]}),
dict(type='zpool', id='zpool-1', vdevs=[d1.id], pool='p1',
mountpoint='/'),
dict(type='zpool', id='zpool-2', vdevs=[d2.id], pool='p2',
mountpoint='/srv', fs_properties=dict(canmount='off')),
dict(type='zfs', id='zfs-1', volume='/ROOT', pool='zpool-1'),
dict(type='zfs', id='zfs-2', volume='/SRV/srv', pool='zpool-2',
properties=dict(mountpoint='/srv', canmount='on')),
]
objs = m._actions_from_config(
config, blockdevs=None, is_probe_data=False)
actual_disk, zpool, zfs = objs
self.assertTrue(isinstance(zpool, ZPool))
self.assertEqual('zpool-1', zpool.id)
self.assertEqual([actual_disk], zpool.vdevs)
self.assertEqual('p1', zpool.pool)
self.assertEqual('/', zpool.mountpoint)
self.assertEqual([zfs], zpool._zfses)
actual_d1, actual_d2, zp1, zp2, zfs_zp1, zfs_zp2 = objs
self.assertTrue(isinstance(zp1, ZPool))
self.assertEqual('zpool-1', zp1.id)
self.assertEqual([actual_d1], zp1.vdevs)
self.assertEqual('p1', zp1.pool)
self.assertEqual('/', zp1.mountpoint)
self.assertEqual('/', zp1.path)
self.assertEqual([zfs_zp1], zp1._zfses)
self.assertTrue(isinstance(zfs, ZFS))
self.assertEqual('zfs-1', zfs.id)
self.assertEqual(zpool, zfs.pool)
self.assertEqual('/ROOT', zfs.volume)
self.assertTrue(isinstance(zp2, ZPool))
self.assertEqual('zpool-2', zp2.id)
self.assertEqual([actual_d2], zp2.vdevs)
self.assertEqual('p2', zp2.pool)
self.assertEqual('/srv', zp2.mountpoint)
self.assertEqual(None, zp2.path)
self.assertEqual([zfs_zp2], zp2._zfses)
self.assertTrue(isinstance(zfs_zp1, ZFS))
self.assertEqual('zfs-1', zfs_zp1.id)
self.assertEqual(zp1, zfs_zp1.pool)
self.assertEqual('/ROOT', zfs_zp1.volume)
self.assertTrue(isinstance(zfs_zp2, ZFS))
self.assertEqual('zfs-2', zfs_zp2.id)
self.assertEqual(zp2, zfs_zp2.pool)
self.assertEqual('/SRV/srv', zfs_zp2.volume)
self.assertEqual('/srv', zfs_zp2.path)
class TestRootfs(SubiTestCase):

View File

@ -483,9 +483,9 @@ class TestGuided(IsolatedAsyncioTestCase):
self.assertFalse(d1p2.preserve)
self.assertFalse(d1p3.preserve)
[rpool] = self.model._all(type='zpool', pool='rpool')
self.assertEqual('/', rpool.mount)
self.assertEqual('/', rpool.path)
[bpool] = self.model._all(type='zpool', pool='bpool')
self.assertEqual('/boot', bpool.mount)
self.assertEqual('/boot', bpool.path)
async def test_guided_zfs_BIOS_MSDOS(self):
await self._guided_setup(Bootloader.BIOS, 'msdos')
@ -499,9 +499,9 @@ class TestGuided(IsolatedAsyncioTestCase):
self.assertFalse(d1p1.preserve)
self.assertFalse(d1p2.preserve)
[rpool] = self.model._all(type='zpool', pool='rpool')
self.assertEqual('/', rpool.mount)
self.assertEqual('/', rpool.path)
[bpool] = self.model._all(type='zpool', pool='bpool')
self.assertEqual('/boot', bpool.mount)
self.assertEqual('/boot', bpool.path)
async def _guided_side_by_side(self, bl, ptable):
await self._guided_setup(bl, ptable, storage_version=2)