bundles/backup-server: improve
This commit is contained in:
parent
c905b7dc13
commit
a15740c899
2 changed files with 22 additions and 46 deletions
|
@ -15,16 +15,15 @@ for line in check_output('LC_ALL=C zfs list -H -t snapshot -o name', shell=True)
|
||||||
line = line.decode('UTF-8')
|
line = line.decode('UTF-8')
|
||||||
|
|
||||||
if line.startswith('{}/'.format(server_settings['zfs-base'])):
|
if line.startswith('{}/'.format(server_settings['zfs-base'])):
|
||||||
dataset, snapname = line.split('@', 1)
|
try:
|
||||||
|
dataset, snapname = line.split('@', 1)
|
||||||
|
|
||||||
dataset = dataset.split('/')[-1]
|
dataset = dataset.split('/')[-1]
|
||||||
ts, bucket = snapname.split('-', 1)
|
ts, bucket = snapname.split('-', 1)
|
||||||
|
|
||||||
if not ts.isdigit():
|
snapshots[dataset].add(int(ts))
|
||||||
# garbage, ignore
|
except Exception as e:
|
||||||
continue
|
print(f"Exception while parsing snapshot name {line!r}: {e!r}")
|
||||||
|
|
||||||
snapshots[dataset].add(int(ts))
|
|
||||||
|
|
||||||
backups = {}
|
backups = {}
|
||||||
for dataset, snaps in snapshots.items():
|
for dataset, snaps in snapshots.items():
|
||||||
|
|
|
@ -83,47 +83,24 @@ def zfs_pool(metadata):
|
||||||
|
|
||||||
devices = metadata.get('backup-server/encrypted-devices')
|
devices = metadata.get('backup-server/encrypted-devices')
|
||||||
|
|
||||||
# TODO remove this once we have migrated all systems
|
pool_devices = set()
|
||||||
if isinstance(devices, dict):
|
|
||||||
pool_devices = set()
|
|
||||||
|
|
||||||
for number, (device, passphrase) in enumerate(sorted(devices.items())):
|
for device, dconfig in devices.items():
|
||||||
crypt_devices[device] = {
|
crypt_devices[dconfig['device']] = {
|
||||||
'dm-name': f'backup{number}',
|
'dm-name': f'backup-{device}',
|
||||||
'passphrase': passphrase,
|
'passphrase': dconfig['passphrase'],
|
||||||
}
|
}
|
||||||
pool_devices.add(f'/dev/mapper/backup{number}')
|
pool_devices.add(f'/dev/mapper/backup-{device}')
|
||||||
unlock_actions.add(f'action:dm-crypt_open_backup{number}')
|
unlock_actions.add(f'action:dm-crypt_open_backup-{device}')
|
||||||
|
|
||||||
pool_config = [{
|
pool_config = [{
|
||||||
'devices': pool_devices,
|
'devices': pool_devices,
|
||||||
}]
|
}]
|
||||||
|
|
||||||
if len(pool_devices) > 2:
|
if len(pool_devices) > 2:
|
||||||
pool_config[0]['type'] = 'raidz'
|
pool_config[0]['type'] = 'raidz'
|
||||||
elif len(pool_devices) > 1:
|
elif len(pool_devices) > 1:
|
||||||
pool_config[0]['type'] = 'mirror'
|
pool_config[0]['type'] = 'mirror'
|
||||||
|
|
||||||
elif isinstance(devices, list):
|
|
||||||
pool_config = []
|
|
||||||
|
|
||||||
for idx, intended_pool in enumerate(devices):
|
|
||||||
pool_devices = set()
|
|
||||||
|
|
||||||
for number, (device, passphrase) in enumerate(sorted(intended_pool.items())):
|
|
||||||
crypt_devices[device] = {
|
|
||||||
'dm-name': f'backup{idx}-{number}',
|
|
||||||
'passphrase': passphrase,
|
|
||||||
}
|
|
||||||
pool_devices.add(f'/dev/mapper/backup{idx}-{number}')
|
|
||||||
unlock_actions.add(f'action:dm-crypt_open_backup{idx}-{number}')
|
|
||||||
|
|
||||||
pool_config.append({
|
|
||||||
'devices': pool_devices,
|
|
||||||
'type': 'raidz',
|
|
||||||
})
|
|
||||||
else:
|
|
||||||
raise BundleError(f'{node.name}: unsupported configuration for backup-server/encrypted-devices')
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'backup-server': {
|
'backup-server': {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue