Merge pull request #182104 from mayflower/mail-exporter-secrets

nixos/prometheus-mail-exporter: support storing `passphrase` outside of the store, use umask when using envsubst

Changed files
+25 -6
nixos
modules
services
monitoring
prometheus
exporters
networking
security
tests
+18 -3
nixos/modules/services/monitoring/prometheus/exporters/mail.nix
···
let
cfg = config.services.prometheus.exporters.mail;
+
configFile = if cfg.configuration != null then configurationFile else (escapeShellArg cfg.configFile);
+
configurationFile = pkgs.writeText "prometheus-mail-exporter.conf" (builtins.toJSON (
# removes the _module attribute, null values and converts attrNames to lowercase
mapAttrs' (name: value:
···
{
port = 9225;
extraOpts = {
+
environmentFile = mkOption {
+
type = types.nullOr types.str;
+
default = null;
+
description = ''
+
File containing env-vars to be substituted into the exporter's config.
+
'';
+
};
configFile = mkOption {
type = types.nullOr types.path;
default = null;
···
serviceOpts = {
serviceConfig = {
DynamicUser = false;
+
EnvironmentFile = mkIf (cfg.environmentFile != null) [ cfg.environmentFile ];
+
RuntimeDirectory = "prometheus-mail-exporter";
+
ExecStartPre = [
+
"${pkgs.writeShellScript "subst-secrets-mail-exporter" ''
+
umask 0077
+
${pkgs.envsubst}/bin/envsubst -i ${configFile} -o ''${RUNTIME_DIRECTORY}/mail-exporter.json
+
''}"
+
];
ExecStart = ''
${pkgs.prometheus-mail-exporter}/bin/mailexporter \
--web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
--web.telemetry-path ${cfg.telemetryPath} \
-
--config.file ${
-
if cfg.configuration != null then configurationFile else (escapeShellArg cfg.configFile)
-
} \
+
--config.file ''${RUNTIME_DIRECTORY}/mail-exporter.json \
${concatStringsSep " \\\n " cfg.extraFlags}
'';
};
+1
nixos/modules/services/networking/mxisd.nix
···
EnvironmentFile = mkIf (cfg.environmentFile != null) [ cfg.environmentFile ];
ExecStart = "${cfg.package}/bin/${executable} -c ${cfg.dataDir}/mxisd-config.yaml";
ExecStartPre = "${pkgs.writeShellScript "mxisd-substitute-secrets" ''
+
umask 0077
${pkgs.envsubst}/bin/envsubst -o ${cfg.dataDir}/mxisd-config.yaml \
-i ${configFile}
''}";
+1
nixos/modules/services/security/privacyidea.nix
···
[ cfg.ldap-proxy.environmentFile ];
ExecStartPre =
"${pkgs.writeShellScript "substitute-secrets-ldap-proxy" ''
+
umask 0077
${pkgs.envsubst}/bin/envsubst \
-i ${ldapProxyConfig} \
-o $STATE_DIRECTORY/ldap-proxy.ini
+5 -3
nixos/tests/prometheus-exporters.nix
···
systemd.services.prometheus-mail-exporter = {
after = [ "postfix.service" ];
requires = [ "postfix.service" ];
-
preStart = ''
-
mkdir -p -m 0700 mail-exporter/new
-
'';
serviceConfig = {
+
ExecStartPre = [
+
"${pkgs.writeShellScript "create-maildir" ''
+
mkdir -p -m 0700 mail-exporter/new
+
''}"
+
];
ProtectHome = true;
ReadOnlyPaths = "/";
ReadWritePaths = "/var/spool/mail";