about summary refs log tree commit diff
path: root/nixos
diff options
context:
space:
mode:
authorLéo Gaspard <leo@gaspard.io>2019-12-14 21:36:59 +0100
committerGitHub <noreply@github.com>2019-12-14 21:36:59 +0100
commit226ea5c17a4980500aaf9576dd7fad15fb72a101 (patch)
tree5d009310e025e0cb86a8efe91a713b3a06b6401f /nixos
parent7d944554ddf2a8f4c5f47b4a9bb2e1c7a3deac2c (diff)
parentb2d67c08d03679ba1b9a928ac5610ad940846e7f (diff)
downloadnixlib-226ea5c17a4980500aaf9576dd7fad15fb72a101.tar
nixlib-226ea5c17a4980500aaf9576dd7fad15fb72a101.tar.gz
nixlib-226ea5c17a4980500aaf9576dd7fad15fb72a101.tar.bz2
nixlib-226ea5c17a4980500aaf9576dd7fad15fb72a101.tar.lz
nixlib-226ea5c17a4980500aaf9576dd7fad15fb72a101.tar.xz
nixlib-226ea5c17a4980500aaf9576dd7fad15fb72a101.tar.zst
nixlib-226ea5c17a4980500aaf9576dd7fad15fb72a101.zip
Merge pull request #75294 from kampka/postgres-service-refactor
matrix-synapse: Use postgres service to create database and user
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/services/misc/matrix-synapse.nix31
1 files changed, 9 insertions, 22 deletions
diff --git a/nixos/modules/services/misc/matrix-synapse.nix b/nixos/modules/services/misc/matrix-synapse.nix
index 50661b873f64..0bda8980720d 100644
--- a/nixos/modules/services/misc/matrix-synapse.nix
+++ b/nixos/modules/services/misc/matrix-synapse.nix
@@ -671,43 +671,30 @@ in {
         gid = config.ids.gids.matrix-synapse;
       } ];
 
-    services.postgresql.enable = mkIf usePostgresql (mkDefault true);
+    services.postgresql = mkIf (usePostgresql && cfg.create_local_database) {
+      enable = mkDefault true;
+      ensureDatabases = [ cfg.database_name ];
+      ensureUsers = [{
+        name = cfg.database_user;
+        ensurePermissions = { "DATABASE \"${cfg.database_name}\"" = "ALL PRIVILEGES"; };
+      }];
+    };
 
     systemd.services.matrix-synapse = {
       description = "Synapse Matrix homeserver";
-      after = [ "network.target" "postgresql.service" ];
+      after = [ "network.target" ] ++ lib.optional config.services.postgresql.enable "postgresql.service" ;
       wantedBy = [ "multi-user.target" ];
       preStart = ''
         ${cfg.package}/bin/homeserver \
           --config-path ${configFile} \
           --keys-directory ${cfg.dataDir} \
           --generate-keys
-      '' + optionalString (usePostgresql && cfg.create_local_database) ''
-        if ! test -e "${cfg.dataDir}/db-created"; then
-          ${pkgs.sudo}/bin/sudo -u ${pg.superUser} \
-            ${pg.package}/bin/createuser \
-            --login \
-            --no-createdb \
-            --no-createrole \
-            --encrypted \
-            ${cfg.database_user}
-          ${pkgs.sudo}/bin/sudo -u ${pg.superUser} \
-            ${pg.package}/bin/createdb \
-            --owner=${cfg.database_user} \
-            --encoding=UTF8 \
-            --lc-collate=C \
-            --lc-ctype=C \
-            --template=template0 \
-            ${cfg.database_name}
-          touch "${cfg.dataDir}/db-created"
-        fi
       '';
       serviceConfig = {
         Type = "notify";
         User = "matrix-synapse";
         Group = "matrix-synapse";
         WorkingDirectory = cfg.dataDir;
-        PermissionsStartOnly = true;
         ExecStart = ''
           ${cfg.package}/bin/homeserver \
             ${ concatMapStringsSep "\n  " (x: "--config-path ${x} \\") ([ configFile ] ++ cfg.extraConfigFiles) }