nixos/hydra postgresql: Fix #27314 and add test case
This commit is contained in:
parent
7bba4a169e
commit
d784b83005
@ -270,8 +270,8 @@ in
|
|||||||
|
|
||||||
${optionalString haveLocalDB ''
|
${optionalString haveLocalDB ''
|
||||||
if ! [ -e ${baseDir}/.db-created ]; then
|
if ! [ -e ${baseDir}/.db-created ]; then
|
||||||
${config.services.postgresql.package}/bin/createuser hydra
|
${pkgs.sudo}/bin/sudo -u ${config.services.postgresql.superUser} ${config.services.postgresql.package}/bin/createuser hydra
|
||||||
${config.services.postgresql.package}/bin/createdb -O hydra hydra
|
${pkgs.sudo}/bin/sudo -u ${config.services.postgresql.superUser} ${config.services.postgresql.package}/bin/createdb -O hydra hydra
|
||||||
touch ${baseDir}/.db-created
|
touch ${baseDir}/.db-created
|
||||||
fi
|
fi
|
||||||
''}
|
''}
|
||||||
|
@ -38,9 +38,6 @@ let
|
|||||||
|
|
||||||
pre84 = versionOlder (builtins.parseDrvName postgresql.name).version "8.4";
|
pre84 = versionOlder (builtins.parseDrvName postgresql.name).version "8.4";
|
||||||
|
|
||||||
# NixOS traditionally used `root` as superuser, most other distros use `postgres`. From 17.09
|
|
||||||
# we also try to follow this standard
|
|
||||||
superuser = (if versionAtLeast config.system.stateVersion "17.09" then "postgres" else "root");
|
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
@ -151,6 +148,16 @@ in
|
|||||||
Contents of the <filename>recovery.conf</filename> file.
|
Contents of the <filename>recovery.conf</filename> file.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
superUser = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default= if versionAtLeast config.system.stateVersion "17.09" then "postgres" else "root";
|
||||||
|
internal = true;
|
||||||
|
description = ''
|
||||||
|
NixOS traditionally used `root` as superuser, most other distros use `postgres`.
|
||||||
|
From 17.09 we also try to follow this standard. Internal since changing this value
|
||||||
|
would lead to breakage while setting up databases.
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
@ -215,7 +222,7 @@ in
|
|||||||
''
|
''
|
||||||
# Initialise the database.
|
# Initialise the database.
|
||||||
if ! test -e ${cfg.dataDir}/PG_VERSION; then
|
if ! test -e ${cfg.dataDir}/PG_VERSION; then
|
||||||
initdb -U ${superuser}
|
initdb -U ${cfg.superUser}
|
||||||
# See postStart!
|
# See postStart!
|
||||||
touch "${cfg.dataDir}/.first_startup"
|
touch "${cfg.dataDir}/.first_startup"
|
||||||
fi
|
fi
|
||||||
@ -247,14 +254,14 @@ in
|
|||||||
# Wait for PostgreSQL to be ready to accept connections.
|
# Wait for PostgreSQL to be ready to accept connections.
|
||||||
postStart =
|
postStart =
|
||||||
''
|
''
|
||||||
while ! ${pkgs.sudo}/bin/sudo -u ${superuser} psql --port=${toString cfg.port} -d postgres -c "" 2> /dev/null; do
|
while ! ${pkgs.sudo}/bin/sudo -u ${cfg.superUser} psql --port=${toString cfg.port} -d postgres -c "" 2> /dev/null; do
|
||||||
if ! kill -0 "$MAINPID"; then exit 1; fi
|
if ! kill -0 "$MAINPID"; then exit 1; fi
|
||||||
sleep 0.1
|
sleep 0.1
|
||||||
done
|
done
|
||||||
|
|
||||||
if test -e "${cfg.dataDir}/.first_startup"; then
|
if test -e "${cfg.dataDir}/.first_startup"; then
|
||||||
${optionalString (cfg.initialScript != null) ''
|
${optionalString (cfg.initialScript != null) ''
|
||||||
${pkgs.sudo}/bin/sudo -u ${superuser} psql -f "${cfg.initialScript}" --port=${toString cfg.port} -d postgres
|
${pkgs.sudo}/bin/sudo -u ${cfg.superUser} psql -f "${cfg.initialScript}" --port=${toString cfg.port} -d postgres
|
||||||
''}
|
''}
|
||||||
rm -f "${cfg.dataDir}/.first_startup"
|
rm -f "${cfg.dataDir}/.first_startup"
|
||||||
fi
|
fi
|
||||||
|
32
nixos/tests/hydra.nix
Normal file
32
nixos/tests/hydra.nix
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
import ./make-test.nix ({ pkgs, ...} : {
|
||||||
|
name = "hydra-init-localdb";
|
||||||
|
meta = with pkgs.stdenv.lib.maintainers; {
|
||||||
|
maintainers = [ pstn ];
|
||||||
|
};
|
||||||
|
|
||||||
|
machine =
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.hydra = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
#Hydra needs those settings to start up, so we add something not harmfull.
|
||||||
|
hydraURL = "example.com";
|
||||||
|
notificationSender = "example@example.com";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
testScript =
|
||||||
|
''
|
||||||
|
# let the system boot up
|
||||||
|
$machine->waitForUnit("multi-user.target");
|
||||||
|
# test whether the database is running
|
||||||
|
$machine->succeed("systemctl status postgresql.service");
|
||||||
|
# test whether the actual hydra daemons are running
|
||||||
|
$machine->succeed("systemctl status hydra-queue-runner.service");
|
||||||
|
$machine->succeed("systemctl status hydra-init.service");
|
||||||
|
$machine->succeed("systemctl status hydra-evaluator.service");
|
||||||
|
$machine->succeed("systemctl status hydra-send-stats.service");
|
||||||
|
'';
|
||||||
|
})
|
Loading…
x
Reference in New Issue
Block a user