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