2020-11-21 20:46:41 +00:00
|
|
|
from json import loads
|
|
|
|
from os.path import join
|
|
|
|
|
2020-11-10 11:40:12 +00:00
|
|
|
defaults = {
|
|
|
|
'apt': {
|
|
|
|
'repos': {
|
|
|
|
'icinga2': {
|
|
|
|
'items': {
|
|
|
|
'deb http://packages.icinga.com/{os} icinga-{os_release} main',
|
|
|
|
'deb-src http://packages.icinga.com/{os} icinga-{os_release} main',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
2020-11-10 13:26:07 +00:00
|
|
|
'packages': {
|
2020-11-13 12:19:26 +00:00
|
|
|
'icinga2': {},
|
|
|
|
'icinga2-ido-pgsql': {},
|
|
|
|
'icingaweb2': {},
|
|
|
|
'icingaweb2-module-monitoring': {},
|
|
|
|
|
2020-11-10 13:26:07 +00:00
|
|
|
# needed for check_rbl
|
|
|
|
'libdata-validate-ip-perl': {},
|
|
|
|
'libmonitoring-plugin-perl': {},
|
|
|
|
'libnet-dns-perl': {},
|
|
|
|
'libreadonly-perl': {},
|
2020-11-22 17:53:57 +00:00
|
|
|
|
|
|
|
# neeeded for statusmonitor
|
|
|
|
'python3-flask': {},
|
2020-11-10 13:26:07 +00:00
|
|
|
}
|
2020-11-10 11:40:12 +00:00
|
|
|
},
|
2020-11-21 09:29:36 +00:00
|
|
|
'icinga2': {
|
|
|
|
'api_users': {
|
2020-12-20 08:33:17 +00:00
|
|
|
'root': {
|
|
|
|
'password': repo.vault.password_for(f'{node.name} icinga2 api root'),
|
|
|
|
'permissions': {
|
|
|
|
'*',
|
|
|
|
},
|
|
|
|
},
|
2020-11-21 09:29:36 +00:00
|
|
|
},
|
|
|
|
},
|
2020-11-22 10:38:53 +00:00
|
|
|
'icinga2_api': {
|
|
|
|
'icinga2': {
|
|
|
|
'services': {
|
|
|
|
'SIPGATE ACCOUNT BALANCE': {
|
|
|
|
'check_command': 'check_sipgate_account_balance',
|
|
|
|
'check_interval': '30m',
|
2020-11-22 10:44:09 +00:00
|
|
|
'vars.notification.mail': True,
|
2020-11-22 10:38:53 +00:00
|
|
|
},
|
2020-11-22 17:53:57 +00:00
|
|
|
'ICINGA STATUSMONITOR': {
|
|
|
|
'command_on_monitored_host': '/usr/local/share/icinga/plugins/check_systemd_unit icinga_statusmonitor',
|
|
|
|
},
|
2020-11-22 10:38:53 +00:00
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
2020-11-21 07:57:46 +00:00
|
|
|
'icingaweb2': {
|
|
|
|
'setup-token': repo.vault.password_for(f'{node.name} icingaweb2 setup-token'),
|
|
|
|
},
|
2020-11-10 11:40:12 +00:00
|
|
|
'postgresql': {
|
|
|
|
'roles': {
|
|
|
|
'icinga2': {
|
|
|
|
'password': repo.vault.password_for(f'{node.name} postgresql icinga2'),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
'databases': {
|
2020-11-21 07:57:46 +00:00
|
|
|
'icingaweb2': {
|
|
|
|
'owner': 'icinga2',
|
|
|
|
},
|
2020-11-10 11:40:12 +00:00
|
|
|
'icinga2': {
|
|
|
|
'owner': 'icinga2',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
2020-11-21 20:46:41 +00:00
|
|
|
|
2021-01-07 17:44:38 +00:00
|
|
|
@metadata_reactor.provides(
|
|
|
|
'icinga2/icinga_users',
|
|
|
|
)
|
2020-11-21 20:46:41 +00:00
|
|
|
def add_users_from_json(metadata):
|
|
|
|
with open(join(repo.path, 'users.json'), 'r') as f:
|
|
|
|
json = loads(f.read())
|
|
|
|
|
|
|
|
users = {}
|
|
|
|
for uname, config in json.items():
|
|
|
|
users[uname] = {
|
|
|
|
'email': '',
|
|
|
|
'phone': '',
|
|
|
|
'is_admin': config.get('is_admin', False),
|
|
|
|
}
|
|
|
|
|
|
|
|
if 'email' in config:
|
|
|
|
users[uname]['email'] = repo.vault.decrypt(config['email'])
|
|
|
|
if 'phone' in config:
|
|
|
|
users[uname]['phone'] = repo.vault.decrypt(config['phone'])
|
|
|
|
|
|
|
|
return {
|
|
|
|
'icinga2': {
|
|
|
|
'icinga_users': users,
|
|
|
|
},
|
|
|
|
}
|
2021-02-15 13:16:35 +00:00
|
|
|
|
|
|
|
|
|
|
|
@metadata_reactor.provides(
|
|
|
|
'iptables/bundle_rules/icinga2',
|
|
|
|
)
|
|
|
|
def iptables(metadata):
|
|
|
|
identifiers = metadata.get('icinga2/restrict-to', set())
|
|
|
|
rules = set()
|
|
|
|
|
|
|
|
if identifiers:
|
|
|
|
for identifier in sorted(identifiers):
|
|
|
|
resolved = repo.libs.tools.resolve_identifier(repo, identifier)
|
|
|
|
|
|
|
|
for address in resolved['ipv4']:
|
|
|
|
rules.add(f'iptables -A INPUT -p tcp -s {address} --dport 5665 -j ACCEPT')
|
|
|
|
else:
|
|
|
|
rules.add('iptables -A INPUT -p tcp --dport 5665 -j ACCEPT')
|
|
|
|
|
|
|
|
return {
|
|
|
|
'iptables': {
|
|
|
|
'bundle_rules': {
|
|
|
|
'icinga2': list(sorted(rules)),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|