infrastructure/modules/nixos/systemd-notify.nix
catvayor d6300e6e19
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
feat(systemd-notify): allow multiple failure scripts
2025-06-17 17:11:56 +02:00

49 lines
1.1 KiB
Nix

# SPDX-FileCopyrightText: 2024 Tom Hubrecht <tom.hubrecht@dgnum.eu>
#
# SPDX-License-Identifier: EUPL-1.2
{ config, lib, ... }:
let
inherit (lib)
getExe
mapAttrs'
mapAttrsToList
mkOption
mkForce
nameValuePair
;
inherit (lib.types) attrsOf package submodule;
cfg = config.services.systemd-notify;
in
{
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 = mapAttrsToList (name: _: "${name}@%n.service") cfg;
});
};
config.systemd.services = mapAttrs' (
name: script:
nameValuePair "${name}@" {
description = "Run ${name} script on service failures.";
onFailure = mkForce [ ]; # Avoid recursive failures
serviceConfig = {
ExecStart = "${getExe script} %i";
Type = "oneshot";
};
}
) cfg;
}