vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / monitoring / prometheus / exporters / junos-czerwonk.nix
blob3519cce6e821b27c578e3d436bd159b6db03a7ee
1 { config, lib, pkgs, options, ... }:
3 let
4   cfg = config.services.prometheus.exporters.junos-czerwonk;
5   inherit (lib)
6     mkOption
7     types
8     escapeShellArg
9     mkIf
10     concatStringsSep
11     ;
13   configFile = if cfg.configuration != null then configurationFile else (escapeShellArg cfg.configurationFile);
15   configurationFile = pkgs.writeText "prometheus-junos-czerwonk-exporter.conf" (builtins.toJSON (cfg.configuration));
18   port = 9326;
19   extraOpts = {
20     environmentFile = mkOption {
21       type = types.nullOr types.str;
22       default = null;
23       description = ''
24         File containing env-vars to be substituted into the exporter's config.
25       '';
26     };
27     configurationFile = mkOption {
28       type = types.nullOr types.path;
29       default = null;
30       description = ''
31         Specify the JunOS exporter configuration file to use.
32       '';
33     };
34     configuration = mkOption {
35       type = types.nullOr types.attrs;
36       default = null;
37       description = ''
38         JunOS exporter configuration as nix attribute set. Mutually exclusive with the `configurationFile` option.
39       '';
40       example = {
41         devices = [
42           {
43             host = "router1";
44             key_file = "/path/to/key";
45           }
46         ];
47       };
48     };
49     telemetryPath = mkOption {
50       type = types.str;
51       default = "/metrics";
52       description = ''
53         Path under which to expose metrics.
54       '';
55     };
56   };
57   serviceOpts = {
58     serviceConfig = {
59       DynamicUser = false;
60       EnvironmentFile = mkIf (cfg.environmentFile != null) [ cfg.environmentFile ];
61       RuntimeDirectory = "prometheus-junos-czerwonk-exporter";
62       ExecStartPre = [
63         "${pkgs.writeShellScript "subst-secrets-junos-czerwonk-exporter" ''
64           umask 0077
65           ${pkgs.envsubst}/bin/envsubst -i ${configFile} -o ''${RUNTIME_DIRECTORY}/junos-exporter.json
66         ''}"
67       ];
68       ExecStart = ''
69         ${pkgs.prometheus-junos-czerwonk-exporter}/bin/junos_exporter \
70           -web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
71           -web.telemetry-path ${cfg.telemetryPath} \
72           -config.file ''${RUNTIME_DIRECTORY}/junos-exporter.json \
73           ${concatStringsSep " \\\n  " cfg.extraFlags}
74       '';
75     };
76   };