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