mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-01-04 03:53:56 +00:00
4f0dadbf38
After final improvements to the official formatter implementation, this commit now performs the first treewide reformat of Nix files using it. This is part of the implementation of RFC 166. Only "inactive" files are reformatted, meaning only files that aren't being touched by any PR with activity in the past 2 months. This is to avoid conflicts for PRs that might soon be merged. Later we can do a full treewide reformat to get the rest, which should not cause as many conflicts. A CI check has already been running for some time to ensure that new and already-formatted files are formatted, so the files being reformatted here should also stay formatted. This commit was automatically created and can be verified using nix-builda08b3a4d19
.tar.gz \ --argstr baseRevb32a094368
result/bin/apply-formatting $NIXPKGS_PATH
125 lines
3.9 KiB
Nix
125 lines
3.9 KiB
Nix
import ./make-test-python.nix (
|
|
{ pkgs, ... }:
|
|
{
|
|
name = "nagios";
|
|
meta = with pkgs.lib.maintainers; {
|
|
maintainers = [ symphorien ];
|
|
};
|
|
|
|
nodes.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")
|
|
'';
|
|
}
|
|
)
|