1{
2 config,
3 lib,
4 pkgs,
5 ...
6}:
7let
8 cfg = config.services.heapster;
9in
10{
11 options.services.heapster = {
12 enable = lib.mkEnableOption "Heapster monitoring";
13
14 source = lib.mkOption {
15 description = "Heapster metric source";
16 example = "kubernetes:https://kubernetes.default";
17 type = lib.types.str;
18 };
19
20 sink = lib.mkOption {
21 description = "Heapster metic sink";
22 example = "influxdb:http://localhost:8086";
23 type = lib.types.str;
24 };
25
26 extraOpts = lib.mkOption {
27 description = "Heapster extra options";
28 default = "";
29 type = lib.types.separatedString " ";
30 };
31
32 package = lib.mkPackageOption pkgs "heapster" { };
33 };
34
35 config = lib.mkIf cfg.enable {
36 systemd.services.heapster = {
37 wantedBy = [ "multi-user.target" ];
38 after = [
39 "cadvisor.service"
40 "kube-apiserver.service"
41 ];
42
43 serviceConfig = {
44 ExecStart = "${cfg.package}/bin/heapster --source=${cfg.source} --sink=${cfg.sink} ${cfg.extraOpts}";
45 User = "heapster";
46 };
47 };
48
49 users.users.heapster = {
50 isSystemUser = true;
51 group = "heapster";
52 description = "Heapster user";
53 };
54 users.groups.heapster = { };
55 };
56}