Architecture

Service Dependencies & Startup Order

Runtime and configuration dependencies across routing, secrets, UniFi control, DNS, storage, backups, and platform services, including committed boot order and degraded behavior.

Service dependencies separate what must exist for traffic to flow from what is needed only to configure, observe, or recover the system. OPNsense is the first routed service at each site; storage, secrets, naming, backup, and platform layers come up behind the local network boundary.

Only the Three Edge Services Have a Committed Numeric VM Order

Pulumi declares OPNsense order=1,up=90,down=180, OpenBao order=2,up=60,down=180, and Site A UOS order=3,up=0,down=180. DNS, PBS, monitoring, and platform services do not yet have committed numeric Proxmox startup values.

Dependency Layers

LayerRequired foundationProvidesFailure behavior
Physical and Layer 2Power, host NICs, switch links, VLAN profilesLocal Ethernet, trunks, access ports, RSTP pathsSame-switch or surviving-path traffic may continue; routed services are not implied
Site routingLocal E200, WAN/LAN NICs, OPNsense VMGateways, NAT, DHCP, inter-zone policy, WireGuard, DNS forwardingSame-VLAN Layer 2 may continue; routed and internet traffic stops
Edge controlOPNsense firstOpenBao and UOS network reachabilityOpenBao unseal and remote UniFi management need routing; forwarding does not require UOS
NamingVLAN 30, local routing, Technitium DNS VMscore.aorxi.io, reverse zones, client resolutionReplicas serve the last transferred copy when the primary or tunnel is unavailable
Durable dataLocal disks, ZFS or Ceph, storage VLANsVM data, service state, backup datastoresFailure stays site-local; no storage plane stretches across WireGuard
Backup and recoveryLocal storage, PBS, VLAN 90Local backups and planned cross-site copiesLocal jobs do not require WireGuard; replication pauses with the tunnel
PlatformsRouting, DNS, compute, and required storageKubernetes/OpenShift, ingress, monitoring, applicationsPlatform startup waits until its local network and storage prerequisites are stable

No Cross-Site Quorum or Storage Dependency

Proxmox quorum, Corosync, Ceph, Layer 2, and OpenBao Raft remain site-local. WireGuard carries routed application flows only and cannot become a prerequisite for local cluster health.

Committed Edge Startup Order

OrderSystemStartup ruleReadiness gate
0E200 host networkingPhysical WAN, LAN trunk, management, and Proxmox bridges exist before guest startupLocal management and attached VLANs are present
1sa-fw-01 / sb-fw-01up=90, down=180; its up window delays order 2Local gateways and required routed paths answer
2sa-bao-01 / sb-bao-01up=60, down=180; its up window delays order 3bao status reports initialized and unsealed
3sa-uos-01up=0, down=180UOS API responds and adopted devices are reachable
After network and storageDNS, PBS, monitoring, core service VMsDependency order is architectural; numeric VM orders are not recordedLocal DNS resolves, datastores mount, and service health checks pass
After foundationsKubernetes/OpenShift and application workloadsStart only after network and storage are stableControl-plane, storage, ingress, and DNS checks pass

OpenBao Boot State

Site A currently uses Shamir manual unseal after an OpenBao reboot. Once Site B exists, each OpenBao instance is designed to use the other site's transit engine over WireGuard.

Current and Target Unseal Paths Differ

Today, sa-bao-01 requires three of five Shamir keys after a reboot. The future cross-site transit design makes OPNsense-first startup mandatory because the tunnel becomes the unseal path. A simultaneous two-site cold start retains a documented manual seal-migration break-glass path.

Restarting OpenBao seals the server. Configuration changes that support reload use systemctl reload openbao; an intentional restart requires an unseal plan.

Proxmox up is a fixed delay after the current VM starts, not a readiness probe. The API and status checks remain mandatory after boot.

Runtime and Configuration Dependencies

Consumer or capabilityRuntime dependencyConfiguration dependencyDegraded or fallback path
OPNsense packet forwardingIts own running VM and stored configurationOpenBao or encrypted vault credentials for future config pushesRuntime traffic continues if OpenBao is sealed
Pulumi provisioningProxmox API and tier-0 bootstrap credentialsOpenBao is preferred for Proxmox credentialsRoot .env.local remains the break-glass fallback
OPNsense and UniFi AnsibleReachable target APIOpenBao AppRole and KV v2 are preferredEncrypted vault-credentials.yml files remain the fallback
UniFi forwardingAdopted switch/AP local configurationUOS for adoption, telemetry, and changesExisting switching and Wi-Fi forwarding continue while UOS is down
DNS resolutionOne reachable local DNS replicasa-dns-01 for authoritative writes and zone replicationSecondaries answer from the last transferred zone copy
Local PBS jobsLocal PBS and datastoreLocal management planeJobs continue without WireGuard
Cross-site PBS copiesBoth PBS endpoints, VLAN 90, WireGuardReplication job configurationCopies pause; local backup operation continues
Site B DNS updatesSite B resolver plus routed access to the primaryWireGuard reachability to sa-dns-01Existing Site B zone data remains readable; new changes wait

Recovery Startup Sequence

  1. Restore physical links, local switching, Proxmox management, and the E200 network bridges.
  2. Start and validate OPNsense before any service that needs routed reachability.
  3. Start OpenBao, then complete the current Shamir unseal or future transit-unseal recovery.
  4. Start UOS and DNS; verify control access and local name resolution.
  5. Mount or validate ZFS/Ceph and bring PBS datastores online.
  6. Start monitoring, certificate, Kubernetes/OpenShift, and application services only after their network and storage gates pass.

Only the three edge services currently have committed Proxmox startup metadata. Disaster recovery objectives records the related recovery gaps, while blast radius & recovery shows what each dependency failure affects.