diff --git a/nixos/doc/manual/release-notes/rl-1903.xml b/nixos/doc/manual/release-notes/rl-1903.xml
index 4f3e632c3777..1d9b6ecc0e2e 100644
--- a/nixos/doc/manual/release-notes/rl-1903.xml
+++ b/nixos/doc/manual/release-notes/rl-1903.xml
@@ -165,6 +165,12 @@
If you want to keep slurmctld running as root, set
services.slurm.user = root.
+
+ The options services.slurm.nodeName and
+ services.slurm.partitionName are now sets of
+ strings to correctly reflect that fact that each of these
+ options can occour more than once in the configuration.
+
diff --git a/nixos/modules/services/computing/slurm/slurm.nix b/nixos/modules/services/computing/slurm/slurm.nix
index d9a201dc7ed8..a3f2367dba40 100644
--- a/nixos/modules/services/computing/slurm/slurm.nix
+++ b/nixos/modules/services/computing/slurm/slurm.nix
@@ -16,8 +16,8 @@ let
SlurmUser=${cfg.user}
${optionalString (cfg.controlMachine != null) ''controlMachine=${cfg.controlMachine}''}
${optionalString (cfg.controlAddr != null) ''controlAddr=${cfg.controlAddr}''}
- ${optionalString (cfg.nodeName != null) ''nodeName=${cfg.nodeName}''}
- ${optionalString (cfg.partitionName != null) ''partitionName=${cfg.partitionName}''}
+ ${toString (map (x: "NodeName=${x}\n") cfg.nodeName)}
+ ${toString (map (x: "PartitionName=${x}\n") cfg.partitionName)}
PlugStackConfig=${plugStackConfig}
ProctrackType=${cfg.procTrackType}
${cfg.extraConfig}
@@ -149,9 +149,9 @@ in
};
nodeName = mkOption {
- type = types.nullOr types.str;
- default = null;
- example = "linux[1-32] CPUs=1 State=UNKNOWN";
+ type = types.listOf types.str;
+ default = [];
+ example = literalExample ''[ "linux[1-32] CPUs=1 State=UNKNOWN" ];'';
description = ''
Name that SLURM uses to refer to a node (or base partition for BlueGene
systems). Typically this would be the string that "/bin/hostname -s"
@@ -160,9 +160,9 @@ in
};
partitionName = mkOption {
- type = types.nullOr types.str;
- default = null;
- example = "debug Nodes=linux[1-32] Default=YES MaxTime=INFINITE State=UP";
+ type = types.listOf types.str;
+ default = [];
+ example = literalExample ''[ "debug Nodes=linux[1-32] Default=YES MaxTime=INFINITE State=UP" ];'';
description = ''
Name by which the partition may be referenced. Note that now you have
to write the partition's parameters after the name.
diff --git a/nixos/tests/slurm.nix b/nixos/tests/slurm.nix
index 54ea1ee7894e..6937a5f0991e 100644
--- a/nixos/tests/slurm.nix
+++ b/nixos/tests/slurm.nix
@@ -4,11 +4,8 @@ let
slurmconfig = {
controlMachine = "control";
- nodeName = ''
- control
- NodeName=node[1-3] CPUs=1 State=UNKNOWN
- '';
- partitionName = "debug Nodes=node[1-3] Default=YES MaxTime=INFINITE State=UP";
+ nodeName = [ "node[1-3] CPUs=1 State=UNKNOWN" ];
+ partitionName = [ "debug Nodes=node[1-3] Default=YES MaxTime=INFINITE State=UP" ];
extraConfig = ''
AccountingStorageHost=dbd
AccountingStorageType=accounting_storage/slurmdbd