summary refs log tree commit diff
path: root/nixos/modules/services/databases/redis.nix
diff options
context:
space:
mode:
authorajs124 <git@ajs124.de>2022-11-09 02:35:39 +0100
committerajs124 <git@ajs124.de>2022-11-09 21:49:33 +0100
commitbc4e9a890c5421e7a760da15ec474098735985ff (patch)
treeb3316f2669f2d99aede19cc7097848560e15f6b0 /nixos/modules/services/databases/redis.nix
parent168ad716e08368b7038d167b9e4b6eb3667900eb (diff)
downloadnixpkgs-bc4e9a890c5421e7a760da15ec474098735985ff.tar
nixpkgs-bc4e9a890c5421e7a760da15ec474098735985ff.tar.gz
nixpkgs-bc4e9a890c5421e7a760da15ec474098735985ff.tar.bz2
nixpkgs-bc4e9a890c5421e7a760da15ec474098735985ff.tar.lz
nixpkgs-bc4e9a890c5421e7a760da15ec474098735985ff.tar.xz
nixpkgs-bc4e9a890c5421e7a760da15ec474098735985ff.tar.zst
nixpkgs-bc4e9a890c5421e7a760da15ec474098735985ff.zip
nixos/redis: store config in state directory
this is needed because certain redis features, like sentinel, require
the config file to be persistent
Diffstat (limited to 'nixos/modules/services/databases/redis.nix')
-rw-r--r--nixos/modules/services/databases/redis.nix28
1 files changed, 18 insertions, 10 deletions
diff --git a/nixos/modules/services/databases/redis.nix b/nixos/modules/services/databases/redis.nix
index 1bcd0f0b20c..1f143f9c66f 100644
--- a/nixos/modules/services/databases/redis.nix
+++ b/nixos/modules/services/databases/redis.nix
@@ -347,16 +347,24 @@ in {
       after = [ "network.target" ];
 
       serviceConfig = {
-        ExecStart = "${cfg.package}/bin/redis-server /run/${redisName name}/redis.conf ${escapeShellArgs conf.extraParams}";
-        ExecStartPre = [("+"+pkgs.writeShellScript "${redisName name}-credentials" (''
-            install -o '${conf.user}' -m 600 ${redisConfig conf.settings} /run/${redisName name}/redis.conf
-          '' + optionalString (conf.requirePassFile != null) ''
-            {
-              printf requirePass' '
-              cat ${escapeShellArg conf.requirePassFile}
-            } >>/run/${redisName name}/redis.conf
-          '')
-        )];
+        ExecStart = "${cfg.package}/bin/redis-server /var/lib/${redisName name}/redis.conf ${escapeShellArgs conf.extraParams}";
+        ExecStartPre = "+"+pkgs.writeShellScript "${redisName name}-prep-conf" (let
+          redisConfVar = "/var/lib/${redisName name}/redis.conf";
+          redisConfRun = "/run/${redisName name}/nixos.conf";
+          redisConfStore = redisConfig conf.settings;
+        in ''
+          touch "${redisConfVar}" "${redisConfRun}"
+          chown '${conf.user}' "${redisConfVar}" "${redisConfRun}"
+          chmod 0600 "${redisConfVar}" "${redisConfRun}"
+          if [ ! -s ${redisConfVar} ]; then
+            echo 'include "${redisConfRun}"' > "${redisConfVar}"
+          fi
+          echo 'include "${redisConfStore}"' > "${redisConfRun}"
+          ${optionalString (conf.requirePassFile != null) ''
+            {echo -n "requirepass "
+            cat ${escapeShellArg conf.requirePassFile}} >> "${redisConfRun}"
+          ''}
+        '');
         Type = "notify";
         # User and group
         User = conf.user;