feat(ups): monitoring de l'onduleur #97
|
@ -1,4 +1,4 @@
|
|||
# { pkgs, ... }:
|
||||
{ pkgs, ... }:
|
||||
lbailly marked this conversation as resolved
Outdated
|
||||
{
|
||||
power.ups = {
|
||||
enable = true;
|
||||
|
@ -7,17 +7,61 @@
|
|||
port = "auto";
|
||||
};
|
||||
upsmon.enable = false;
|
||||
# users."eatonMon" = {
|
||||
# passwordFile = (pkgs.writeTextFile {
|
||||
# name = "pass";
|
||||
# text = "YFEAee2%9PuPcEKf$7vW$3a&wdvNJME%UkP2Z~RVkk4ZaQHYW^";
|
||||
# }).outPath;
|
||||
# upsmon = "primary";
|
||||
# };
|
||||
# upsmon.monitor."eaton" = {
|
||||
# user = "eatonMon";
|
||||
# };
|
||||
users."eatonMon" = {
|
||||
lbailly marked this conversation as resolved
Outdated
thubrecht
commented
Y'a pas besoin de quotes pour le username, et les majscules c'est chelou je mettrai Y'a pas besoin de quotes pour le username, et les majscules c'est chelou je mettrai `eatonmon` plutôt
lbailly
commented
Perso j'aime bien mettre les clefs des attrsOf en quotes pour bien voir que c'est pas un truc du module mais as you want Perso j'aime bien mettre les clefs des attrsOf en quotes pour bien voir que c'est pas un truc du module mais as you want
|
||||
passwordFile =
|
||||
(pkgs.writeTextFile {
|
||||
name = "pass";
|
||||
text = "YFEAee2%9PuPcEKf$7vW$3a&wdvNJME%UkP2Z~RVkk4ZaQHYW^";
|
||||
lbailly marked this conversation as resolved
Outdated
thubrecht
commented
Pareil, pas besoin de quotes pour Pareil, pas besoin de quotes pour `eaton`
|
||||
}).outPath;
|
||||
upsmon = "primary";
|
||||
};
|
||||
upsmon.monitor."eaton" = {
|
||||
user = "eatonMon";
|
||||
};
|
||||
schedulerRules =
|
||||
let
|
||||
cmdScript = pkgs.writeShellApplication {
|
||||
name = "upssched-cmd.sh";
|
||||
runtimeInputs = with pkgs; [ systemd ];
|
||||
text = ''
|
||||
case $1 in
|
||||
shutdown) shutdown now
|
||||
# TODO : warn
|
||||
# TODO : warn & log on unknown cmd
|
||||
esac
|
||||
mdebray marked this conversation as resolved
Outdated
mdebray
commented
`pkgs.writeShellApplication` est approprié ici (pour avoir de l'analyse statique du script bash)
|
||||
'';
|
||||
};
|
||||
mdebray marked this conversation as resolved
Outdated
mdebray
commented
Il me semble que mettre ça dans le state directory de upsmon ( Il me semble que mettre ça dans le state directory de upsmon (`/var/lib/upsmon`) évite d'avoir besoin des tmpfiles.
lbailly
commented
Le dossier existe pas non plus, et pour des raison de sécurité on veut qu'il soit en 0700 (pas sur que la raison s'applique à nixos mais au cas où https://networkupstools.org/docs/man/upssched.conf.html), donc tmpfiles fait bien le taff Le dossier existe pas non plus, et pour des raison de sécurité on veut qu'il soit en 0700 (pas sur que la raison s'applique à nixos mais au cas où https://networkupstools.org/docs/man/upssched.conf.html), donc tmpfiles fait bien le taff
Pour l'endroit, j'ai juste pris le dossier qu'il proposait par défaut
mdebray
commented
ok ok
|
||||
rules = ''
|
||||
CMDSCRIPT ${cmdScript}/bin/upssched-cmd.sh
|
||||
lbailly marked this conversation as resolved
Outdated
mdebray
commented
`fai+monitoring@dgnum.eu` plutôt
|
||||
PIPEFN /var/state/ups/upssched/upssched.pipe
|
||||
LOCKFN /var/state/ups/upssched/upssched.lock
|
||||
AT LOWBATT * EXECUTE shutdown
|
||||
AT ONBATT * START-TIMER shutdown 900
|
||||
AT ONLINE * CANCEL-TIMER shutdown
|
||||
# TODO : warn admins at COMMBAD NOCOMM BYPASS (and maybe at ONBATT)
|
||||
'';
|
||||
in
|
||||
(pkgs.writeTextFile {
|
||||
name = "upssched.conf";
|
||||
text = rules;
|
||||
}).outPath;
|
||||
};
|
||||
|
||||
lbailly marked this conversation as resolved
Outdated
thubrecht
commented
```
CMDSCRIPT ${lib.getExe cmdScript}
```
|
||||
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;
|
||||
};
|
||||
thubrecht marked this conversation as resolved
Outdated
thubrecht
commented
Tu peux inline les rules je pense, et le Tu peux inline les rules je pense, et le `outPath` n'est pas nécessaire
lbailly
commented
il est nécessaire car sinon ça évalue pas à cause de > le `outPath` n'est pas nécessaire
il est nécessaire car sinon ça évalue pas à cause de [`power.ups.schedulerRules`](https://search.nixos.org/options?channel=unstable&show=power.ups.schedulerRules&from=0&size=50&sort=relevance&type=packages&query=power.ups) qui demande un string et pas un path, donc la dérivation se transforme pas auto dans le bon type
|
||||
|
||||
services.prometheus.exporters.nut = {
|
||||
enable = true;
|
||||
listenAddress = "100.80.255.180";
|
||||
|
|
Le
lib
c'est pour legetExe
d'ensuite