feat: add notification commands
This commit is contained in:
parent
123156f412
commit
164ab5a269
6 changed files with 116 additions and 3 deletions
29
README.md
29
README.md
|
@ -162,6 +162,27 @@ Install and configure Icinga2
|
||||||
period: $service.vars.period$
|
period: $service.vars.period$
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- `icinga2_notification_commands` - hash with notification command configuration
|
||||||
|
|
||||||
|
```
|
||||||
|
mail-service-notification:
|
||||||
|
script: mail-service-notification.sh
|
||||||
|
env:
|
||||||
|
NOTIFICATIONTYPE: $notification.type$
|
||||||
|
SERVICENAME: $service.name$
|
||||||
|
HOSTNAME: $host.name$
|
||||||
|
HOSTDISPLAYNAME: $host.display_name$
|
||||||
|
HOSTADDRESS: $address$
|
||||||
|
SERVICESTATE: $service.state$
|
||||||
|
LONGDATETIME: $icinga.long_date_time$
|
||||||
|
SERVICEOUTPUT: $service.output$
|
||||||
|
NOTIFICATIONAUTHORNAME: $notification.author$
|
||||||
|
NOTIFICATIONCOMMENT: $notification.comment$
|
||||||
|
SERVICEDISPLAYNAME: $service.display_name$
|
||||||
|
USEREMAIL: $user.email$
|
||||||
|
MAILFROM: $notification_from$
|
||||||
|
```
|
||||||
|
|
||||||
- `icinga2_check_commands` - hash with check command configuration
|
- `icinga2_check_commands` - hash with check command configuration
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -186,6 +207,14 @@ Install and configure Icinga2
|
||||||
accept_commands: true
|
accept_commands: true
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- `icinga2_scripts` - hash with the scripts to use by icinga
|
||||||
|
|
||||||
|
```
|
||||||
|
log-file: |
|
||||||
|
#!/bin/bash
|
||||||
|
echo "$(date) $HOSTDISPLAYNAME" >> /tmp/notification.log
|
||||||
|
```
|
||||||
|
|
||||||
## How to use
|
## How to use
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -68,6 +68,37 @@ icinga2_notifications:
|
||||||
assign: host.vars.notification.mail
|
assign: host.vars.notification.mail
|
||||||
groups: host.vars.notification.mail.groups
|
groups: host.vars.notification.mail.groups
|
||||||
users: host.vars.notification.mail.users
|
users: host.vars.notification.mail.users
|
||||||
|
icinga2_notification_commands:
|
||||||
|
mail-host-notification:
|
||||||
|
script: mail-host-notification.sh
|
||||||
|
env:
|
||||||
|
NOTIFICATIONTYPE: $notification.type$
|
||||||
|
HOSTDISPLAYNAME: $host.display_name$
|
||||||
|
HOSTNAME: $host.name$
|
||||||
|
HOSTADDRESS: $address$
|
||||||
|
HOSTSTATE: $host.state$
|
||||||
|
LONGDATETIME: $icinga.long_date_time$
|
||||||
|
HOSTOUTPUT: $host.output$
|
||||||
|
NOTIFICATIONAUTHORNAME: $notification.author$
|
||||||
|
NOTIFICATIONCOMMENT: $notification.comment$
|
||||||
|
USEREMAIL: $user.email$
|
||||||
|
MAILFROM: $notification_from$
|
||||||
|
mail-service-notification:
|
||||||
|
script: mail-service-notification.sh
|
||||||
|
env:
|
||||||
|
NOTIFICATIONTYPE: $notification.type$
|
||||||
|
SERVICENAME: $service.name$
|
||||||
|
HOSTNAME: $host.name$
|
||||||
|
HOSTDISPLAYNAME: $host.display_name$
|
||||||
|
HOSTADDRESS: $address$
|
||||||
|
SERVICESTATE: $service.state$
|
||||||
|
LONGDATETIME: $icinga.long_date_time$
|
||||||
|
SERVICEOUTPUT: $service.output$
|
||||||
|
NOTIFICATIONAUTHORNAME: $notification.author$
|
||||||
|
NOTIFICATIONCOMMENT: $notification.comment$
|
||||||
|
SERVICEDISPLAYNAME: $service.display_name$
|
||||||
|
USEREMAIL: $user.email$
|
||||||
|
MAILFROM: $notification_from$
|
||||||
icinga2_features: {}
|
icinga2_features: {}
|
||||||
icinga2_user_groups: {}
|
icinga2_user_groups: {}
|
||||||
icinga2_host_groups: {}
|
icinga2_host_groups: {}
|
||||||
|
@ -76,3 +107,4 @@ icinga2_users: {}
|
||||||
icinga2_api_users: {}
|
icinga2_api_users: {}
|
||||||
icinga2_check_commands: {}
|
icinga2_check_commands: {}
|
||||||
icinga2_event_commands: {}
|
icinga2_event_commands: {}
|
||||||
|
icinga2_scripts: {}
|
||||||
|
|
|
@ -21,6 +21,13 @@
|
||||||
assign: (host.address || host.address6) && host.vars.os == "Linux"
|
assign: (host.address || host.address6) && host.vars.os == "Linux"
|
||||||
options:
|
options:
|
||||||
event_command: ping_event
|
event_command: ping_event
|
||||||
|
icinga2_notification_commands:
|
||||||
|
date:
|
||||||
|
script: test-notification.sh
|
||||||
|
icinga2_scripts:
|
||||||
|
test-notification.sh: |
|
||||||
|
#!/bin/bash
|
||||||
|
date >> /tmp/notification.log
|
||||||
icinga2_hosts:
|
icinga2_hosts:
|
||||||
localhost:
|
localhost:
|
||||||
template: generic-host
|
template: generic-host
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import os, re
|
|
||||||
import testinfra.utils.ansible_runner
|
import testinfra.utils.ansible_runner
|
||||||
|
|
||||||
def test_packages(host):
|
def test_packages(host):
|
||||||
|
@ -34,6 +33,15 @@ def test_config_templates(host):
|
||||||
assert config.contains('os = "Linux"')
|
assert config.contains('os = "Linux"')
|
||||||
|
|
||||||
def test_config_commands(host):
|
def test_config_commands(host):
|
||||||
|
config = host.file('/etc/icinga2/conf.d/commands.conf')
|
||||||
|
assert config.exists
|
||||||
|
assert config.is_file
|
||||||
|
assert config.user == 'root'
|
||||||
|
assert config.group == 'nagios'
|
||||||
|
assert config.mode == 0o640
|
||||||
|
assert config.contains('NotificationCommand "date"')
|
||||||
|
|
||||||
|
def test_config_check_commands(host):
|
||||||
config = host.file('/etc/icinga2/conf.d/check_commands.conf')
|
config = host.file('/etc/icinga2/conf.d/check_commands.conf')
|
||||||
assert config.exists
|
assert config.exists
|
||||||
assert config.is_file
|
assert config.is_file
|
||||||
|
@ -42,7 +50,7 @@ def test_config_commands(host):
|
||||||
assert config.mode == 0o640
|
assert config.mode == 0o640
|
||||||
assert config.contains('value = "$http_vhost$"')
|
assert config.contains('value = "$http_vhost$"')
|
||||||
|
|
||||||
def test_config_commands(host):
|
def test_config_database(host):
|
||||||
config = host.file('/etc/icinga2/conf.d/ido-db.conf')
|
config = host.file('/etc/icinga2/conf.d/ido-db.conf')
|
||||||
assert config.exists
|
assert config.exists
|
||||||
assert config.is_file
|
assert config.is_file
|
||||||
|
@ -51,7 +59,7 @@ def test_config_commands(host):
|
||||||
assert config.mode == 0o640
|
assert config.mode == 0o640
|
||||||
assert config.contains('password = "test"')
|
assert config.contains('password = "test"')
|
||||||
|
|
||||||
def test_config_commands(host):
|
def test_config_timeperiods(host):
|
||||||
config = host.file('/etc/icinga2/conf.d/timeperiods.conf')
|
config = host.file('/etc/icinga2/conf.d/timeperiods.conf')
|
||||||
assert config.exists
|
assert config.exists
|
||||||
assert config.is_file
|
assert config.is_file
|
||||||
|
@ -69,6 +77,14 @@ def test_config_notifications(host):
|
||||||
assert config.mode == 0o640
|
assert config.mode == 0o640
|
||||||
assert config.contains('user_groups = host.vars.notification.mail.groups')
|
assert config.contains('user_groups = host.vars.notification.mail.groups')
|
||||||
|
|
||||||
|
def test_script(host):
|
||||||
|
path = host.file('/etc/icinga2/scripts/test-notification.sh')
|
||||||
|
assert path.exists
|
||||||
|
assert path.is_file
|
||||||
|
assert path.user == 'root'
|
||||||
|
assert path.group == 'nagios'
|
||||||
|
assert path.mode == 0o750
|
||||||
|
assert path.contains('date >> /tmp/notification.log')
|
||||||
|
|
||||||
def test_service(host):
|
def test_service(host):
|
||||||
service = host.service('icinga2')
|
service = host.service('icinga2')
|
||||||
|
|
|
@ -6,6 +6,18 @@
|
||||||
notify: reload icinga2
|
notify: reload icinga2
|
||||||
tags: icinga2
|
tags: icinga2
|
||||||
|
|
||||||
|
- name: copy scripts
|
||||||
|
ansible.builtin.copy:
|
||||||
|
content: '{{ item.value }}'
|
||||||
|
dest: '/etc/icinga2/scripts/{{ item.key }}'
|
||||||
|
owner: root
|
||||||
|
group: nagios
|
||||||
|
mode: 0750
|
||||||
|
loop: '{{ icinga2_scripts|dict2items }}'
|
||||||
|
loop_control:
|
||||||
|
label: '{{ item.key }}'
|
||||||
|
tags: icinga2
|
||||||
|
|
||||||
- name: copy config files
|
- name: copy config files
|
||||||
ansible.builtin.template:
|
ansible.builtin.template:
|
||||||
src: '{{ item }}.conf.j2'
|
src: '{{ item }}.conf.j2'
|
||||||
|
@ -15,6 +27,7 @@
|
||||||
mode: 0640
|
mode: 0640
|
||||||
loop:
|
loop:
|
||||||
- check_commands
|
- check_commands
|
||||||
|
- commands
|
||||||
- groups
|
- groups
|
||||||
- hosts
|
- hosts
|
||||||
- notifications
|
- notifications
|
||||||
|
|
16
templates/commands.conf.j2
Normal file
16
templates/commands.conf.j2
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# {{ ansible_managed }}
|
||||||
|
{% for name, command in icinga2_notification_commands.items() %}
|
||||||
|
|
||||||
|
object NotificationCommand "{{ name }}" {
|
||||||
|
command = [ ConfigDir + "/scripts/{{ command.script }}" ]
|
||||||
|
|
||||||
|
{% if command.env is defined %}
|
||||||
|
env = {
|
||||||
|
{% for env, value in command.env.items() %}
|
||||||
|
{{ env }} = {% if value is number %}{{ value }}{% else %}"{{ value }}"{% endif %}
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
}
|
||||||
|
{% endif %}
|
||||||
|
}
|
||||||
|
{% endfor %}
|
Loading…
Reference in a new issue