mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-07-14 14:10:33 +03:00

This avoids restarting the postgresql server, when only ensureDatabases or ensureUsers have been changed. It will also allow to properly wait for recovery to finish later. To wait for "postgresql is ready" in other services, we now provide a postgresql.target. Resolves #400018 Co-authored-by: Marcel <me@m4rc3l.de>
86 lines
3.1 KiB
Nix
86 lines
3.1 KiB
Nix
{ lib, ... }:
|
|
|
|
{
|
|
name = "pgadmin4";
|
|
meta.maintainers = with lib.maintainers; [
|
|
mkg20001
|
|
gador
|
|
];
|
|
|
|
nodes = {
|
|
machine =
|
|
{ pkgs, ... }:
|
|
{
|
|
|
|
imports = [ ./common/user-account.nix ];
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
wget
|
|
curl
|
|
pgadmin4-desktopmode
|
|
];
|
|
|
|
services.postgresql = {
|
|
enable = true;
|
|
authentication = ''
|
|
host all all localhost trust
|
|
'';
|
|
};
|
|
|
|
services.pgadmin = {
|
|
port = 5051;
|
|
enable = true;
|
|
initialEmail = "bruh@localhost.de";
|
|
initialPasswordFile = pkgs.writeText "pw" "bruh2012!";
|
|
};
|
|
};
|
|
machine2 =
|
|
{ pkgs, ... }:
|
|
{
|
|
|
|
imports = [ ./common/user-account.nix ];
|
|
|
|
services.postgresql = {
|
|
enable = true;
|
|
};
|
|
|
|
services.pgadmin = {
|
|
enable = true;
|
|
initialEmail = "bruh@localhost.de";
|
|
initialPasswordFile = pkgs.writeText "pw" "bruh2012!";
|
|
minimumPasswordLength = 12;
|
|
};
|
|
};
|
|
};
|
|
|
|
testScript = ''
|
|
with subtest("Check pgadmin module"):
|
|
machine.wait_for_unit("postgresql.target")
|
|
machine.wait_for_unit("pgadmin")
|
|
machine.wait_until_succeeds("curl -sS localhost:5051")
|
|
machine.wait_until_succeeds("curl -sS localhost:5051/login | grep \"<title>pgAdmin 4</title>\" > /dev/null")
|
|
# check for missing support files (css, js etc). Should catch not-generated files during build. See e.g. https://github.com/NixOS/nixpkgs/pull/229184
|
|
machine.succeed("wget -nv --level=1 --spider --recursive localhost:5051/login")
|
|
# test idempotenceny
|
|
machine.systemctl("restart pgadmin.service")
|
|
machine.wait_for_unit("pgadmin")
|
|
machine.wait_until_succeeds("curl -sS localhost:5051")
|
|
machine.wait_until_succeeds("curl -sS localhost:5051/login | grep \"<title>pgAdmin 4</title>\" > /dev/null")
|
|
|
|
# pgadmin4 module saves the configuration to /etc/pgadmin/config_system.py
|
|
# pgadmin4-desktopmode tries to read that as well. This normally fails with a PermissionError, as the config file
|
|
# is owned by the user of the pgadmin module. With the check-system-config-dir.patch this will just throw a warning
|
|
# but will continue and not read the file.
|
|
# If we run pgadmin4-desktopmode as root (something one really shouldn't do), it can read the config file and fail,
|
|
# because of the wrong config for desktopmode.
|
|
with subtest("Check pgadmin standalone desktop mode"):
|
|
machine.execute("sudo -u alice pgadmin4 >&2 &", timeout=60)
|
|
machine.wait_until_succeeds("curl -sS localhost:5050")
|
|
machine.wait_until_succeeds("curl -sS localhost:5050/browser/ | grep \"<title>pgAdmin 4</title>\" > /dev/null")
|
|
machine.succeed("wget -nv --level=1 --spider --recursive localhost:5050/browser")
|
|
|
|
with subtest("Check pgadmin minimum password length"):
|
|
machine2.wait_for_unit("postgresql.target")
|
|
machine2.wait_for_console_text("Password must be at least 12 characters long")
|
|
'';
|
|
}
|