nixos/prometheus-exporters: use DynamicUser by default

Only define seperate users and groups when necessary.

+7 -3
nixos/modules/services/monitoring/prometheus/exporters.nix
···
);
mkExporterConf = { name, conf, serviceOpts }:
mkIf conf.enable {
warnings = conf.warnings or [];
-
users.users = (mkIf (conf.user == "${name}-exporter") {
"${name}-exporter" = {
description = ''
Prometheus ${name} exporter service user
···
inherit (conf) group;
};
});
-
users.groups = (mkIf (conf.group == "${name}-exporter") {
"${name}-exporter" = {};
});
networking.firewall.extraCommands = mkIf conf.openFirewall (concatStrings [
···
serviceConfig.Restart = mkDefault "always";
serviceConfig.PrivateTmp = mkDefault true;
serviceConfig.WorkingDirectory = mkDefault /tmp;
-
} serviceOpts ] ++ optional (!(serviceOpts.serviceConfig.DynamicUser or false)) {
serviceConfig.User = conf.user;
serviceConfig.Group = conf.group;
});
···
);
mkExporterConf = { name, conf, serviceOpts }:
+
let
+
enableDynamicUser = serviceOpts.serviceConfig.DynamicUser or true;
+
in
mkIf conf.enable {
warnings = conf.warnings or [];
+
users.users = (mkIf (conf.user == "${name}-exporter" && !enableDynamicUser) {
"${name}-exporter" = {
description = ''
Prometheus ${name} exporter service user
···
inherit (conf) group;
};
});
+
users.groups = (mkIf (conf.group == "${name}-exporter" && !enableDynamicUser) {
"${name}-exporter" = {};
});
networking.firewall.extraCommands = mkIf conf.openFirewall (concatStrings [
···
serviceConfig.Restart = mkDefault "always";
serviceConfig.PrivateTmp = mkDefault true;
serviceConfig.WorkingDirectory = mkDefault /tmp;
+
serviceConfig.DynamicUser = mkDefault enableDynamicUser;
+
} serviceOpts ] ++ optional (!enableDynamicUser) {
serviceConfig.User = conf.user;
serviceConfig.Group = conf.group;
});
-1
nixos/modules/services/monitoring/prometheus/exporters/bind.nix
···
};
serviceOpts = {
serviceConfig = {
-
DynamicUser = true;
ExecStart = ''
${pkgs.prometheus-bind-exporter}/bin/bind_exporter \
-web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
···
};
serviceOpts = {
serviceConfig = {
ExecStart = ''
${pkgs.prometheus-bind-exporter}/bin/bind_exporter \
-web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
-1
nixos/modules/services/monitoring/prometheus/exporters/blackbox.nix
···
serviceOpts = {
serviceConfig = {
AmbientCapabilities = [ "CAP_NET_RAW" ]; # for ping probes
-
DynamicUser = true;
ExecStart = ''
${pkgs.prometheus-blackbox-exporter}/bin/blackbox_exporter \
--web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
···
serviceOpts = {
serviceConfig = {
AmbientCapabilities = [ "CAP_NET_RAW" ]; # for ping probes
ExecStart = ''
${pkgs.prometheus-blackbox-exporter}/bin/blackbox_exporter \
--web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
-1
nixos/modules/services/monitoring/prometheus/exporters/collectd.nix
···
'' else "";
in {
serviceConfig = {
-
DynamicUser = true;
ExecStart = ''
${pkgs.prometheus-collectd-exporter}/bin/collectd_exporter \
-log.format ${cfg.logFormat} \
···
'' else "";
in {
serviceConfig = {
ExecStart = ''
${pkgs.prometheus-collectd-exporter}/bin/collectd_exporter \
-log.format ${cfg.logFormat} \
-1
nixos/modules/services/monitoring/prometheus/exporters/dnsmasq.nix
···
};
serviceOpts = {
serviceConfig = {
-
DynamicUser = true;
ExecStart = ''
${pkgs.prometheus-dnsmasq-exporter}/bin/dnsmasq_exporter \
--listen ${cfg.listenAddress}:${toString cfg.port} \
···
};
serviceOpts = {
serviceConfig = {
ExecStart = ''
${pkgs.prometheus-dnsmasq-exporter}/bin/dnsmasq_exporter \
--listen ${cfg.listenAddress}:${toString cfg.port} \
+1
nixos/modules/services/monitoring/prometheus/exporters/dovecot.nix
···
};
serviceOpts = {
serviceConfig = {
ExecStart = ''
${pkgs.prometheus-dovecot-exporter}/bin/dovecot_exporter \
--web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
···
};
serviceOpts = {
serviceConfig = {
+
DynamicUser = false;
ExecStart = ''
${pkgs.prometheus-dovecot-exporter}/bin/dovecot_exporter \
--web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
-1
nixos/modules/services/monitoring/prometheus/exporters/fritzbox.nix
···
};
serviceOpts = {
serviceConfig = {
-
DynamicUser = true;
ExecStart = ''
${pkgs.prometheus-fritzbox-exporter}/bin/exporter \
-listen-address ${cfg.listenAddress}:${toString cfg.port} \
···
};
serviceOpts = {
serviceConfig = {
ExecStart = ''
${pkgs.prometheus-fritzbox-exporter}/bin/exporter \
-listen-address ${cfg.listenAddress}:${toString cfg.port} \
-1
nixos/modules/services/monitoring/prometheus/exporters/json.nix
···
};
serviceOpts = {
serviceConfig = {
-
DynamicUser = true;
ExecStart = ''
${pkgs.prometheus-json-exporter}/bin/prometheus-json-exporter \
--port ${toString cfg.port} \
···
};
serviceOpts = {
serviceConfig = {
ExecStart = ''
${pkgs.prometheus-json-exporter}/bin/prometheus-json-exporter \
--port ${toString cfg.port} \
+1
nixos/modules/services/monitoring/prometheus/exporters/mail.nix
···
};
serviceOpts = {
serviceConfig = {
ExecStart = ''
${pkgs.prometheus-mail-exporter}/bin/mailexporter \
--web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
···
};
serviceOpts = {
serviceConfig = {
+
DynamicUser = false;
ExecStart = ''
${pkgs.prometheus-mail-exporter}/bin/mailexporter \
--web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
-1
nixos/modules/services/monitoring/prometheus/exporters/minio.nix
···
};
serviceOpts = {
serviceConfig = {
-
DynamicUser = true;
ExecStart = ''
${pkgs.prometheus-minio-exporter}/bin/minio-exporter \
-web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
···
};
serviceOpts = {
serviceConfig = {
ExecStart = ''
${pkgs.prometheus-minio-exporter}/bin/minio-exporter \
-web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
-1
nixos/modules/services/monitoring/prometheus/exporters/nginx.nix
···
};
serviceOpts = {
serviceConfig = {
-
DynamicUser = true;
ExecStart = ''
${pkgs.prometheus-nginx-exporter}/bin/nginx-prometheus-exporter \
--nginx.scrape-uri '${cfg.scrapeUri}' \
···
};
serviceOpts = {
serviceConfig = {
ExecStart = ''
${pkgs.prometheus-nginx-exporter}/bin/nginx-prometheus-exporter \
--nginx.scrape-uri '${cfg.scrapeUri}' \
+1
nixos/modules/services/monitoring/prometheus/exporters/node.nix
···
};
serviceOpts = {
serviceConfig = {
RuntimeDirectory = "prometheus-node-exporter";
ExecStart = ''
${pkgs.prometheus-node-exporter}/bin/node_exporter \
···
};
serviceOpts = {
serviceConfig = {
+
DynamicUser = false;
RuntimeDirectory = "prometheus-node-exporter";
ExecStart = ''
${pkgs.prometheus-node-exporter}/bin/node_exporter \
+1
nixos/modules/services/monitoring/prometheus/exporters/postfix.nix
···
};
serviceOpts = {
serviceConfig = {
ExecStart = ''
${pkgs.prometheus-postfix-exporter}/bin/postfix_exporter \
--web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
···
};
serviceOpts = {
serviceConfig = {
+
DynamicUser = false;
ExecStart = ''
${pkgs.prometheus-postfix-exporter}/bin/postfix_exporter \
--web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
+1
nixos/modules/services/monitoring/prometheus/exporters/postgres.nix
···
serviceOpts = {
environment.DATA_SOURCE_NAME = cfg.dataSourceName;
serviceConfig = {
User = mkIf cfg.runAsLocalSuperUser (mkForce "postgres");
ExecStart = ''
${pkgs.prometheus-postgres-exporter}/bin/postgres_exporter \
···
serviceOpts = {
environment.DATA_SOURCE_NAME = cfg.dataSourceName;
serviceConfig = {
+
DynamicUser = false;
User = mkIf cfg.runAsLocalSuperUser (mkForce "postgres");
ExecStart = ''
${pkgs.prometheus-postgres-exporter}/bin/postgres_exporter \
-1
nixos/modules/services/monitoring/prometheus/exporters/snmp.nix
···
else "${pkgs.writeText "snmp-eporter-conf.yml" (builtins.toJSON cfg.configuration)}";
in {
serviceConfig = {
-
DynamicUser = true;
ExecStart = ''
${pkgs.prometheus-snmp-exporter.bin}/bin/snmp_exporter \
--config.file=${configFile} \
···
else "${pkgs.writeText "snmp-eporter-conf.yml" (builtins.toJSON cfg.configuration)}";
in {
serviceConfig = {
ExecStart = ''
${pkgs.prometheus-snmp-exporter.bin}/bin/snmp_exporter \
--config.file=${configFile} \
-1
nixos/modules/services/monitoring/prometheus/exporters/surfboard.nix
···
description = "Prometheus exporter for surfboard cable modem";
unitConfig.Documentation = "https://github.com/ipstatic/surfboard_exporter";
serviceConfig = {
-
DynamicUser = true;
ExecStart = ''
${pkgs.prometheus-surfboard-exporter}/bin/surfboard_exporter \
--web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
···
description = "Prometheus exporter for surfboard cable modem";
unitConfig.Documentation = "https://github.com/ipstatic/surfboard_exporter";
serviceConfig = {
ExecStart = ''
${pkgs.prometheus-surfboard-exporter}/bin/surfboard_exporter \
--web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
-1
nixos/modules/services/monitoring/prometheus/exporters/tor.nix
···
};
serviceOpts = {
serviceConfig = {
-
DynamicUser = true;
ExecStart = ''
${pkgs.prometheus-tor-exporter}/bin/prometheus-tor-exporter \
-b ${cfg.listenAddress} \
···
};
serviceOpts = {
serviceConfig = {
ExecStart = ''
${pkgs.prometheus-tor-exporter}/bin/prometheus-tor-exporter \
-b ${cfg.listenAddress} \
-1
nixos/modules/services/monitoring/prometheus/exporters/unifi.nix
···
};
serviceOpts = {
serviceConfig = {
-
DynamicUser = true;
ExecStart = ''
${pkgs.prometheus-unifi-exporter}/bin/unifi_exporter \
-telemetry.addr ${cfg.listenAddress}:${toString cfg.port} \
···
};
serviceOpts = {
serviceConfig = {
ExecStart = ''
${pkgs.prometheus-unifi-exporter}/bin/unifi_exporter \
-telemetry.addr ${cfg.listenAddress}:${toString cfg.port} \
+1
nixos/modules/services/monitoring/prometheus/exporters/varnish.nix
···
path = [ pkgs.varnish ];
serviceConfig = {
RestartSec = mkDefault 1;
ExecStart = ''
${pkgs.prometheus-varnish-exporter}/bin/prometheus_varnish_exporter \
--web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
···
path = [ pkgs.varnish ];
serviceConfig = {
RestartSec = mkDefault 1;
+
DynamicUser = false;
ExecStart = ''
${pkgs.prometheus-varnish-exporter}/bin/prometheus_varnish_exporter \
--web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
-1
nixos/modules/services/monitoring/prometheus/exporters/wireguard.nix
···
path = [ pkgs.wireguard-tools ];
serviceConfig = {
-
DynamicUser = true;
AmbientCapabilities = [ "CAP_NET_ADMIN" ];
};
};
···
path = [ pkgs.wireguard-tools ];
serviceConfig = {
AmbientCapabilities = [ "CAP_NET_ADMIN" ];
};
};
+4 -5
nixos/tests/prometheus-exporters.nix
···
mail = {
exporterConfig = {
enable = true;
-
user = "mailexporter";
configuration = {
monitoringInterval = "2s";
mailCheckTimeout = "10s";
···
name = "testserver";
server = "localhost";
port = 25;
-
from = "mailexporter@localhost";
-
to = "mailexporter@localhost";
-
detectionDir = "/var/spool/mail/mailexporter/new";
} ];
};
};
···
after = [ "postfix.service" ];
requires = [ "postfix.service" ];
preStart = ''
-
mkdir -p 0600 mailexporter/new
'';
serviceConfig = {
ProtectHome = true;
···
mail = {
exporterConfig = {
enable = true;
configuration = {
monitoringInterval = "2s";
mailCheckTimeout = "10s";
···
name = "testserver";
server = "localhost";
port = 25;
+
from = "mail-exporter@localhost";
+
to = "mail-exporter@localhost";
+
detectionDir = "/var/spool/mail/mail-exporter/new";
} ];
};
};
···
after = [ "postfix.service" ];
requires = [ "postfix.service" ];
preStart = ''
+
mkdir -p 0600 mail-exporter/new
'';
serviceConfig = {
ProtectHome = true;