nixos/nix-daemon: Organize buildMachine options with a submodule
This commit is contained in:
parent
50da2471c2
commit
1ed248eac2
@ -193,7 +193,92 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
buildMachines = mkOption {
|
buildMachines = mkOption {
|
||||||
type = types.listOf types.attrs;
|
type = types.loaOf (submodule ({ config }: {
|
||||||
|
options = {
|
||||||
|
sshUser = mkOption {
|
||||||
|
type = types.nullOr types.string;
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
The user as who to SSH to the build machine.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
hostName = mkOption {
|
||||||
|
type = types.string;
|
||||||
|
description = ''
|
||||||
|
The hostname of the build machine.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
system = mkOption {
|
||||||
|
type = types.string;
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
The system type the build machine can execute derivations on.
|
||||||
|
null if multiple are supported.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
systems = mkOption {
|
||||||
|
type = types.listOf types.string;
|
||||||
|
default = [];
|
||||||
|
description = ''
|
||||||
|
The system types the build machine can execute derivations on.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
sshKey = mkOption {
|
||||||
|
type = types.string;
|
||||||
|
default = "-";
|
||||||
|
description = ''
|
||||||
|
The path to the SSH private key with which to authenticate with
|
||||||
|
the build machine. <literal>"-"</literal> indicates falling back
|
||||||
|
on defaults.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
maxJobs = mkOption {
|
||||||
|
type = types.int;
|
||||||
|
default = 1;
|
||||||
|
description = ''
|
||||||
|
The number of concurrent jobs the build machine supports. The
|
||||||
|
build machine will enforce its own limits but this allows hydra
|
||||||
|
to schedule better since there is no work-stealing between build
|
||||||
|
machines.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
speedFactor = mkOption {
|
||||||
|
type = types.int;
|
||||||
|
default = 1;
|
||||||
|
description = ''
|
||||||
|
Something at indicates how fast the machine is relative to an
|
||||||
|
arbitrary norm???
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
mandatoryFeatures = mkOptions {
|
||||||
|
type = types.listOf types.string;
|
||||||
|
default = [];
|
||||||
|
decriptions = ''
|
||||||
|
A list of features derivations built with this remote are
|
||||||
|
required to opt into using. (See the documentation on Nix itself
|
||||||
|
for what those features are.)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
supportedFeatures = mkOptions {
|
||||||
|
type = types.listOf types.string;
|
||||||
|
default = [];
|
||||||
|
decriptions = ''
|
||||||
|
A list of features derivations built with this remote may choose
|
||||||
|
to use or not. (See the documentation on Nix itself for what
|
||||||
|
those features are.)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = {
|
||||||
|
assertions = [{
|
||||||
|
assertion = config.system != null || config.systems != null;
|
||||||
|
message = ''
|
||||||
|
At least one system type (via <varname>system</varname> or
|
||||||
|
<varname>systems</varname>) must be set for every build machine.
|
||||||
|
'';
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
}));
|
||||||
default = [];
|
default = [];
|
||||||
example = literalExample ''
|
example = literalExample ''
|
||||||
[ { hostName = "voila.labs.cs.uu.nl";
|
[ { hostName = "voila.labs.cs.uu.nl";
|
||||||
@ -461,14 +546,14 @@ in
|
|||||||
{ enable = cfg.buildMachines != [];
|
{ enable = cfg.buildMachines != [];
|
||||||
text =
|
text =
|
||||||
concatMapStrings (machine:
|
concatMapStrings (machine:
|
||||||
"${if machine ? sshUser then "${machine.sshUser}@" else ""}${machine.hostName} "
|
"${if machine.sshUser != null then "${machine.sshUser}@" else ""}${machine.hostName} "
|
||||||
+ machine.system or (concatStringsSep "," machine.systems)
|
+ (if machine.system != null then machine.system else concatStringsSep "," machine.systems)
|
||||||
+ " ${machine.sshKey or "-"} ${toString machine.maxJobs or 1} "
|
+ " ${machine.sshKey} ${toString machine.maxJobs} "
|
||||||
+ toString (machine.speedFactor or 1)
|
+ toString (machine.speedFactor)
|
||||||
+ " "
|
+ " "
|
||||||
+ concatStringsSep "," (machine.mandatoryFeatures or [] ++ machine.supportedFeatures or [])
|
+ concatStringsSep "," (machine.mandatoryFeatures ++ machine.supportedFeatures)
|
||||||
+ " "
|
+ " "
|
||||||
+ concatStringsSep "," machine.mandatoryFeatures or []
|
+ concatStringsSep "," machine.mandatoryFeatures
|
||||||
+ "\n"
|
+ "\n"
|
||||||
) cfg.buildMachines;
|
) cfg.buildMachines;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user