vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / continuous-integration / jenkins / slave.nix
blobd5a6b93a6cf8d98505aa9f7821c612e3d792c7ff
1 { config, lib, pkgs, ... }:
3 let
4   inherit (lib) mkIf mkOption types;
5   cfg = config.services.jenkinsSlave;
6   masterCfg = config.services.jenkins;
7 in {
8   options = {
9     services.jenkinsSlave = {
10       # todo:
11       # * assure the profile of the jenkins user has a JRE and any specified packages. This would
12       # enable ssh slaves.
13       # * Optionally configure the node as a jenkins ad-hoc slave. This would imply configuration
14       # properties for the master node.
15       enable = mkOption {
16         type = types.bool;
17         default = false;
18         description = ''
19           If true the system will be configured to work as a jenkins slave.
20           If the system is also configured to work as a jenkins master then this has no effect.
21           In progress: Currently only assures the jenkins user is configured.
22         '';
23       };
25       user = mkOption {
26         default = "jenkins";
27         type = types.str;
28         description = ''
29           User the jenkins slave agent should execute under.
30         '';
31       };
33       group = mkOption {
34         default = "jenkins";
35         type = types.str;
36         description = ''
37           If the default slave agent user "jenkins" is configured then this is
38           the primary group of that user.
39         '';
40       };
42       home = mkOption {
43         default = "/var/lib/jenkins";
44         type = types.path;
45         description = ''
46           The path to use as JENKINS_HOME. If the default user "jenkins" is configured then
47           this is the home of the "jenkins" user.
48         '';
49       };
51       javaPackage = lib.mkPackageOption pkgs "jdk" { };
52     };
53   };
55   config = mkIf (cfg.enable && !masterCfg.enable) {
56     users.groups = lib.optionalAttrs (cfg.group == "jenkins") {
57       jenkins.gid = config.ids.gids.jenkins;
58     };
60     users.users = lib.optionalAttrs (cfg.user == "jenkins") {
61       jenkins = {
62         description = "jenkins user";
63         createHome = true;
64         home = cfg.home;
65         group = cfg.group;
66         useDefaultShell = true;
67         uid = config.ids.uids.jenkins;
68       };
69     };
71     programs.java = {
72       enable = true;
73       package = cfg.javaPackage;
74     };
75   };