#import re defaults = { 'apt': { 'packages': { 'linux-headers-amd64': { 'needed_by': { 'pkg_apt:zfs-dkms', }, }, 'zfs-dkms': { 'needed_by': { 'pkg_apt:zfs-zed', 'pkg_apt:zfsutils-linux', }, }, 'zfs-zed': { 'needed_by': { 'zfs_dataset:', 'zfs_pool:', }, }, 'zfsutils-linux': { 'needed_by': { 'pkg_apt:zfs-zed', 'zfs_dataset:', 'zfs_pool:', }, }, 'parted': { 'needed_by': { 'zfs_pool:', }, }, }, 'repos': { 'backports': { 'install_gpg_key': False, # default debian signing key 'items': [ 'deb http://deb.debian.org/debian {os_release}-backports main', ], }, }, }, 'cron': { 'zfs-auto-snapshot-daily': '0 0 * * * root /usr/local/sbin/zfs-auto-snapshot daily', 'zfs-auto-snapshot-hourly': '0 * * * * root /usr/local/sbin/zfs-auto-snapshot hourly', 'zfs-auto-snapshot-monthly': '0 0 1 * * root /usr/local/sbin/zfs-auto-snapshot monthly', 'zfs-auto-snapshot-weekly': '0 0 * * 7 root /usr/local/sbin/zfs-auto-snapshot weekly', }, 'zfs': { 'datasets': {}, 'pools': {}, 'snapshots': { 'retain_defaults': { 'hourly': 24, 'daily': 7, 'weekly': 2, 'monthly': 1, }, }, }, } if node.has_bundle('sshmon'): defaults.update({ 'icinga2_api': { 'zfs': { 'services': { 'ZFS AUTO SNAPSHOT': { 'command_on_monitored_host': 'sudo /usr/local/share/icinga/plugins/check_zfs_auto_snapshot', }, 'ZFS MOUNTED VOLUMES': { 'command_on_monitored_host': 'sudo /usr/local/share/icinga/plugins/check_zfs_volumes', 'vars.notification.mail': True, }, 'ZFS OLD SNAPSHOTS': { 'command_on_monitored_host': 'sudo /usr/local/share/icinga/plugins/check_zfs_old_snapshots', } }, }, }, }) @metadata_reactor.provides( 'cron/zfs-scrub', ) def zfs_scrub_cronjob(metadata): when = metadata.get('zfs/scrub/cron', '{} 0 * * sun'.format((node.magic_number % 60))) return { 'cron': { 'zfs-scrub': '{} root /usr/lib/zfs-linux/scrub'.format(when), }, } @metadata_reactor def monitoring(metadata): if not node.has_bundle('sshmon'): raise DoNotRunAgain services = {} for poolname, _ in metadata.get('zfs/pools').items(): services['ZFS ZPOOL ONLINE {}'.format(poolname)] = { 'command_on_monitored_host': 'sudo /usr/local/share/icinga/plugins/check_zpool_online {}'.format(poolname), 'vars.notification.mail': True, } services['ZFS ZPOOL SPACE ' + poolname] = { 'command_on_monitored_host': 'sudo /usr/local/share/icinga/plugins/check_zpool_space {} 90'.format(poolname), 'vars.notification.mail': True, } return { 'icinga2_api': { 'zfs': { 'services': services, }, }, }