diff options
author | Will Fancher <elvishjerricco@gmail.com> | 2023-10-03 00:28:50 -0700 |
---|---|---|
committer | Jade Lovelace <software@lfcode.ca> | 2024-01-18 16:28:41 -0800 |
commit | 367d101073db523e88cbad02135ce3fd2b847b17 (patch) | |
tree | 0391b306b2ab804527162ac5668fff109a25e923 /nixos/modules/system | |
parent | 062be41387b9d571fdb96102a2e676944abefe0d (diff) | |
download | nixlib-367d101073db523e88cbad02135ce3fd2b847b17.tar nixlib-367d101073db523e88cbad02135ce3fd2b847b17.tar.gz nixlib-367d101073db523e88cbad02135ce3fd2b847b17.tar.bz2 nixlib-367d101073db523e88cbad02135ce3fd2b847b17.tar.lz nixlib-367d101073db523e88cbad02135ce3fd2b847b17.tar.xz nixlib-367d101073db523e88cbad02135ce3fd2b847b17.tar.zst nixlib-367d101073db523e88cbad02135ce3fd2b847b17.zip |
nixos/systemd: assert After=network-online.target -> Wants=
This will catch broken services at the evaluation stage.
Diffstat (limited to 'nixos/modules/system')
-rw-r--r-- | nixos/modules/system/boot/systemd.nix | 45 |
1 files changed, 31 insertions, 14 deletions
diff --git a/nixos/modules/system/boot/systemd.nix b/nixos/modules/system/boot/systemd.nix index b02f615245d4..331ca5103ba6 100644 --- a/nixos/modules/system/boot/systemd.nix +++ b/nixos/modules/system/boot/systemd.nix @@ -451,20 +451,37 @@ in cfg.services ); - assertions = concatLists ( - mapAttrsToList - (name: service: - map (message: { - assertion = false; - inherit message; - }) (concatLists [ - (optional ((builtins.elem "network-interfaces.target" service.after) || (builtins.elem "network-interfaces.target" service.wants)) - "Service '${name}.service' is using the deprecated target network-interfaces.target, which no longer exists. Using network.target is recommended instead." - ) - ]) - ) - cfg.services - ); + assertions = let + mkOneAssert = typeStr: name: def: { + assertion = lib.elem "network-online.target" def.after -> lib.elem "network-online.target" (def.wants ++ def.requires ++ def.bindsTo); + message = "${name}.${typeStr} is ordered after 'network-online.target' but doesn't depend on it"; + }; + mkAsserts = typeStr: lib.mapAttrsToList (mkOneAssert typeStr); + mkMountAsserts = typeStr: map (m: mkOneAssert typeStr m.what m); + in mkMerge [ + (concatLists ( + mapAttrsToList + (name: service: + map (message: { + assertion = false; + inherit message; + }) (concatLists [ + (optional ((builtins.elem "network-interfaces.target" service.after) || (builtins.elem "network-interfaces.target" service.wants)) + "Service '${name}.service' is using the deprecated target network-interfaces.target, which no longer exists. Using network.target is recommended instead." + ) + ]) + ) + cfg.services + )) + (mkAsserts "target" cfg.targets) + (mkAsserts "service" cfg.services) + (mkAsserts "socket" cfg.sockets) + (mkAsserts "timer" cfg.timers) + (mkAsserts "path" cfg.paths) + (mkMountAsserts "mount" cfg.mounts) + (mkMountAsserts "automount" cfg.automounts) + (mkAsserts "slice" cfg.slices) + ]; system.build.units = cfg.units; |