bundlewrap/bundles/smartd/metadata.py

112 lines
2.6 KiB
Python
Raw Normal View History

defaults = {
'apt': {
'packages': {
'smartmontools': {
'needed_by': {
'svc_systemd:smartd',
},
},
'nvme-cli': {
'needed_by': {
'svc_systemd:smartd',
},
},
},
},
'icinga2_api': {
'smartd': {
'services': {
'SMARTD PROCESS': {
'command_on_monitored_host': '/usr/local/share/icinga/plugins/check_systemd_unit smartd',
},
},
},
},
}
@metadata_reactor.provides(
'smartd/disks',
)
def zfs_disks_to_metadata(metadata):
disks = set()
for config in metadata.get('zfs/pools', {}).values():
2021-08-17 16:09:51 +00:00
for option in config['when_creating']['config']:
if option.get('type', '') in {'log', 'cache'}:
continue
for disk in option['devices']:
disks.add(disk)
return {
'smartd': {
'disks': disks,
},
}
@metadata_reactor.provides(
'icinga2_api/smartd/services',
)
def icinga(metadata):
services = {}
for disk in metadata.get('smartd/disks', set()):
services[f'SMART STATUS {disk}'] = {
'command_on_monitored_host': f'sudo /usr/local/share/icinga/plugins/check_smart -d {disk} -i auto',
'vars.notification.mail': True,
}
return {
'icinga2_api': {
'smartd': {
'services': services,
},
},
}
2021-04-23 17:31:28 +00:00
@metadata_reactor.provides(
'telegraf/input_plugins/builtin/smart',
)
def telegraf(metadata):
if not node.has_bundle('telegraf'):
raise DoNotRunAgain
if metadata.get('smartd/disks', set()):
2021-04-23 17:31:28 +00:00
return {
'telegraf': {
'input_plugins': {
'builtin': {
'smart': [{
'devices': list(sorted(metadata.get('smartd/disks'))),
}],
},
},
},
}
return {}
@metadata_reactor.provides(
'cron/jobs/smartd',
)
def monthly_long_test(metadata):
lines = set()
for number, disk in enumerate(sorted(metadata.get('smartd/disks', set()))):
lines.add('0 3 {} * * root /usr/sbin/smartctl --test=long {} >/dev/null'.format(
number+1, # enumerate() starts at 0
disk,
))
return {
'cron': {
'jobs': {
'smartd': '\n'.join(sorted(lines)),
},
},
}