Compare commits

...

2 commits

Author SHA1 Message Date
Franzi 54219928e4
bundles/icinga2: only add user to on-call group if they have atleast one of (email, phone) set
All checks were successful
bundlewrap/pipeline/head This commit looks good
2020-11-22 11:07:02 +01:00
Franzi 8c6c691e5e
bundles/icinga2: implement SMS notifications 2020-11-22 10:34:49 +01:00
4 changed files with 40 additions and 11 deletions

View file

@ -10,7 +10,7 @@ object User "${username}" {
states = [ OK, Warning, Critical, Up, Down ] states = [ OK, Warning, Critical, Up, Down ]
types = [ Problem, Recovery ] types = [ Problem, Recovery ]
% if config['is_admin']: % if config['is_admin'] and (config['email'] or config['phone']):
groups = [ "on-call_sms" ] groups = [ "on-call_sms" ]
% endif % endif

View file

@ -3,10 +3,14 @@
import email.mime.text import email.mime.text
import smtplib import smtplib
from argparse import ArgumentParser from argparse import ArgumentParser
from requests import get from json import dumps
from requests import post
from subprocess import run from subprocess import run
from sys import argv from sys import argv
SIPGATE_USER='${node.metadata['icinga2']['sipgate_user']}'
SIPGATE_PASS='${node.metadata['icinga2']['sipgate_pass']}'
parser = ArgumentParser( parser = ArgumentParser(
prog='icinga_notification_wrapper', prog='icinga_notification_wrapper',
description='Icinga2 Notification Wrapper', description='Icinga2 Notification Wrapper',
@ -55,14 +59,34 @@ def log_to_syslog(message):
def notify_per_sms(): def notify_per_sms():
log_to_syslog('SMS requested, but not implemented yet!') # FIXME TODO message = {
return 'message': 'ICINGA: {host}/{service} is {state}: {output}'.format(
msg = 'ICINGA: {host}/{service} is {state}: {output}'.format( host=args.host_name,
host=args.host_name, service=args.service_name,
service=args.service_name, state=args.state.upper(),
state=args.state, output=args.output
output=args.output ),
) 'smsId': 's0', # XXX what does this mean? Documentation is unclear
'recipient': args.sms
}
headers = {
'Content-type': 'application/json',
'Accept': 'application/json'
}
try:
r = post(
'https://api.sipgate.com/v2/sessions/sms',
json=message,
headers=headers,
auth=(SIPGATE_USER, SIPGATE_PASS),
)
if r.status_code == 204:
log_to_syslog('Sent a SMS to "{}"'.format(args.sms))
else:
r.raise_for_status()
except Exception as e:
log_to_syslog('Sending a SMS to "{}" failed: {}'.format(args.sms, repr(e)))
def notify_per_mail(): def notify_per_mail():
@ -88,7 +112,7 @@ State: {state}
mail = email.mime.text.MIMEText(text.format( mail = email.mime.text.MIMEText(text.format(
host=args.host_name, host=args.host_name,
service=args.service_name, service=args.service_name,
state=args.state, state=args.state.upper(),
output=args.output output=args.output
), ),
'plain', 'plain',

View file

@ -93,6 +93,7 @@ files = {
}, },
'/etc/icinga2/scripts/icinga_notification_wrapper': { '/etc/icinga2/scripts/icinga_notification_wrapper': {
'source': 'scripts/icinga_notification_wrapper', 'source': 'scripts/icinga_notification_wrapper',
'content_type': 'mako',
'mode': '0755', 'mode': '0755',
}, },
'/etc/icinga2/features-available/ido-pgsql.conf': { '/etc/icinga2/features-available/ido-pgsql.conf': {

View file

@ -26,6 +26,10 @@ nodes['ovh.icinga2'] = {
'php-imagick': {}, 'php-imagick': {},
}, },
}, },
'icinga2': {
'sipgate_user': vault.decrypt('encrypt$gAAAAABfujAmCUnicSAllq8MskXnPodKp3cGcfA6Abvef-rAYwB2CtCwt9oBRVKFskJPVArDaF1wfjNTfLwgX3gTP7xFutJ1HA=='),
'sipgate_pass': vault.decrypt('encrypt$gAAAAABfui_4B7UmOosI_gsQ-xvmd3X_BUDSl-G2KF_Tg8O6RpUvk0gHexOKsrTb6se1ipXsh7RC9pbZCKMtesW0C6j24LHXDKCOjkqI77oO0ZjnG6SUwfcJqg61biNiRlXy8z-9LCGA'),
},
'nginx': { 'nginx': {
'vhosts': { 'vhosts': {
'icingaweb': { 'icingaweb': {