defaults = { 'openssh': { 'allowed_users': { # Usernames for backup clients always start with 'c-' 'c-*', }, }, } @metadata_reactor.provides( 'backup-server/clients', ) def get_my_clients(metadata): my_clients = {} for rnode in repo.nodes: if not rnode.has_bundle('backup-client') or rnode.metadata.get('backups/exclude_from_backups', False): continue my_clients[rnode.name] = { 'user': rnode.metadata.get('backup-client/user-name'), } return { 'backup-server': { 'clients': my_clients, }, } @metadata_reactor.provides( 'zfs/datasets', 'zfs/snapshots/retain_per_dataset', ) def zfs(metadata): zfs_datasets = {} zfs_retains = {} retain_defaults = { 'weekly': 4, 'monthly': 6, } for client in metadata.get('backup-server/clients', {}).keys(): dataset = '{}/{}'.format(metadata.get('backup-server/zfs-base'), client) zfs_datasets[dataset] = { 'mountpoint': '/srv/backups/{}'.format(client), 'compression': 'on', } zfs_retains[dataset] = retain_defaults.copy() return { 'zfs': { 'datasets': zfs_datasets, 'snapshots': { 'retain_per_dataset': zfs_retains, }, }, }