tor-browser: fix desktop icon (#365780)
[NixPkgs.git] / nixos / modules / services / monitoring / prometheus / exporters / unbound.nix
blob80a97d42e97270420ac2dd36ca697c278cf09fbf
2   config,
3   lib,
4   pkgs,
5   options,
6   ...
7 }:
9 let
10   cfg = config.services.prometheus.exporters.unbound;
11   inherit (lib)
12     mkOption
13     types
14     mkRemovedOptionModule
15     optionalAttrs
16     optionalString
17     mkMerge
18     mkIf
19     ;
22   imports = [
23     (mkRemovedOptionModule [
24       "controlInterface"
25     ] "This option was removed, use the `unbound.host` option instead.")
26     (mkRemovedOptionModule [
27       "fetchType"
28     ] "This option was removed, use the `unbound.host` option instead.")
29     ({
30       options.warnings = options.warnings;
31       options.assertions = options.assertions;
32     })
33   ];
35   port = 9167;
36   extraOpts = {
37     telemetryPath = mkOption {
38       type = types.str;
39       default = "/metrics";
40       description = ''
41         Path under which to expose metrics.
42       '';
43     };
45     unbound = {
46       ca = mkOption {
47         type = types.nullOr types.path;
48         default = "/var/lib/unbound/unbound_server.pem";
49         example = null;
50         description = ''
51           Path to the Unbound server certificate authority
52         '';
53       };
55       certificate = mkOption {
56         type = types.nullOr types.path;
57         default = "/var/lib/unbound/unbound_control.pem";
58         example = null;
59         description = ''
60           Path to the Unbound control socket certificate
61         '';
62       };
64       key = mkOption {
65         type = types.nullOr types.path;
66         default = "/var/lib/unbound/unbound_control.key";
67         example = null;
68         description = ''
69           Path to the Unbound control socket key.
70         '';
71       };
73       host = mkOption {
74         type = types.str;
75         default = "tcp://127.0.0.1:8953";
76         example = "unix:///run/unbound/unbound.socket";
77         description = ''
78           Path to the unbound control socket. Supports unix domain sockets, as well as the TCP interface.
79         '';
80       };
81     };
82   };
84   serviceOpts = mkMerge (
85     [
86       {
87         serviceConfig =
88           {
89             User = "unbound"; # to access the unbound_control.key
90             ExecStart = ''
91               ${pkgs.prometheus-unbound-exporter}/bin/unbound_exporter \
92                 --unbound.host "${cfg.unbound.host}" \
93                 --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
94                 --web.telemetry-path ${cfg.telemetryPath} \
95                 ${optionalString (cfg.unbound.ca != null) "--unbound.ca ${cfg.unbound.ca}"} \
96                 ${optionalString (cfg.unbound.certificate != null) "--unbound.cert ${cfg.unbound.certificate}"} \
97                 ${optionalString (cfg.unbound.key != null) "--unbound.key ${cfg.unbound.key}"} \
98                 ${toString cfg.extraFlags}
99             '';
100             RestrictAddressFamilies = [
101               "AF_UNIX"
102               "AF_INET"
103               "AF_INET6"
104             ];
105           }
106           // optionalAttrs (!config.services.unbound.enable) {
107             DynamicUser = true;
108           };
109       }
110     ]
111     ++ [
112       (mkIf config.services.unbound.enable {
113         after = [ "unbound.service" ];
114         requires = [ "unbound.service" ];
115       })
116     ]
117   );