Tom Hubrecht
88d9b8c3e3
Some checks failed
Check meta / check_dns (pull_request) Successful in 19s
Check meta / check_meta (pull_request) Successful in 20s
Check workflows / check_workflows (pull_request) Successful in 24s
Build all the nodes / ap01 (pull_request) Successful in 1m15s
Build all the nodes / bridge01 (pull_request) Successful in 1m53s
Build all the nodes / geo01 (pull_request) Successful in 1m55s
Build all the nodes / geo02 (pull_request) Successful in 1m53s
Build all the nodes / compute01 (pull_request) Successful in 2m33s
Build all the nodes / rescue01 (pull_request) Successful in 2m13s
Build all the nodes / storage01 (pull_request) Successful in 1m57s
Run pre-commit on all files / check (pull_request) Successful in 30s
Build all the nodes / web02 (pull_request) Successful in 1m47s
Build all the nodes / vault01 (pull_request) Successful in 2m21s
Build all the nodes / web03 (pull_request) Successful in 1m40s
Build all the nodes / web01 (pull_request) Successful in 2m54s
Check meta / check_dns (push) Successful in 20s
Check meta / check_meta (push) Successful in 19s
Check workflows / check_workflows (push) Successful in 25s
Build all the nodes / ap01 (push) Successful in 1m16s
Build all the nodes / bridge01 (push) Successful in 1m41s
Build all the nodes / geo02 (push) Successful in 1m44s
Build all the nodes / geo01 (push) Successful in 1m53s
Build all the nodes / compute01 (push) Successful in 2m20s
Build all the nodes / rescue01 (push) Successful in 1m49s
Build all the nodes / storage01 (push) Successful in 1m46s
Build all the nodes / vault01 (push) Successful in 1m45s
Run pre-commit on all files / check (push) Successful in 30s
Build all the nodes / web02 (push) Has been cancelled
Build all the nodes / web01 (push) Has been cancelled
Build all the nodes / web03 (push) Has been cancelled
Signed-off-by: Tom Hubrecht <tom.hubrecht@dgnum.eu> Acked-by: Ryan Lahfa <ryan.lahfa@dgnum.eu> Acked-by: Maurice Debray <maurice.debray@dgnum.eu> Acked-by: Lubin Bailly <lubin.bailly@dgnum.eu> Acked-by: Jean-Marc Gailis <jean-marc.gailis@dgnum.eu> as the legal authority, at the time of writing, in DGNum. Acked-by: Elias Coppens <elias.coppens@dgnum.eu> as a member, at the time of writing, of the DGNum executive counsel.
102 lines
2.7 KiB
Nix
102 lines
2.7 KiB
Nix
# SPDX-FileCopyrightText: 2024 Lubin Bailly <lubin.bailly@dgnum.eu>
|
|
#
|
|
# SPDX-License-Identifier: EUPL-1.2
|
|
|
|
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
meta,
|
|
name,
|
|
...
|
|
}:
|
|
{
|
|
power.ups = {
|
|
enable = true;
|
|
|
|
ups.eaton = {
|
|
driver = "usbhid-ups";
|
|
port = "auto";
|
|
};
|
|
|
|
users.eatonmon = {
|
|
passwordFile = config.age.secrets."eatonmon-password_file".path;
|
|
upsmon = "primary";
|
|
};
|
|
|
|
upsmon.monitor.eaton = {
|
|
user = "eatonmon";
|
|
};
|
|
|
|
schedulerRules =
|
|
let
|
|
cmdScript = pkgs.writeShellApplication {
|
|
name = "upssched-cmd.sh";
|
|
runtimeInputs = with pkgs; [
|
|
systemd
|
|
msmtp
|
|
];
|
|
text = ''
|
|
case $1 in
|
|
shutdown-low) MEANING="Battery is low, shutting down.";;
|
|
shutdown-batt) MEANING="On battery for 15min, shutting down.";;
|
|
warn-batt) MEANING="Power line faillure, going on battery.";;
|
|
warn-comm) MEANING="Communication with the UPS was broken.";;
|
|
warn-bypass) MEANING="The UPS is not protecting the server, power line failure would kill $HOSTNAME instantly.";;
|
|
*) MEANING="Signal unknown, check configuration.";;
|
|
esac
|
|
sendmail -i -t <<ERRMAIL
|
|
To: fai+monitoring@dgnum.eu
|
|
Subject: [$HOSTNAME] Battery signal: $1
|
|
Content-Transfer-Encoding: 8bit
|
|
Content-Type: text/plain; charset=UTF-8
|
|
|
|
$MEANING
|
|
ERRMAIL
|
|
|
|
case $1 in
|
|
shutdown-*) shutdown 20s # let 20s to send the email
|
|
esac
|
|
'';
|
|
};
|
|
in
|
|
(pkgs.writeTextFile {
|
|
name = "upssched.conf";
|
|
text = ''
|
|
CMDSCRIPT ${lib.getExe cmdScript}
|
|
PIPEFN /var/state/ups/upssched/upssched.pipe
|
|
LOCKFN /var/state/ups/upssched/upssched.lock
|
|
AT LOWBATT * EXECUTE shutdown-low
|
|
AT ONBATT * EXECUTE warn-batt
|
|
AT ONBATT * START-TIMER shutdown-batt 900
|
|
AT ONLINE * CANCEL-TIMER shutdown-batt
|
|
AT COMMBAD * EXECUTE warn-comm
|
|
AT NOCOMM * EXECUTE warn-comm
|
|
AT BYPASS * EXECUTE warn-bypass
|
|
'';
|
|
}).outPath;
|
|
};
|
|
|
|
systemd.tmpfiles.settings."10-upsmon" =
|
|
let
|
|
root = {
|
|
user = "root";
|
|
group = "root";
|
|
mode = "0600";
|
|
};
|
|
in
|
|
{
|
|
"/var/state/ups/upssched".d = root // {
|
|
mode = "0700";
|
|
};
|
|
"/var/state/ups/upssched/upssched.pipe".p = root;
|
|
};
|
|
|
|
services.prometheus.exporters.nut = {
|
|
enable = true;
|
|
listenAddress = meta.network.${name}.netbirdIp;
|
|
port = 9199;
|
|
};
|
|
|
|
networking.firewall.interfaces.wt0.allowedTCPPorts = [ 9199 ];
|
|
}
|