nixos/systemd: validate the values of systemd.services.<name>.after

and similar option. Notably check that they end with one of .service,
.target, etc.
This commit is contained in:
Guillaume Girol 2021-12-27 12:00:00 +00:00
parent cb372c3b88
commit 2a37dd8ab3
2 changed files with 15 additions and 12 deletions

View File

@ -11,6 +11,9 @@ in rec {
mkPathSafeName = lib.replaceChars ["@" ":" "\\" "[" "]"] ["-" "-" "-" "" ""];
# a type for options that take a unit name
unitNameType = types.strMatching "[a-zA-Z0-9@%:_.\\-]+[.](service|socket|device|mount|automount|swap|target|path|timer|scope|slice)";
makeUnit = name: unit:
if unit.enable then
pkgs.runCommand "unit-${mkPathSafeName name}"

View File

@ -45,7 +45,7 @@ in rec {
requiredBy = mkOption {
default = [];
type = types.listOf types.str;
type = types.listOf unitNameType;
description = ''
Units that require (i.e. depend on and need to go down with)
this unit. The discussion under <literal>wantedBy</literal>
@ -56,7 +56,7 @@ in rec {
wantedBy = mkOption {
default = [];
type = types.listOf types.str;
type = types.listOf unitNameType;
description = ''
Units that want (i.e. depend on) this unit. The standard way
to make a unit start by default at boot is to set this option
@ -73,7 +73,7 @@ in rec {
aliases = mkOption {
default = [];
type = types.listOf types.str;
type = types.listOf unitNameType;
description = "Aliases of that unit.";
};
@ -110,7 +110,7 @@ in rec {
requires = mkOption {
default = [];
type = types.listOf types.str;
type = types.listOf unitNameType;
description = ''
Start the specified units when this unit is started, and stop
this unit when the specified units are stopped or fail.
@ -119,7 +119,7 @@ in rec {
wants = mkOption {
default = [];
type = types.listOf types.str;
type = types.listOf unitNameType;
description = ''
Start the specified units when this unit is started.
'';
@ -127,7 +127,7 @@ in rec {
after = mkOption {
default = [];
type = types.listOf types.str;
type = types.listOf unitNameType;
description = ''
If the specified units are started at the same time as
this unit, delay this unit until they have started.
@ -136,7 +136,7 @@ in rec {
before = mkOption {
default = [];
type = types.listOf types.str;
type = types.listOf unitNameType;
description = ''
If the specified units are started at the same time as
this unit, delay them until this unit has started.
@ -145,7 +145,7 @@ in rec {
bindsTo = mkOption {
default = [];
type = types.listOf types.str;
type = types.listOf unitNameType;
description = ''
Like requires, but in addition, if the specified units
unexpectedly disappear, this unit will be stopped as well.
@ -154,7 +154,7 @@ in rec {
partOf = mkOption {
default = [];
type = types.listOf types.str;
type = types.listOf unitNameType;
description = ''
If the specified units are stopped or restarted, then this
unit is stopped or restarted as well.
@ -163,7 +163,7 @@ in rec {
conflicts = mkOption {
default = [];
type = types.listOf types.str;
type = types.listOf unitNameType;
description = ''
If the specified units are started, then this unit is stopped
and vice versa.
@ -172,7 +172,7 @@ in rec {
requisite = mkOption {
default = [];
type = types.listOf types.str;
type = types.listOf unitNameType;
description = ''
Similar to requires. However if the units listed are not started,
they will not be started and the transaction will fail.
@ -203,7 +203,7 @@ in rec {
onFailure = mkOption {
default = [];
type = types.listOf types.str;
type = types.listOf unitNameType;
description = ''
A list of one or more units that are activated when
this unit enters the "failed" state.