2021-12-29 12:23:07 +00:00
|
|
|
from bundlewrap.exceptions import BundleError
|
|
|
|
from bundlewrap.utils.text import bold, green
|
|
|
|
from bundlewrap.utils.ui import io
|
|
|
|
|
|
|
|
# https://github.com/bundlewrap/bundlewrap/commit/a261304b583b78a16ad44def5508cbc27d5f1c3f
|
|
|
|
# https://github.com/bundlewrap/bundlewrap/commit/76647590d684446f146cedb89518458f18dd229e
|
|
|
|
|
|
|
|
def test_node(repo, node, **kwargs):
|
|
|
|
if not node.has_bundle('zfs'):
|
|
|
|
return
|
|
|
|
|
|
|
|
zfs_pools = set(node.metadata.get('zfs/pools', {}).keys())
|
|
|
|
zfs_mountpoints = {}
|
|
|
|
|
|
|
|
for name, attrs in node.metadata.get('zfs/datasets', {}).items():
|
|
|
|
if attrs.get('mountpoint'):
|
|
|
|
if attrs['mountpoint'] in zfs_mountpoints:
|
|
|
|
raise BundleError('{n} zfs_dataset:{ds} mountpoint is already taken by {o}'.format(
|
|
|
|
n=node.name,
|
|
|
|
ds=name,
|
|
|
|
o=zfs_mountpoints[attrs['mountpoint']],
|
|
|
|
))
|
|
|
|
|
|
|
|
zfs_mountpoints[attrs['mountpoint']] = name
|
|
|
|
|
|
|
|
pool_name = name.split('/', 1)[0]
|
|
|
|
|
2022-02-18 18:55:35 +00:00
|
|
|
if pool_name not in zfs_pools and node.os != 'arch':
|
2021-12-29 12:23:07 +00:00
|
|
|
raise BundleError('{n} zfs_dataset:{ds} wants zfs_pool:{pool}, which wasn\'t found'.format(
|
|
|
|
n=node.name,
|
|
|
|
ds=name,
|
|
|
|
pool=pool_name,
|
|
|
|
))
|
|
|
|
|
|
|
|
io.stdout('{x} {node} zfs metadata is consistent'.format(
|
|
|
|
x=green("✓"),
|
|
|
|
node=bold(node.name),
|
|
|
|
))
|