29027fd1e1
Using pkgs.lib on the spine of module evaluation is problematic because the pkgs argument depends on the result of module evaluation. To prevent an infinite recursion, pkgs and some of the modules are evaluated twice, which is inefficient. Using ‘with lib’ prevents this problem.
69 lines
2.0 KiB
Nix
69 lines
2.0 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
with lib;
|
|
let
|
|
cfg = config.services.jenkinsSlave;
|
|
masterCfg = config.services.jenkins;
|
|
in {
|
|
options = {
|
|
services.jenkinsSlave = {
|
|
# todo:
|
|
# * assure the profile of the jenkins user has a JRE and any specified packages. This would
|
|
# enable ssh slaves.
|
|
# * Optionally configure the node as a jenkins ad-hoc slave. This would imply configuration
|
|
# properties for the master node.
|
|
enable = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = ''
|
|
If true the system will be configured to work as a jenkins slave.
|
|
If the system is also configured to work as a jenkins master then this has no effect.
|
|
In progress: Currently only assures the jenkins user is configured.
|
|
'';
|
|
};
|
|
|
|
user = mkOption {
|
|
default = "jenkins";
|
|
type = with types; string;
|
|
description = ''
|
|
User the jenkins slave agent should execute under.
|
|
'';
|
|
};
|
|
|
|
group = mkOption {
|
|
default = "jenkins";
|
|
type = with types; string;
|
|
description = ''
|
|
If the default slave agent user "jenkins" is configured then this is
|
|
the primary group of that user.
|
|
'';
|
|
};
|
|
|
|
home = mkOption {
|
|
default = "/var/lib/jenkins";
|
|
type = with types; string;
|
|
description = ''
|
|
The path to use as JENKINS_HOME. If the default user "jenkins" is configured then
|
|
this is the home of the "jenkins" user.
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
|
|
config = mkIf (cfg.enable && !masterCfg.enable) {
|
|
users.extraGroups = optional (cfg.group == "jenkins") {
|
|
name = "jenkins";
|
|
gid = config.ids.gids.jenkins;
|
|
};
|
|
|
|
users.extraUsers = optional (cfg.user == "jenkins") {
|
|
name = "jenkins";
|
|
description = "jenkins user";
|
|
createHome = true;
|
|
home = cfg.home;
|
|
group = cfg.group;
|
|
useDefaultShell = true;
|
|
uid = config.ids.uids.jenkins;
|
|
};
|
|
};
|
|
}
|