feat(systemd-notify): allow multiple failure scripts
All checks were successful
Check meta / check_dns (pull_request) Successful in 14s
Check meta / check_dns (push) Successful in 18s
Check workflows / check_workflows (pull_request) Successful in 17s
Check meta / check_meta (push) Successful in 18s
Check meta / check_meta (pull_request) Successful in 21s
Build all the nodes / Jaccess04 (pull_request) Successful in 25s
Build all the nodes / Jaccess01 (pull_request) Successful in 25s
Run pre-commit on all files / pre-commit (pull_request) Successful in 29s
Build all the nodes / ap01 (pull_request) Successful in 41s
Build all the nodes / bridge01 (pull_request) Successful in 46s
Build all the nodes / cof02 (pull_request) Successful in 51s
Build all the nodes / build01 (pull_request) Successful in 57s
Build all the nodes / geo01 (pull_request) Successful in 50s
Build all the nodes / geo02 (pull_request) Successful in 51s
Build all the nodes / hypervisor01 (pull_request) Successful in 54s
Build all the nodes / hypervisor03 (pull_request) Successful in 53s
Build all the nodes / hypervisor02 (pull_request) Successful in 1m0s
Build all the nodes / compute01 (pull_request) Successful in 1m19s
Build all the nodes / netcore01 (pull_request) Successful in 24s
Build all the nodes / netcore02 (pull_request) Successful in 26s
Build all the nodes / iso (pull_request) Successful in 55s
Build all the nodes / lab-router01 (pull_request) Successful in 46s
Build the shell / build-shell (pull_request) Successful in 24s
Build all the nodes / tower01 (pull_request) Successful in 46s
Build all the nodes / web02 (pull_request) Successful in 48s
Build all the nodes / rescue01 (pull_request) Successful in 1m14s
Build all the nodes / vault01 (pull_request) Successful in 1m4s
Build all the nodes / krz01 (pull_request) Successful in 1m45s
Build all the nodes / web03 (pull_request) Successful in 1m1s
Build all the nodes / zulip01 (pull_request) Successful in 57s
Build all the nodes / web01 (pull_request) Successful in 1m13s
Build all the nodes / storage01 (pull_request) Successful in 1m38s
Build all the nodes / Jaccess04 (push) Successful in 24s
Build all the nodes / Jaccess01 (push) Successful in 28s
Run pre-commit on all files / pre-commit (push) Successful in 30s
Build all the nodes / ap01 (push) Successful in 43s
Build all the nodes / bridge01 (push) Successful in 48s
Build all the nodes / netcore01 (push) Successful in 25s
Build all the nodes / hypervisor01 (push) Successful in 52s
Build all the nodes / geo01 (push) Successful in 57s
Build all the nodes / cof02 (push) Successful in 1m1s
Build all the nodes / hypervisor03 (push) Successful in 1m0s
Build all the nodes / hypervisor02 (push) Successful in 1m1s
Build all the nodes / geo02 (push) Successful in 1m2s
Build all the nodes / build01 (push) Successful in 1m4s
Build all the nodes / netcore02 (push) Successful in 22s
Build all the nodes / iso (push) Successful in 1m4s
Build all the nodes / lab-router01 (push) Successful in 55s
Build all the nodes / compute01 (push) Successful in 1m20s
Build all the nodes / krz01 (push) Successful in 1m36s
Build all the nodes / tower01 (push) Successful in 47s
Build the shell / build-shell (push) Successful in 21s
Build all the nodes / vault01 (push) Successful in 56s
Build all the nodes / web02 (push) Successful in 51s
Build all the nodes / rescue01 (push) Successful in 1m10s
Build all the nodes / web03 (push) Successful in 54s
Build all the nodes / zulip01 (push) Successful in 46s
Build all the nodes / web01 (push) Successful in 1m8s
Build all the nodes / storage01 (push) Successful in 1m35s

This commit is contained in:
catvayor 2025-06-14 22:30:19 +02:00
parent c1afcb7768
commit d6300e6e19
2 changed files with 30 additions and 33 deletions

View file

@ -6,44 +6,44 @@
let
inherit (lib)
mkEnableOption
mkIf
getExe
mapAttrs'
mapAttrsToList
mkOption
mkForce
optional
nameValuePair
;
inherit (lib.types) attrsOf str submodule;
inherit (lib.types) attrsOf package submodule;
cfg = config.services.systemd-notify;
in
{
options.services.systemd-notify = {
enable = mkEnableOption "notifications when a systemd unit fails.";
command = mkOption {
type = str;
description = ''
Command to run on failure of a systemd unit.
Takes the name of the failed unit as an argument.
'';
};
options.services.systemd-notify = mkOption {
type = attrsOf package;
description = ''
Commands to execute when a systemd unit fails.
Attrs keys will be the unit name and attrs value is the command that
will be run with the name of the failed unit as an argument.
'';
default = { };
};
options.systemd.services = mkOption {
type = attrsOf (submodule {
config.onFailure = optional cfg.enable "email@%n.service";
config.onFailure = mapAttrsToList (name: _: "${name}@%n.service") cfg;
});
};
config = mkIf cfg.enable {
systemd.services."email@" = {
description = "Sends a status mail via sendmail on service failures.";
config.systemd.services = mapAttrs' (
name: script:
nameValuePair "${name}@" {
description = "Run ${name} script on service failures.";
onFailure = mkForce [ ]; # Avoid recursive failures
serviceConfig = {
ExecStart = "${cfg.command} %i";
ExecStart = "${getExe script} %i";
Type = "oneshot";
};
};
};
}
) cfg;
}