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