275 lines
		
	
	
	
		
			7.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			275 lines
		
	
	
	
		
			7.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from ipaddress import ip_interface
 | 
						|
 | 
						|
directories = {
 | 
						|
    '/etc/icinga2': {
 | 
						|
       'purge': True,
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'mode': '0750',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
   '/etc/icinga2/pki': { # required for apt install
 | 
						|
       'purge': True,
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'mode': '0750',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
   '/etc/icinga2/zones.d': { # required for apt install
 | 
						|
       'purge': True,
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'mode': '0750',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    '/etc/icinga2/conf.d': {
 | 
						|
        'purge': True,
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'mode': '0750',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    '/etc/icinga2/hosts.d': {
 | 
						|
        'purge': True,
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'mode': '0750',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    '/etc/icinga2/features-available': {
 | 
						|
        'purge': True,
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'mode': '0750',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    '/etc/icinga2/features-enabled': {
 | 
						|
        'purge': True,
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'mode': '0750',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    '/etc/icinga2/scripts': {
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'mode': '0750',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    '/var/lib/icinga2': {
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'mode': '0750',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    '/var/lib/icinga2/certs': {
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'mode': '0700',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
}
 | 
						|
 | 
						|
files = {
 | 
						|
    '/etc/icinga2/icinga2.conf': {
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'mode': '0640',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    '/etc/icinga2/constants.conf': {
 | 
						|
        'content_type': 'mako',
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'mode': '0640',
 | 
						|
        'context': {
 | 
						|
            'hostname': node.metadata.get('icinga2/hostname')
 | 
						|
        },
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    '/etc/icinga2/zones.conf': {
 | 
						|
        'content_type': 'mako',
 | 
						|
        'context': {
 | 
						|
            'hostname': node.metadata.get('icinga2/hostname')
 | 
						|
        },
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'mode': '0640',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    '/etc/icinga2/conf.d/api-users.conf': {
 | 
						|
        'source': 'conf.d/api-users.conf',
 | 
						|
        'content_type': 'mako',
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'mode': '0640',
 | 
						|
        'context': {
 | 
						|
            'users': node.metadata.get('icinga2/api_users'),
 | 
						|
        },
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    '/etc/icinga2/conf.d/app.conf': {
 | 
						|
        'source': 'conf.d/app.conf',
 | 
						|
        'content_type': 'mako',
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'mode': '0640',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    '/etc/icinga2/conf.d/commands.conf': {
 | 
						|
        'source': 'conf.d/commands.conf',
 | 
						|
        'content_type': 'mako',
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'mode': '0640',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    '/etc/icinga2/conf.d/groups.conf': {
 | 
						|
        'source': 'conf.d/groups.conf',
 | 
						|
        'content_type': 'mako',
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'mode': '0640',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    '/etc/icinga2/conf.d/notifications.conf': {
 | 
						|
        'source': 'conf.d/notifications.conf',
 | 
						|
        'content_type': 'mako',
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'mode': '0640',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    '/etc/icinga2/conf.d/templates.conf': {
 | 
						|
        'source': 'conf.d/templates.conf',
 | 
						|
        'content_type': 'mako',
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'mode': '0640',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    '/etc/icinga2/conf.d/timeperiods.conf': {
 | 
						|
        'source': 'conf.d/timeperiods.conf',
 | 
						|
        'content_type': 'mako',
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'mode': '0640',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    '/var/lib/icinga2/certs/ca.crt': {
 | 
						|
        'content_type': 'download',
 | 
						|
        'source': f'https://letsencrypt.org/certs/isrg-root-x1-cross-signed.pem',
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    '/usr/lib/nagios/plugins/check_by_sshmon': {
 | 
						|
        'mode': '0755',
 | 
						|
    },
 | 
						|
}
 | 
						|
 | 
						|
# FEATURES
 | 
						|
 | 
						|
for feature, context in {
 | 
						|
    'mainlog': {},
 | 
						|
#    'journald': {}, FIXME
 | 
						|
    'notification': {},
 | 
						|
    'checker': {},
 | 
						|
    'api': {},
 | 
						|
    'ido-pgsql': {
 | 
						|
        'db_password': node.metadata.get('postgresql/roles/icinga2/password'),
 | 
						|
    },
 | 
						|
}.items():
 | 
						|
    files[f'/etc/icinga2/features-available/{feature}.conf'] = {
 | 
						|
        'content_type': 'mako' if context else 'text',
 | 
						|
        'context':  context,
 | 
						|
        'source': f'features/{feature}.conf',
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    }
 | 
						|
    symlinks[f'/etc/icinga2/features-enabled/{feature}.conf'] = {
 | 
						|
        'target': f'/etc/icinga2/features-available/{feature}.conf',
 | 
						|
        'owner': 'nagios',
 | 
						|
        'group': 'nagios',
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    }
 | 
						|
 | 
						|
# HOSTS
 | 
						|
 | 
						|
for other_node in repo.nodes:
 | 
						|
    if other_node.dummy:
 | 
						|
        continue
 | 
						|
    elif not other_node.in_group('monitored'):
 | 
						|
        continue
 | 
						|
 | 
						|
    files[f'/etc/icinga2/hosts.d/{other_node.name}.conf'] = {
 | 
						|
        'content_type': 'mako',
 | 
						|
        'source': 'hosts.d/host.conf',
 | 
						|
        'owner': 'nagios',
 | 
						|
        'context': {
 | 
						|
            'host_name': other_node.name,
 | 
						|
            'host_settings': {
 | 
						|
                'address': str(ip_interface(other_node.metadata.get('network/internal/ipv4', None) or other_node.metadata.get('wireguard/my_ip')).ip),
 | 
						|
            },
 | 
						|
            'services': other_node.metadata.get('monitoring/services'),
 | 
						|
        },
 | 
						|
        'triggers': [
 | 
						|
            'svc_systemd:icinga2.service:restart',
 | 
						|
        ],
 | 
						|
    }
 | 
						|
 | 
						|
svc_systemd = {
 | 
						|
    'icinga2.service': {
 | 
						|
        'needs': [
 | 
						|
            'pkg_apt:icinga2-ido-pgsql',
 | 
						|
            'svc_systemd:postgresql.service',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
}
 |