summaryrefslogtreecommitdiffstats
path: root/nixos
diff options
context:
space:
mode:
authorFlorian Klink <flokli@flokli.de>2021-01-08 00:33:14 +0100
committerGitHub <noreply@github.com>2021-01-08 00:33:14 +0100
commit9414948a5a19463acce5a7f2b2206c39ecb6359f (patch)
tree8526bed2086c50aa3912b6e67b38c3eda1ef7b1f /nixos
parent610ec6fe8fb9fcc287a0c49b3ea1942df40ca7e0 (diff)
parent1a828f66dc7fad2a44b2e022251d797893af7a70 (diff)
Merge pull request #108440 from aanderse/nixos/redis
nixos/redis: replace extraConfig option with settings option
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/services/databases/redis.nix78
1 files changed, 49 insertions, 29 deletions
diff --git a/nixos/modules/services/databases/redis.nix b/nixos/modules/services/databases/redis.nix
index 6b8853ae390b..9628d30e76a3 100644
--- a/nixos/modules/services/databases/redis.nix
+++ b/nixos/modules/services/databases/redis.nix
@@ -4,31 +4,16 @@ with lib;
let
cfg = config.services.redis;
- redisBool = b: if b then "yes" else "no";
- condOption = name: value: if value != null then "${name} ${toString value}" else "";
-
- redisConfig = pkgs.writeText "redis.conf" ''
- port ${toString cfg.port}
- ${condOption "bind" cfg.bind}
- ${condOption "unixsocket" cfg.unixSocket}
- daemonize no
- supervised systemd
- loglevel ${cfg.logLevel}
- logfile ${cfg.logfile}
- syslog-enabled ${redisBool cfg.syslog}
- databases ${toString cfg.databases}
- ${concatMapStrings (d: "save ${toString (builtins.elemAt d 0)} ${toString (builtins.elemAt d 1)}\n") cfg.save}
- dbfilename dump.rdb
- dir /var/lib/redis
- ${if cfg.slaveOf != null then "slaveof ${cfg.slaveOf.ip} ${toString cfg.slaveOf.port}" else ""}
- ${condOption "masterauth" cfg.masterAuth}
- ${condOption "requirepass" cfg.requirePass}
- appendOnly ${redisBool cfg.appendOnly}
- appendfsync ${cfg.appendFsync}
- slowlog-log-slower-than ${toString cfg.slowLogLogSlowerThan}
- slowlog-max-len ${toString cfg.slowLogMaxLen}
- ${cfg.extraConfig}
- '';
+
+ mkValueString = value:
+ if value == true then "yes"
+ else if value == false then "no"
+ else generators.mkValueStringDefault { } value;
+
+ redisConfig = pkgs.writeText "redis.conf" (generators.toKeyValue {
+ listsAsDuplicateKeys = true;
+ mkKeyValue = generators.mkKeyValueDefault { inherit mkValueString; } " ";
+ } cfg.settings);
in
{
imports = [
@@ -37,6 +22,7 @@ in
(mkRemovedOptionModule [ "services" "redis" "dbFilename" ] "The redis module now uses /var/lib/redis/dump.rdb as database dump location.")
(mkRemovedOptionModule [ "services" "redis" "appendOnlyFilename" ] "This option was never used.")
(mkRemovedOptionModule [ "services" "redis" "pidFile" ] "This option was removed.")
+ (mkRemovedOptionModule [ "services" "redis" "extraConfig" ] "Use services.redis.settings instead.")
];
###### interface
@@ -191,10 +177,20 @@ in
description = "Maximum number of items to keep in slow log.";
};
- extraConfig = mkOption {
- type = types.lines;
- default = "";
- description = "Extra configuration options for redis.conf.";
+ settings = mkOption {
+ type = with types; attrsOf (oneOf [ bool int str (listOf str) ]);
+ default = {};
+ description = ''
+ Redis configuration. Refer to
+ <link xlink:href="https://redis.io/topics/config"/>
+ for details on supported values.
+ '';
+ example = literalExample ''
+ {
+ unixsocketperm = "700";
+ loadmodule = [ "/path/to/my_module.so" "/path/to/other_module.so" ];
+ }
+ '';
};
};
@@ -225,6 +221,30 @@ in
environment.systemPackages = [ cfg.package ];
+ services.redis.settings = mkMerge [
+ {
+ port = cfg.port;
+ daemonize = false;
+ supervised = "systemd";
+ loglevel = cfg.logLevel;
+ logfile = cfg.logfile;
+ syslog-enabled = cfg.syslog;
+ databases = cfg.databases;
+ save = map (d: "${toString (builtins.elemAt d 0)} ${toString (builtins.elemAt d 1)}") cfg.save;
+ dbfilename = "dump.rdb";
+ dir = "/var/lib/redis";
+ appendOnly = cfg.appendOnly;
+ appendfsync = cfg.appendFsync;
+ slowlog-log-slower-than = cfg.slowLogLogSlowerThan;
+ slowlog-max-len = cfg.slowLogMaxLen;
+ }
+ (mkIf (cfg.bind != null) { bind = cfg.bind; })
+ (mkIf (cfg.unixSocket != null) { unixsocket = cfg.unixSocket; })
+ (mkIf (cfg.slaveOf != null) { slaveof = "${cfg.slaveOf.ip} ${cfg.slaveOf.port}"; })
+ (mkIf (cfg.masterAuth != null) { masterauth = cfg.masterAuth; })
+ (mkIf (cfg.requirePass != null) { requirepass = cfg.requirePass; })
+ ];
+
systemd.services.redis = {
description = "Redis Server";