vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / monitoring / prometheus / exporters / dnssec.nix
blobdda1ad1988a61435201b2b79f4a53f4f34f24809
1 { config, lib, pkgs, ... }:
2 let
3   cfg = config.services.prometheus.exporters.dnssec;
4   configFormat = pkgs.formats.toml { };
5   configFile = configFormat.generate "dnssec-checks.toml" cfg.configuration;
6 in {
7   port = 9204;
8   extraOpts = {
9     configuration = lib.mkOption {
10       type = lib.types.nullOr lib.types.attrs;
11       default = null;
12       description = ''
13         dnssec exporter configuration as nix attribute set.
15         See <https://github.com/chrj/prometheus-dnssec-exporter/blob/master/README.md>
16         for the description of the configuration file format.
17       '';
18       example = lib.literalExpression ''
19         {
20           records = [
21             {
22               zone = "ietf.org";
23               record = "@";
24               type = "SOA";
25             }
26             {
27               zone = "verisigninc.com";
28               record = "@";
29               type = "SOA";
30             }
31           ];
32         }
33       '';
34     };
36     listenAddress = lib.mkOption {
37       type = lib.types.nullOr lib.types.str;
38       default = null;
39       description = ''
40         Listen address as host IP and port definition.
41       '';
42       example = ":9204";
43     };
45     resolvers = lib.mkOption {
46       type = lib.types.listOf lib.types.str;
47       default = [ ];
48       description = ''
49         DNSSEC capable resolver to be used for the check.
50       '';
51       example = [ "0.0.0.0:53" ];
52     };
54     timeout = lib.mkOption {
55       type = lib.types.nullOr lib.types.str;
56       default = null;
57       description = ''
58         DNS request timeout duration.
59       '';
60       example = "10s";
61     };
63     extraFlags = lib.mkOption {
64       type = lib.types.listOf lib.types.str;
65       default = [ ];
66       description = ''
67         Extra commandline options when launching Prometheus.
68       '';
69     };
70   };
72   serviceOpts = {
73     serviceConfig = let
74       startScript = pkgs.writeShellScriptBin "prometheus-dnssec-exporter-start"
75         "${lib.concatStringsSep " "
76         ([ "${pkgs.prometheus-dnssec-exporter}/bin/prometheus-dnssec-exporter" ]
77           ++ lib.optionals (cfg.configuration != null)
78           [ "-config ${configFile}" ]
79           ++ lib.optionals (cfg.listenAddress != null)
80           [ "-listen-address ${lib.escapeShellArg cfg.listenAddress}" ]
81           ++ lib.optionals (cfg.resolvers != [ ]) [
82             "-resolvers ${
83               lib.escapeShellArg (lib.concatStringsSep "," cfg.resolvers)
84             }"
85           ] ++ lib.optionals (cfg.timeout != null)
86           [ "-timeout ${lib.escapeShellArg cfg.timeout}" ] ++ cfg.extraFlags)}";
87     in { ExecStart = lib.getExe startScript; };
88   };