backups: do backup rotation ourselves instead of relying on zfs-auto-snapshot

This commit is contained in:
Franzi 2022-01-05 09:53:18 +01:00
parent b6eb12ed90
commit c9054a243a
Signed by: kunsi
GPG key ID: 12E3D2136B818350
7 changed files with 169 additions and 13 deletions

View file

@ -16,6 +16,11 @@ defaults = {
)
def get_my_clients(metadata):
my_clients = {}
retain_defaults = {
'daily': 14,
'weekly': 4,
'monthly': 6,
}
for rnode in repo.nodes:
if not rnode.has_bundle('backup-client') or rnode.metadata.get('backups/exclude_from_backups', False):
@ -26,6 +31,11 @@ def get_my_clients(metadata):
my_clients[rnode.name] = {
'user': rnode.metadata.get('backup-client/user-name'),
'retain': {
'daily': rnode.metadata.get('backups/retain/daily', retain_defaults['daily']),
'weekly': rnode.metadata.get('backups/retain/weekly', retain_defaults['weekly']),
'monthly': rnode.metadata.get('backups/retain/monthly', retain_defaults['monthly']),
},
}
return {
@ -97,15 +107,10 @@ def zfs_pool(metadata):
@metadata_reactor.provides(
'zfs/datasets',
'zfs/snapshots/retain_per_dataset',
'zfs/snapshots/snapshot_never',
)
def zfs_datasets_and_snapshots(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)
@ -115,13 +120,14 @@ def zfs_datasets_and_snapshots(metadata):
'compression': 'on',
}
zfs_retains[dataset] = retain_defaults.copy()
return {
'zfs': {
'datasets': zfs_datasets,
'snapshots': {
'retain_per_dataset': zfs_retains,
'snapshot_never': {
metadata.get('backup-server/zfs-base'),
},
},
},
}