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), ))