142 lines
3.7 KiB
Python
142 lines
3.7 KiB
Python
|
from json import dumps
|
||
|
from os.path import join
|
||
|
|
||
|
from bundlewrap.metadata import MetadataJSONEncoder
|
||
|
|
||
|
actions = {}
|
||
|
|
||
|
pkg_apt = {
|
||
|
'zfs-zed': {
|
||
|
'needed_by': {
|
||
|
'zfs_dataset:',
|
||
|
'zfs_pool:',
|
||
|
},
|
||
|
},
|
||
|
'zfsutils-linux': {
|
||
|
'needed_by': {
|
||
|
'zfs_dataset:',
|
||
|
'zfs_pool:',
|
||
|
},
|
||
|
},
|
||
|
'parted': {
|
||
|
'needed_by': {
|
||
|
'zfs_pool:',
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
files = {
|
||
|
'/etc/cron.d/zfsutils-linux': {
|
||
|
'delete': True,
|
||
|
'needs': ['pkg_apt:zfsutils-linux'],
|
||
|
},
|
||
|
"/etc/modprobe.d/zfs.conf": {
|
||
|
'source': 'zfs-modprobe.conf',
|
||
|
'content_type': 'mako',
|
||
|
'mode': '0755',
|
||
|
},
|
||
|
'/etc/zfs-snapshot-config.json': {
|
||
|
'content': dumps(
|
||
|
node.metadata.get('zfs', {}).get('snapshots', {}),
|
||
|
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',
|
||
|
'triggers': ['svc_systemd:zed:restart'],
|
||
|
},
|
||
|
'/usr/local/sbin/zfs-auto-snapshot': {
|
||
|
'mode': '0755',
|
||
|
},
|
||
|
'/usr/lib/nagios/plugins/check_zfs_auto_snapshot': {
|
||
|
'mode': '0755',
|
||
|
},
|
||
|
'/usr/lib/nagios/plugins/check_zfs_old_snapshots': {
|
||
|
'mode': '0755',
|
||
|
},
|
||
|
"/usr/lib/nagios/plugins/check_zfs_volumes": {
|
||
|
'mode': '0755',
|
||
|
'content_type': 'mako',
|
||
|
},
|
||
|
"/usr/lib/nagios/plugins/check_zpool_online": {
|
||
|
'mode': '0755',
|
||
|
},
|
||
|
"/usr/lib/nagios/plugins/check_zpool_space": {
|
||
|
'mode': '0755',
|
||
|
},
|
||
|
}
|
||
|
|
||
|
svc_systemd = {
|
||
|
'zed': {
|
||
|
'needs': ['pkg_apt:zfs-zed'],
|
||
|
},
|
||
|
}
|
||
|
|
||
|
zfs_datasets = node.metadata.get('zfs', {}).get('datasets', {})
|
||
|
zfs_pools = {}
|
||
|
|
||
|
for name, attrs in node.metadata.get('zfs', {}).get('pools', {}).items():
|
||
|
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,
|
||
|
},
|
||
|
"/etc/zfs-snapshot-backup-final.d": {
|
||
|
'purge': True,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
# TODO implement when we start managing backups via bundlewrap
|
||
|
#if node.metadata.get('zfs', {}).get('snapshots', {}).get('backup', {}).get('enabled', True):
|
||
|
# directories["/mnt/zfs-snapshot-backup"] = {}
|
||
|
#
|
||
|
# files["/usr/local/sbin/zfs-backup-snapshot"] = {
|
||
|
# 'content_type': 'mako',
|
||
|
# 'context': {
|
||
|
# # Set by our own metadata processor, guaranteed to exist.
|
||
|
# 'filesystems': node.metadata['zfs']['snapshots']['backup']['filesystems_with_snapshot'],
|
||
|
# },
|
||
|
# 'mode': '0755',
|
||
|
# }
|
||
|
# files["/usr/local/sbin/zfs-backup-snapshot-unmount"] = {
|
||
|
# 'content_type': 'mako',
|
||
|
# 'context': {
|
||
|
# # Set by our own metadata processor, guaranteed to exist.
|
||
|
# 'filesystems': node.metadata['zfs']['snapshots']['backup']['filesystems_with_snapshot'],
|
||
|
# },
|
||
|
# 'mode': '0755',
|
||
|
# }
|
||
|
#
|
||
|
#else:
|
||
|
# files["/mnt/zfs-snapshot-backup"] = {'delete': True}
|
||
|
|
||
|
# TODO when we start using telegraf
|
||
|
#if node.has_bundle('telegraf'):
|
||
|
# files['/etc/telegraf-zfs-dataset.conf'] = {
|
||
|
# 'content': dumps(
|
||
|
# node.metadata.get('zfs', {}),
|
||
|
# cls=MetadataJSONEncoder,
|
||
|
# indent=4,
|
||
|
# sort_keys=True,
|
||
|
# ) + '\n',
|
||
|
# }
|
||
|
# files['/usr/local/bin/telegraf-zfs-dataset'] = {
|
||
|
# 'mode': '0775',
|
||
|
# }
|