from json import dumps from bundlewrap.metadata import MetadataJSONEncoder if node.has_bundle('pacman'): assert node.metadata.get('pacman/enable_aurto'), f'{node.name}: bundle:zfs needs aurto for zfs-linux-lts package' files = { '/etc/modprobe.d/zfs.conf': { 'source': 'zfs-modprobe.conf', 'content_type': 'mako', 'mode': '0755', }, '/etc/systemd/system/zfs-import-scan.service.d/bundlewrap.conf': { 'source': 'zfs-import-scan-override.service', 'content_type': 'mako', 'triggers': { 'action:systemd-reload', }, }, '/etc/systemd/system/zfs-zed.service.d/bundlewrap.conf': { 'source': 'zfs-zed-override.service', 'triggers': { 'action:systemd-reload', 'svc_systemd:zfs-zed:restart' }, }, '/etc/zfs-snapshot-config.json': { 'content': dumps( node.metadata.get('zfs/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/telegraf-per-dataset': { 'mode': '0755', }, '/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-import-scan.service': { 'needs': { 'file:/etc/systemd/system/zfs-import-scan.service.d/bundlewrap.conf', }, 'after': { 'pkg_apt:', }, 'before': { 'svc_systemd:zfs-import-cache.service', }, }, 'zfs-import-cache.service': { 'running': None, 'enabled': False, 'masked': True, 'after': { 'pkg_apt:', }, }, 'zfs-mount.service': { 'after': { 'pkg_apt:', }, }, 'zfs-zed': { 'after': { 'pkg_apt:', }, }, 'zfs.target': { 'running': None, 'after': { 'pkg_apt:', }, }, 'zfs-import.target': { 'running': None, 'after': { 'pkg_apt:', }, }, } for name, attrs in node.metadata.get('zfs/datasets', {}).items(): zfs_datasets[name] = attrs if 'mountpoint' not in attrs: zfs_datasets[name]['canmount'] = 'off' zfs_datasets[name]['mountpoint'] = 'none' elif 'canmount' not in attrs: zfs_datasets[name]['canmount'] = 'on' for name, attrs in node.metadata.get('zfs/pools', {}).items(): zfs_pools[name] = attrs if (not node.os == 'debian' or node.os_version[0] > 10) and 'autotrim' not in attrs: zfs_pools[name]['autotrim'] = True directories = { "/etc/zfs-snapshot-backup-pre.d": { 'purge': True, }, "/etc/zfs-snapshot-backup-post.d": { 'purge': True, }, } 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', }