bundlewrap/bundles/smartd/metadata.py

83 lines
2 KiB
Python

from re import search
defaults = {
'apt': {
'packages': {
'smartmontools': {
'needed_by': {
'svc_systemd:smartmontools',
},
},
'nvme-cli': {
'needed_by': {
'svc_systemd:smartmontools',
},
},
},
},
'icinga2_api': {
'smartd': {
'services': {
'SMARTD PROCESS': {
'command_on_monitored_host': '/usr/local/share/icinga/plugins/check_systemd_unit smartmontools',
},
},
},
},
}
if node.has_bundle('telegraf'):
defaults['telegraf'] = {
'input_plugins': {
'exec': {
'smartd': {
'commands': ['sudo /usr/local/sbin/telegraf-smartd'],
'data_format': 'influx',
'timeout': '5s',
},
},
},
'sudo_commands': {
'/usr/local/sbin/telegraf-smartd',
},
}
@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,
},
},
}
@metadata_reactor.provides(
'systemd-timers/timers',
)
def monthly_long_test(metadata):
timers = {}
for day, disk in enumerate(sorted(metadata.get('smartd/disks', set())), start=1):
timers[f'smartd{disk.replace("/", "-")}'] = {
'command': f'/usr/sbin/smartctl --test=long {disk}',
'when': f'*-*-{day} 03:00:00 UTC',
}
return {
'systemd-timers': {
'timers': timers,
},
}