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