59 lines
1.5 KiB
Nix
59 lines
1.5 KiB
Nix
{pkgs, config, lib, ...}:
|
|
with lib;
|
|
let
|
|
cfg = config.features.monitoring.infiniband-exporter;
|
|
|
|
python-env = pkgs.python3.withPackages (ps: with ps; [
|
|
prometheus_client
|
|
]
|
|
);
|
|
|
|
exporter = pkgs.fetchFromGitHub {
|
|
owner = "guilbaults";
|
|
repo = "infiniband-exporter";
|
|
rev = "12e7b2de049fc3c33c44e164f426dd723c8479c0";
|
|
hash = "sha256-+n09beiJEgOgX+3po7fjiwZrziug+5N4JHi7ivTYa9U=";
|
|
};
|
|
|
|
nameMap = pkgs.writeTextFile {
|
|
name = "infiniband-node-name-map.txt";
|
|
text = cfg.nameMap;
|
|
};
|
|
|
|
infiniband-exporter-service = {
|
|
systemd.services.infiniband-exporter = {
|
|
enable = true;
|
|
wantedBy = [ "multi-user.target" ];
|
|
after = [ "network.target" ];
|
|
description = "Prometheus InfiniBand exporter";
|
|
path = [ pkgs.rdma-core ];
|
|
script = "${python-env}/bin/python3 ${exporter}/infiniband-exporter.py"
|
|
+ " --port ${builtins.toString cfg.port} --can-reset-counter"
|
|
+ (if cfg.nameMap == null then "" else " --node-name-map=${nameMap}");
|
|
serviceConfig = {
|
|
RestartSec = "15s";
|
|
Restart = "on-failure";
|
|
};
|
|
};
|
|
};
|
|
|
|
in {
|
|
options.features.monitoring.infiniband-exporter = {
|
|
enable = mkEnableOption "Enable InfiniBand prometheus exporter";
|
|
|
|
port = mkOption {
|
|
type = types.ints.unsigned;
|
|
default = 9683;
|
|
description = "Collector http port";
|
|
};
|
|
|
|
nameMap = mkOption {
|
|
type = types.nullOr types.str;
|
|
default = null;
|
|
description = "Node name map";
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable infiniband-exporter-service;
|
|
}
|