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')
|
||||
|
||||
if line.startswith('{}/'.format(server_settings['zfs-base'])):
|
||||
dataset, snapname = line.split('@', 1)
|
||||
try:
|
||||
dataset, snapname = line.split('@', 1)
|
||||
|
||||
dataset = dataset.split('/')[-1]
|
||||
ts, bucket = snapname.split('-', 1)
|
||||
dataset = dataset.split('/')[-1]
|
||||
ts, bucket = snapname.split('-', 1)
|
||||
|
||||
if not ts.isdigit():
|
||||
# garbage, ignore
|
||||
continue
|
||||
|
||||
snapshots[dataset].add(int(ts))
|
||||
snapshots[dataset].add(int(ts))
|
||||
except Exception as e:
|
||||
print(f"Exception while parsing snapshot name {line!r}: {e!r}")
|
||||
|
||||
backups = {}
|
||||
for dataset, snaps in snapshots.items():
|
||||
|
|
|
@ -83,47 +83,24 @@ def zfs_pool(metadata):
|
|||
|
||||
devices = metadata.get('backup-server/encrypted-devices')
|
||||
|
||||
# TODO remove this once we have migrated all systems
|
||||
if isinstance(devices, dict):
|
||||
pool_devices = set()
|
||||
pool_devices = set()
|
||||
|
||||
for number, (device, passphrase) in enumerate(sorted(devices.items())):
|
||||
crypt_devices[device] = {
|
||||
'dm-name': f'backup{number}',
|
||||
'passphrase': passphrase,
|
||||
}
|
||||
pool_devices.add(f'/dev/mapper/backup{number}')
|
||||
unlock_actions.add(f'action:dm-crypt_open_backup{number}')
|
||||
for device, dconfig in devices.items():
|
||||
crypt_devices[dconfig['device']] = {
|
||||
'dm-name': f'backup-{device}',
|
||||
'passphrase': dconfig['passphrase'],
|
||||
}
|
||||
pool_devices.add(f'/dev/mapper/backup-{device}')
|
||||
unlock_actions.add(f'action:dm-crypt_open_backup-{device}')
|
||||
|
||||
pool_config = [{
|
||||
'devices': pool_devices,
|
||||
}]
|
||||
pool_config = [{
|
||||
'devices': pool_devices,
|
||||
}]
|
||||
|
||||
if len(pool_devices) > 2:
|
||||
pool_config[0]['type'] = 'raidz'
|
||||
elif len(pool_devices) > 1:
|
||||
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')
|
||||
if len(pool_devices) > 2:
|
||||
pool_config[0]['type'] = 'raidz'
|
||||
elif len(pool_devices) > 1:
|
||||
pool_config[0]['type'] = 'mirror'
|
||||
|
||||
return {
|
||||
'backup-server': {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue