# Sando topology config. # # Tiers run in declaration order. Each tier lists the gates that must pass to # unlock promotion *to* the next tier, the nodes it ships to, and the canary # policy for shipping within the tier. # # Day-one wiring: host (pop-os, local) -> A (testnot.work) -> B (prod-1). C is # declared but not provisioned; adding the second prod node later is a config # edit (set provisioned = true, fill in [[tier.node]]). # # Note: the host tier is named "mm" for legacy reasons (string identifier baked # into the schema + code). It refers to whatever machine sandod runs on — # currently pop-os, not a MakeMachine. Rename is a follow-up cleanup. [repo] bare_path = "/srv/sando/mnw.git" branch = "main" [backup] # Source of the prod-backup clone used by migration_dry_run on MM. # For localhost dev this can be a file:// path to a fixture dump. source = "rsync://astra/var/backups/mnw/latest.sql.gz" local_path = "/srv/sando/backups/latest.sql.gz" # ---- host: pop-os local pre-staging gate ---- [[tier]] name = "mm" provisioned = true canary = "sequential" gates = [ { kind = "cargo_test" }, { kind = "migration_dry_run" }, { kind = "boot_smoke" }, ] # Host is the daemon's own machine (pop-os); no remote node row. # ---- A: testnot.work staging ---- [[tier]] name = "a" provisioned = true canary = "sequential" gates = [ { kind = "boot_smoke" }, { kind = "burn_in", hours = 48 }, ] [[tier.node]] name = "testnot-1" ssh_target = "deploy@testnot.work" release_root = "/opt/mnw" # ---- B: prod-1 ---- [[tier]] name = "b" provisioned = true canary = "sequential" gates = [ { kind = "boot_smoke" }, { kind = "manual_confirm" }, ] [[tier.node]] name = "prod-1" ssh_target = "deploy@prod-1.makenot.work" release_root = "/opt/mnw" # ---- C: prod-2 (declared, not yet provisioned) ---- [[tier]] name = "c" provisioned = false canary = "sequential" gates = [ { kind = "boot_smoke" }, ] # [[tier.node]] entries to be added when the second prod node ships.