vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / monitoring / prometheus / exporters / blackbox.nix
blob33a1fdc528053d02de88128d52157eeb16954daf
1 { config, lib, pkgs, options, ... }:
3 let
4   logPrefix = "services.prometheus.exporter.blackbox";
5   cfg = config.services.prometheus.exporters.blackbox;
6   inherit (lib)
7     mkOption
8     types
9     concatStringsSep
10     escapeShellArg
11     ;
13   # This ensures that we can deal with string paths, path types and
14   # store-path strings with context.
15   coerceConfigFile = file:
16     if (builtins.isPath file) || (lib.isStorePath file) then
17       file
18     else
19       (lib.warn ''
20         ${logPrefix}: configuration file "${file}" is being copied to the nix-store.
21         If you would like to avoid that, please set enableConfigCheck to false.
22       '' /. + file);
23   checkConfigLocation = file:
24     if lib.hasPrefix "/tmp/" file then
25       throw
26       "${logPrefix}: configuration file must not reside within /tmp - it won't be visible to the systemd service."
27     else
28       file;
29   checkConfig = file:
30     pkgs.runCommand "checked-blackbox-exporter.conf" {
31       preferLocalBuild = true;
32       nativeBuildInputs = [ pkgs.buildPackages.prometheus-blackbox-exporter ];
33     } ''
34       ln -s ${coerceConfigFile file} $out
35       blackbox_exporter --config.check --config.file $out
36     '';
37 in {
38   port = 9115;
39   extraOpts = {
40     configFile = mkOption {
41       type = types.path;
42       description = ''
43         Path to configuration file.
44       '';
45     };
46     enableConfigCheck = mkOption {
47       type = types.bool;
48       default = true;
49       description = ''
50         Whether to run a correctness check for the configuration file. This depends
51         on the configuration file residing in the nix-store. Paths passed as string will
52         be copied to the store.
53       '';
54     };
55   };
57   serviceOpts = let
58     adjustedConfigFile = if cfg.enableConfigCheck then
59       checkConfig cfg.configFile
60     else
61       checkConfigLocation cfg.configFile;
62   in {
63     serviceConfig = {
64       AmbientCapabilities = [ "CAP_NET_RAW" ]; # for ping probes
65       ExecStart = ''
66         ${pkgs.prometheus-blackbox-exporter}/bin/blackbox_exporter \
67           --web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
68           --config.file ${escapeShellArg adjustedConfigFile} \
69           ${concatStringsSep " \\\n  " cfg.extraFlags}
70       '';
71       ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
72     };
73   };