hooks: test zfs metadata consistency

This commit is contained in:
Franzi 2021-12-29 13:23:07 +01:00
parent 0b4f0e142f
commit 390f18a3a4
Signed by: kunsi
GPG key ID: 12E3D2136B818350
3 changed files with 55 additions and 1 deletions

View file

@ -0,0 +1,38 @@
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]
if pool_name not in zfs_pools:
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),
))