from json import dumps from os.path import join from bundlewrap.metadata import MetadataJSONEncoder 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:', }, }, } files = { '/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:zfs-zed:restart' }, }, '/usr/local/sbin/zfs-auto-snapshot': { 'mode': '0755', }, '/usr/local/share/icinga/plugins/check_zfs_auto_snapshot': { 'mode': '0755', }, '/usr/local/share/icinga/plugins/check_zfs_old_snapshots': { 'mode': '0755', }, "/usr/local/share/icinga/plugins/check_zfs_volumes": { 'mode': '0755', 'content_type': 'mako', }, "/usr/local/share/icinga/plugins/check_zpool_online": { 'mode': '0755', }, "/usr/local/share/icinga/plugins/check_zpool_space": { 'mode': '0755', }, } svc_systemd = { 'zfs-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', # }