nixos/grafana: option to configure smtp

This commit is contained in:
Jörg Thalheim 2018-09-20 23:02:33 +01:00
parent 7eb9c348fb
commit 9046673696

View File

@ -4,6 +4,7 @@ with lib;
let let
cfg = config.services.grafana; cfg = config.services.grafana;
opt = options.services.grafana;
envOptions = { envOptions = {
PATHS_DATA = cfg.dataDir; PATHS_DATA = cfg.dataDir;
@ -41,6 +42,12 @@ let
AUTH_ANONYMOUS_ORG_ROLE = cfg.auth.anonymous.org_role; AUTH_ANONYMOUS_ORG_ROLE = cfg.auth.anonymous.org_role;
ANALYTICS_REPORTING_ENABLED = boolToString cfg.analytics.reporting.enable; ANALYTICS_REPORTING_ENABLED = boolToString cfg.analytics.reporting.enable;
SMTP_ENABLE = boolToString cfg.smtp.enable;
SMTP_HOST = cfg.smtp.host;
SMTP_USER = cfg.smtp.user;
SMTP_PASSWORD = cfg.smtp.password;
SMTP_FROM_ADDRESS = cfg.smtp.fromAddress;
} // cfg.extraOptions; } // cfg.extraOptions;
in { in {
@ -205,6 +212,41 @@ in {
}; };
}; };
smtp = {
enable = mkEnableOption "smtp";
host = mkOption {
description = "Host to connect to";
default = "localhost:25";
type = types.str;
};
user = mkOption {
description = "User used for authentication";
default = "";
type = types.str;
};
password = mkOption {
description = ''
Password used for authentication.
This option is mutual exclusive with the passwordFile option.
'';
default = "";
type = types.str;
};
passwordFile = mkOption {
description = ''
Password used for authentication.
This option is mutual exclusive with the password option.
'';
default = null;
type = types.nullOr types.path;
};
fromAddress = mkOption {
description = "Email address used for sending";
default = "admin@grafana.localhost";
type = types.str;
};
};
users = { users = {
allowSignUp = mkOption { allowSignUp = mkOption {
description = "Disable user signup / registration"; description = "Disable user signup / registration";
@ -271,8 +313,8 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
warnings = optional ( warnings = optional (
cfg.database.password != options.services.grafana.database.password.default || cfg.database.password != opt.database.password.default ||
cfg.security.adminPassword != options.services.grafana.security.adminPassword.default cfg.security.adminPassword != opt.security.adminPassword.default
) "Grafana passwords will be stored as plaintext in the Nix store!"; ) "Grafana passwords will be stored as plaintext in the Nix store!";
environment.systemPackages = [ cfg.package ]; environment.systemPackages = [ cfg.package ];
@ -290,6 +332,10 @@ in {
assertion = cfg.security.secretKeyFile != opt.security.secretKeyFile.default -> cfg.security.secretKeyFile == null; assertion = cfg.security.secretKeyFile != opt.security.secretKeyFile.default -> cfg.security.secretKeyFile == null;
message = "Cannot set both secretKey and secretKeyFile"; message = "Cannot set both secretKey and secretKeyFile";
} }
{
assertion = cfg.smtp.password != opt.smtp.password.default -> cfg.smtp.passwordFile == null;
message = "Cannot set both password and secretKeyFile";
}
]; ];
systemd.services.grafana = { systemd.services.grafana = {
@ -309,7 +355,11 @@ in {
${optionalString (cfg.security.secretKeyFile != null) '' ${optionalString (cfg.security.secretKeyFile != null) ''
export GF_SECURITY_SECRET_KEY="$(cat ${escapeShellArg cfg.security.secretKeyFile})" export GF_SECURITY_SECRET_KEY="$(cat ${escapeShellArg cfg.security.secretKeyFile})"
''} ''}
${optionalString (cfg.smtp.passwordFile != null) ''
export GF_SMTP_PASSWORD="$(cat ${escapeShellArg cfg.smtp.passwordFile})"
''}
exec ${cfg.package.bin}/bin/grafana-server -homepath ${cfg.dataDir} exec ${cfg.package.bin}/bin/grafana-server -homepath ${cfg.dataDir}
'';
serviceConfig = { serviceConfig = {
WorkingDirectory = cfg.dataDir; WorkingDirectory = cfg.dataDir;
User = "grafana"; User = "grafana";