diff --git a/modules/backupbot.nix b/modules/backupbot.nix index a6f6e31..4533671 100644 --- a/modules/backupbot.nix +++ b/modules/backupbot.nix @@ -39,7 +39,9 @@ in { systemd.services.deploy-backupbot = { description = "Reconcile backup-bot-two (volume backups via restic) via abra"; - after = [ "swarm-init.service" "docker.service" "network-online.target" ]; + # Serialized last (chain proxy→drone→bridge→dashboard→backupbot) to avoid the concurrent abra-init + # race on a fresh host (see bridge.nix). Ordering-only; transitively after deploy-proxy. + after = [ "deploy-dashboard.service" "deploy-proxy.service" "swarm-init.service" "docker.service" "network-online.target" ]; requires = [ "swarm-init.service" "docker.service" ]; wants = [ "network-online.target" ]; wantedBy = [ "multi-user.target" ]; diff --git a/modules/bridge.nix b/modules/bridge.nix index 5a94aba..d3686cb 100644 --- a/modules/bridge.nix +++ b/modules/bridge.nix @@ -104,7 +104,10 @@ in { systemd.services.deploy-bridge = { description = "Reconcile the cc-ci comment-bridge (!testme webhook) swarm service"; - after = [ "deploy-proxy.service" "swarm-init.service" "docker.service" "network-online.target" ]; + # Serialized after deploy-drone (chain proxy→drone→bridge→dashboard→backupbot): on a FRESH host the + # abra-driven reconcilers otherwise run concurrently against an uninitialised ~/.abra and race on + # catalogue/recipe init, leaving units failed after a blank-VM rebuild. Ordering-only `after` fixes it. + after = [ "deploy-drone.service" "deploy-proxy.service" "swarm-init.service" "docker.service" "network-online.target" ]; requires = [ "swarm-init.service" "docker.service" ]; wants = [ "network-online.target" ]; wantedBy = [ "multi-user.target" ]; diff --git a/modules/dashboard.nix b/modules/dashboard.nix index 2f4f7bd..52985a0 100644 --- a/modules/dashboard.nix +++ b/modules/dashboard.nix @@ -79,7 +79,9 @@ in { systemd.services.deploy-dashboard = { description = "Reconcile the cc-ci results dashboard (overview + badges) swarm service"; - after = [ "deploy-proxy.service" "swarm-init.service" "docker.service" "network-online.target" ]; + # Serialized after deploy-bridge (chain proxy→drone→bridge→dashboard→backupbot) to avoid the + # concurrent abra-init race on a fresh host (see bridge.nix). Ordering-only. + after = [ "deploy-bridge.service" "deploy-proxy.service" "swarm-init.service" "docker.service" "network-online.target" ]; requires = [ "swarm-init.service" "docker.service" ]; wants = [ "network-online.target" ]; wantedBy = [ "multi-user.target" ];