vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / monitoring / prometheus / exporters / nut.nix
blob157bdadddfc99aef9c8ec132beb09826ec79b55b
1 { config, lib, pkgs, options, ... }:
3 let
4   cfg = config.services.prometheus.exporters.nut;
5   inherit (lib)
6     mkOption
7     types
8     optionalString
9     concatStringsSep
10     ;
13   port = 9199;
14   extraOpts = {
15     nutServer = mkOption {
16       type = types.str;
17       default = "127.0.0.1";
18       description = ''
19         Hostname or address of the NUT server
20       '';
21     };
22     nutUser = mkOption {
23       type = types.str;
24       default = "";
25       example = "nut";
26       description = ''
27         The user to log in into NUT server. If set, passwordPath should
28         also be set.
30         Default NUT configs usually permit reading variables without
31         authentication.
32       '';
33     };
34     passwordPath = mkOption {
35       type = types.nullOr types.path;
36       default = null;
37       apply = final: if final == null then null else toString final;
38       description = ''
39         A run-time path to the nutUser password file, which should be
40         provisioned outside of Nix store.
41       '';
42     };
43     nutVariables = mkOption {
44       type = types.listOf types.str;
45       default = [ ];
46       description = ''
47         List of NUT variable names to monitor.
49         If no variables are set, all numeric variables will be exported automatically.
50         See the [upstream docs](https://github.com/DRuggeri/nut_exporter?tab=readme-ov-file#variables-and-information)
51         for more information.
52       '';
53     };
54   };
55   serviceOpts = {
56     script = ''
57       ${optionalString (cfg.passwordPath != null)
58       "export NUT_EXPORTER_PASSWORD=$(cat ${toString cfg.passwordPath})"}
59       ${pkgs.prometheus-nut-exporter}/bin/nut_exporter \
60         --nut.server=${cfg.nutServer} \
61         --web.listen-address="${cfg.listenAddress}:${toString cfg.port}" \
62         ${optionalString (cfg.nutUser != "") "--nut.username=${cfg.nutUser}"} \
63         ${optionalString (cfg.nutVariables != []) "--nut.vars_enable=${concatStringsSep "," cfg.nutVariables}"} \
64         ${concatStringsSep " " cfg.extraFlags}
65     '';
66   };