2020-08-29 19:10:59 +00:00
|
|
|
from json import dumps
|
2021-02-12 19:37:36 +00:00
|
|
|
#from os.path import join
|
2020-08-29 19:10:59 +00:00
|
|
|
|
|
|
|
from bundlewrap.metadata import MetadataJSONEncoder
|
|
|
|
|
2020-10-31 09:11:15 +00:00
|
|
|
actions = {
|
|
|
|
# For some reason, this module doesn't get auto-loaded on debian,
|
|
|
|
# even if installation of zfsutils-linux tries to start
|
|
|
|
# zfs-mount.service. We have no choice but to do it manually.
|
|
|
|
'modprobe_zfs': {
|
|
|
|
'command': 'modprobe zfs',
|
|
|
|
'unless': 'lsmod | grep ^zfs',
|
|
|
|
'needs': {
|
|
|
|
'pkg_apt:zfs-dkms',
|
|
|
|
},
|
|
|
|
'needed_by': {
|
|
|
|
'pkg_apt:zfs-zed',
|
|
|
|
'pkg_apt:zfsutils-linux',
|
|
|
|
'zfs_dataset:',
|
|
|
|
'zfs_pool:',
|
|
|
|
},
|
2021-02-20 15:51:34 +00:00
|
|
|
'comment': 'If this fails, do a dist-upgrade, reinstall zfs-dkms, reboot',
|
2020-10-31 09:11:15 +00:00
|
|
|
},
|
|
|
|
}
|
2020-08-29 19:10:59 +00:00
|
|
|
|
|
|
|
files = {
|
2020-10-25 15:39:35 +00:00
|
|
|
'/etc/modprobe.d/zfs.conf': {
|
2020-08-29 19:10:59 +00:00
|
|
|
'source': 'zfs-modprobe.conf',
|
|
|
|
'content_type': 'mako',
|
|
|
|
'mode': '0755',
|
|
|
|
},
|
|
|
|
'/etc/zfs-snapshot-config.json': {
|
|
|
|
'content': dumps(
|
2021-02-18 17:12:25 +00:00
|
|
|
node.metadata.get('zfs/snapshots', {}),
|
2020-08-29 19:10:59 +00:00
|
|
|
cls=MetadataJSONEncoder, # turns sets into sorted lists
|
|
|
|
indent=4,
|
|
|
|
sort_keys=True,
|
|
|
|
) + '\n',
|
|
|
|
},
|
|
|
|
'/etc/zfs/zed.d/zed.rc': {
|
|
|
|
'content': 'ZED_EMAIL_ADDR="hostmaster@kunbox.net"\nZED_EMAIL_PROG="mail"\nZED_NOTIFY_INTERVAL_SECS=3600\n',
|
|
|
|
'mode': '0600',
|
2020-10-25 15:39:35 +00:00
|
|
|
'triggers': {
|
2020-11-12 17:40:39 +00:00
|
|
|
'svc_systemd:zfs-zed:restart'
|
2020-10-25 15:39:35 +00:00
|
|
|
},
|
2020-08-29 19:10:59 +00:00
|
|
|
},
|
|
|
|
'/usr/local/sbin/zfs-auto-snapshot': {
|
|
|
|
'mode': '0755',
|
|
|
|
},
|
2020-11-10 09:35:01 +00:00
|
|
|
'/usr/local/share/icinga/plugins/check_zfs_auto_snapshot': {
|
2020-08-29 19:10:59 +00:00
|
|
|
'mode': '0755',
|
|
|
|
},
|
2020-11-10 09:35:01 +00:00
|
|
|
'/usr/local/share/icinga/plugins/check_zfs_old_snapshots': {
|
2020-08-29 19:10:59 +00:00
|
|
|
'mode': '0755',
|
|
|
|
},
|
2020-11-10 09:35:01 +00:00
|
|
|
"/usr/local/share/icinga/plugins/check_zfs_volumes": {
|
2020-08-29 19:10:59 +00:00
|
|
|
'mode': '0755',
|
|
|
|
'content_type': 'mako',
|
|
|
|
},
|
2020-11-10 09:35:01 +00:00
|
|
|
"/usr/local/share/icinga/plugins/check_zpool_online": {
|
2020-08-29 19:10:59 +00:00
|
|
|
'mode': '0755',
|
|
|
|
},
|
2020-11-10 09:35:01 +00:00
|
|
|
"/usr/local/share/icinga/plugins/check_zpool_space": {
|
2020-08-29 19:10:59 +00:00
|
|
|
'mode': '0755',
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
svc_systemd = {
|
2020-11-12 17:40:39 +00:00
|
|
|
'zfs-zed': {
|
2020-10-25 15:39:35 +00:00
|
|
|
'needs': {
|
|
|
|
'pkg_apt:zfs-zed'
|
|
|
|
},
|
2020-08-29 19:10:59 +00:00
|
|
|
},
|
|
|
|
}
|
|
|
|
|
2021-02-18 17:12:25 +00:00
|
|
|
zfs_datasets = node.metadata.get('zfs/datasets', {})
|
2020-08-29 19:10:59 +00:00
|
|
|
zfs_pools = {}
|
|
|
|
|
2021-02-18 17:12:25 +00:00
|
|
|
for name, attrs in node.metadata.get('zfs/pools', {}).items():
|
2020-08-29 19:10:59 +00:00
|
|
|
zfs_pools[name] = attrs
|
|
|
|
|
|
|
|
# Not yet supported on debian buster
|
|
|
|
#actions[f'pool_{name}_enable_trim'] = {
|
|
|
|
# 'command': f'zpool set autotrim=on {name}',
|
|
|
|
# 'unless': f'zpool get autotrim -H -o value {name} | grep -q on',
|
|
|
|
# 'needs': [
|
|
|
|
# f'zfs_pool:{name}'
|
|
|
|
# ]
|
|
|
|
#}
|
|
|
|
|
|
|
|
directories = {
|
|
|
|
"/etc/zfs-snapshot-backup-pre.d": {
|
|
|
|
'purge': True,
|
|
|
|
},
|
|
|
|
"/etc/zfs-snapshot-backup-post.d": {
|
|
|
|
'purge': True,
|
|
|
|
},
|
|
|
|
}
|
2021-05-15 18:32:23 +00:00
|
|
|
|
|
|
|
if node.metadata.get('zfs/filesystems_with_backup_snapshots', {}) and node.has_bundle('backup-client'):
|
|
|
|
files['/etc/backup-pre-hooks.d/99-zfs-snapshots'] = {
|
|
|
|
'content_type': 'mako',
|
|
|
|
'source': 'backup-pre-hook',
|
|
|
|
'mode': '0755',
|
|
|
|
}
|