from bundlewrap.metadata import atomic defaults = { 'apt': { 'packages': { 'samba': {}, 'samba-vfs-modules': {}, } } } @metadata_reactor.provides( 'firewall/port_rules', ) def firewall(metadata): return { 'firewall': { 'port_rules': { '137/udp': atomic(metadata.get('samba/restrict-to', set())), '138/udp': atomic(metadata.get('samba/restrict-to', set())), '139/tcp': atomic(metadata.get('samba/restrict-to', set())), '445/tcp': atomic(metadata.get('samba/restrict-to', set())), }, }, } @metadata_reactor.provides( 'zfs/datasets', ) def timemachine_zfs(metadata): shares = metadata.get('samba/timemachine-shares', set()) if not shares: return {} assert node.has_bundle('zfs'), f'{node.name}: time machine backups require zfs' datasets = { 'tank/timemachine': {}, } for share_name in shares: datasets[f'tank/timemachine/{share_name}'] = { 'mountpoint': f'/srv/timemachine/{share_name}', } return { 'zfs': { 'datasets': datasets, }, }