diff --git a/lib/default.nix b/lib/default.nix index fc93ccf..2b1b930 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -126,6 +126,15 @@ rec { }; }; + systemdAwaitPostgres = pkg: host: { + after = [ "systemd-networkd-wait-online.service" ]; + preStart = '' + until ${pkg}/bin/pg_isready -h ${host}; do + sleep 0.5 + done + ''; + }; + deploy-rs = with types; let diff --git a/nixos/boxes/colony/vms/shill/containers/object.nix b/nixos/boxes/colony/vms/shill/containers/object.nix index f4b7301..0dfaacd 100644 --- a/nixos/boxes/colony/vms/shill/containers/object.nix +++ b/nixos/boxes/colony/vms/shill/containers/object.nix @@ -19,7 +19,7 @@ let inherit (lib) mkMerge mkIf; inherit (config.my.user.homeConfig.lib.file) mkOutOfStoreSymlink; - inherit (lib.my) networkdAssignment; + inherit (lib.my) networkdAssignment systemdAwaitPostgres; in { config = mkMerge [ @@ -63,6 +63,7 @@ MINIO_BROWSER_REDIRECT_URL = "https://minio.nul.ie"; }; }; + sharry = systemdAwaitPostgres pkgs.postgresql "colony-psql"; }; }; @@ -82,7 +83,6 @@ }; sharry = { - # TODO: wait for postgres connection to succeed enable = true; configOverridesFile = config.age.secrets."object/sharry.conf".path; diff --git a/nixos/boxes/colony/vms/shill/containers/toot.nix b/nixos/boxes/colony/vms/shill/containers/toot.nix index 2b60f72..2934856 100644 --- a/nixos/boxes/colony/vms/shill/containers/toot.nix +++ b/nixos/boxes/colony/vms/shill/containers/toot.nix @@ -17,8 +17,8 @@ configuration = { lib, pkgs, config, assignments, allAssignments, ... }: let - inherit (lib) mkMerge mkIf genAttrs mkBefore; - inherit (lib.my) networkdAssignment; + inherit (lib) mkMerge mkIf genAttrs; + inherit (lib.my) networkdAssignment systemdAwaitPostgres; in { config = mkMerge [ @@ -61,9 +61,7 @@ mastodon-init-dirs.script = '' echo "AWS_SECRET_ACCESS_KEY=\""$(< ${config.age.secrets."toot/s3-secret-key.txt".path})"\"" >> /var/lib/mastodon/.secrets_env ''; - mastodon-init-db = { - after = [ "systemd-networkd-wait-online.service" ]; - }; + mastodon-init-db = systemdAwaitPostgres pkgs.postgresql "colony-psql"; # Can't use the extraConfig because these services expect a different format for the both family bind address... mastodon-streaming.environment.BIND = "::";