nagios: add nixos test
This commit is contained in:
parent
be25e45fc8
commit
cb38bf33e7
@ -179,6 +179,7 @@ in
|
|||||||
mysql = handleTest ./mysql.nix {};
|
mysql = handleTest ./mysql.nix {};
|
||||||
mysqlBackup = handleTest ./mysql-backup.nix {};
|
mysqlBackup = handleTest ./mysql-backup.nix {};
|
||||||
mysqlReplication = handleTest ./mysql-replication.nix {};
|
mysqlReplication = handleTest ./mysql-replication.nix {};
|
||||||
|
nagios = handleTest ./nagios.nix {};
|
||||||
nat.firewall = handleTest ./nat.nix { withFirewall = true; };
|
nat.firewall = handleTest ./nat.nix { withFirewall = true; };
|
||||||
nat.firewall-conntrack = handleTest ./nat.nix { withFirewall = true; withConntrackHelpers = true; };
|
nat.firewall-conntrack = handleTest ./nat.nix { withFirewall = true; withConntrackHelpers = true; };
|
||||||
nat.standalone = handleTest ./nat.nix { withFirewall = false; };
|
nat.standalone = handleTest ./nat.nix { withFirewall = false; };
|
||||||
|
116
nixos/tests/nagios.nix
Normal file
116
nixos/tests/nagios.nix
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
import ./make-test-python.nix (
|
||||||
|
{ pkgs, ... }: {
|
||||||
|
name = "nagios";
|
||||||
|
meta = with pkgs.stdenv.lib.maintainers; {
|
||||||
|
maintainers = [ symphorien ];
|
||||||
|
};
|
||||||
|
|
||||||
|
machine = { lib, ... }: let
|
||||||
|
writer = pkgs.writeShellScript "write" ''
|
||||||
|
set -x
|
||||||
|
echo "$@" >> /tmp/notifications
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
{
|
||||||
|
# tested service
|
||||||
|
services.sshd.enable = true;
|
||||||
|
# nagios
|
||||||
|
services.nagios = {
|
||||||
|
enable = true;
|
||||||
|
# make state transitions faster
|
||||||
|
extraConfig.interval_length = "5";
|
||||||
|
objectDefs =
|
||||||
|
(map (x: "${pkgs.nagios}/etc/objects/${x}.cfg") [ "templates" "timeperiods" "commands" ]) ++ [
|
||||||
|
(
|
||||||
|
pkgs.writeText "objects.cfg" ''
|
||||||
|
# notifications are written to /tmp/notifications
|
||||||
|
define command {
|
||||||
|
command_name notify-host-by-file
|
||||||
|
command_line ${writer} "$HOSTNAME is $HOSTSTATE$"
|
||||||
|
}
|
||||||
|
define command {
|
||||||
|
command_name notify-service-by-file
|
||||||
|
command_line ${writer} "$SERVICEDESC$ is $SERVICESTATE$"
|
||||||
|
}
|
||||||
|
|
||||||
|
# nagios boilerplate
|
||||||
|
define contact {
|
||||||
|
contact_name alice
|
||||||
|
alias alice
|
||||||
|
host_notifications_enabled 1
|
||||||
|
service_notifications_enabled 1
|
||||||
|
service_notification_period 24x7
|
||||||
|
host_notification_period 24x7
|
||||||
|
service_notification_options w,u,c,r,f,s
|
||||||
|
host_notification_options d,u,r,f,s
|
||||||
|
service_notification_commands notify-service-by-file
|
||||||
|
host_notification_commands notify-host-by-file
|
||||||
|
email foo@example.com
|
||||||
|
}
|
||||||
|
define contactgroup {
|
||||||
|
contactgroup_name admins
|
||||||
|
alias Admins
|
||||||
|
members alice
|
||||||
|
}
|
||||||
|
define hostgroup{
|
||||||
|
hostgroup_name allhosts
|
||||||
|
alias All hosts
|
||||||
|
}
|
||||||
|
|
||||||
|
# monitored objects
|
||||||
|
define host {
|
||||||
|
use generic-host
|
||||||
|
host_name localhost
|
||||||
|
alias localhost
|
||||||
|
address localhost
|
||||||
|
hostgroups allhosts
|
||||||
|
contact_groups admins
|
||||||
|
# make state transitions faster.
|
||||||
|
max_check_attempts 2
|
||||||
|
check_interval 1
|
||||||
|
retry_interval 1
|
||||||
|
}
|
||||||
|
define service {
|
||||||
|
use generic-service
|
||||||
|
host_name localhost
|
||||||
|
service_description ssh
|
||||||
|
check_command check_ssh
|
||||||
|
# make state transitions faster.
|
||||||
|
max_check_attempts 2
|
||||||
|
check_interval 1
|
||||||
|
retry_interval 1
|
||||||
|
}
|
||||||
|
''
|
||||||
|
)
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
testScript = { ... }: ''
|
||||||
|
with subtest("ensure sshd starts"):
|
||||||
|
machine.wait_for_unit("sshd.service")
|
||||||
|
|
||||||
|
|
||||||
|
with subtest("ensure nagios starts"):
|
||||||
|
machine.wait_for_file("/var/log/nagios/current")
|
||||||
|
|
||||||
|
|
||||||
|
def assert_notify(text):
|
||||||
|
machine.wait_for_file("/tmp/notifications")
|
||||||
|
real = machine.succeed("cat /tmp/notifications").strip()
|
||||||
|
print(f"got {real!r}, expected {text!r}")
|
||||||
|
assert text == real
|
||||||
|
|
||||||
|
|
||||||
|
with subtest("ensure we get a notification when sshd is down"):
|
||||||
|
machine.succeed("systemctl stop sshd")
|
||||||
|
assert_notify("ssh is CRITICAL")
|
||||||
|
|
||||||
|
|
||||||
|
with subtest("ensure tests can succeed"):
|
||||||
|
machine.succeed("systemctl start sshd")
|
||||||
|
machine.succeed("rm /tmp/notifications")
|
||||||
|
assert_notify("ssh is OK")
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
)
|
@ -1,4 +1,4 @@
|
|||||||
{ stdenv, fetchurl, perl, php, gd, libpng, zlib, unzip }:
|
{ stdenv, fetchurl, perl, php, gd, libpng, zlib, unzip, nixosTests }:
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
pname = "nagios";
|
pname = "nagios";
|
||||||
@ -27,6 +27,9 @@ stdenv.mkDerivation rec {
|
|||||||
sed -i 's@/bin/@@g' $out/etc/objects/commands.cfg
|
sed -i 's@/bin/@@g' $out/etc/objects/commands.cfg
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
passthru.tests = {
|
||||||
|
inherit (nixosTests) nagios;
|
||||||
|
};
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
description = "A host, service and network monitoring program";
|
description = "A host, service and network monitoring program";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user