71 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| defaults = {
 | |
|     'systemd-timers': {},
 | |
| }
 | |
| 
 | |
| 
 | |
| @metadata_reactor.provides(
 | |
|     'systemd/units',
 | |
|     'systemd/services',
 | |
| )
 | |
| def systemd(metadata):
 | |
|     units = {}
 | |
|     services = {}
 | |
| 
 | |
|     for name, config in metadata.get('systemd-timers').items():
 | |
|         units.update({
 | |
|             f'{name}.timer': {
 | |
|                 'Unit':{
 | |
|                     'Description': f'{name} timer',
 | |
|                     'After': config.get('after', set()),
 | |
|                 },
 | |
|                 'Timer': {
 | |
|                     'OnCalendar': config['when'],
 | |
|                     'Persistent': config.get('persistent', False),
 | |
|                     'Unit': f'{name}.service',
 | |
|                 },
 | |
|             },
 | |
|             f'{name}.service': {
 | |
|                 'Unit':{
 | |
|                     'Description': f'{name} timer service',
 | |
|                 },
 | |
|                 'Service': {
 | |
|                     'User': config.get('user', 'root'),
 | |
|                     'ExecStart': config['command'],
 | |
|                     'Environment': config.get('env'),
 | |
|                     'Nice': config.get('nice', 10),
 | |
|                 },
 | |
|             },
 | |
|         })
 | |
|         if config.get('working_dir'):
 | |
|             units[f'{name}.service']['Service']['WorkingDirectory'] = config['working_dir']
 | |
|         if config.get('success_exit_status'):
 | |
|             units[f'{name}.service']['Service']['SuccessExitStatus'] = config['success_exit_status']
 | |
|         if config.get('kill_mode'):
 | |
|             units[f'{name}.service']['Service']['KillMode'] = config['kill_mode']
 | |
|         if config.get('RuntimeMaxSec'):
 | |
|             units[f'{name}.service']['Service']['RuntimeMaxSec'] = config['RuntimeMaxSec']
 | |
| 
 | |
|         services[f'{name}.timer'] = {}
 | |
| 
 | |
|     return {
 | |
|         'systemd': {
 | |
|             'units': units,
 | |
|             'services': services,
 | |
|         },
 | |
|     }
 | |
| 
 | |
| 
 | |
| @metadata_reactor.provides(
 | |
|     'monitoring/services',
 | |
| )
 | |
| def monitoring(metadata):
 | |
|     return {
 | |
|         'monitoring': {
 | |
|             'services': {
 | |
|                 f'{name}.timer': {
 | |
|                     'vars.command': f'/usr/lib/nagios/plugins/check_systemd_timer {name}',
 | |
|                 }
 | |
|                     for name in metadata.get('systemd-timers')
 | |
|             },
 | |
|         },
 | |
|     }
 |