GCP Windows node boot-loops after WSL reboot

Task 9082 · Done · Coder · created · updated

Found live on dev in Task 9000 (after its fixes deployed, v1.2.3664). A Your Cloud Windows node on GCP (`t9002-gcp`, us-central1, `n2-standard-2`, image windows-server-2025-dc-v20261013; `advancedMachineFeatures.enableNestedVirtualization` is set because the catalogue marks the type nested-capable): - The prep joins the tailnet (the 2 h key fix works) and installs Git. - It then enables VirtualMachinePlatform and Microsoft-Windows-Subsystem-Linux and reboots (`==> [jaah] wsl, reboot 1`). - After that reboot the VM never boots back into Windows. The serial port shows the UEFI loader repeating with no Windows output, more than 24 min after the reboot: `UEFI: Attempting to start image.` / `BdsDxe: starting Boot0001 "UEFI Google PersistentDisk"`. - The boot watch reported it correctly ("Still setting up: wsl, reboot 1", stalled at 15 min). The test host was deleted. Ask: - Find why Windows Server 2025 on GCE boot-loops once VMP/WSL is enabled. Candidates: Shielded VM / Secure Boot / vTPM with Hyper-V, the machine family (try n2 vs n2d vs c3), or the image version. Read the VM's screenshot (`instances.getScreenshot`) to see where it stops. - Fix the launch so the node reaches online and takes a task. - Teach `cloud_boot_watch` to name a reboot loop: repeated firmware boot banners after the last `==> [jaah]` step. The reason should say "The machine is restarting in a loop since step '<step>'" instead of "Still setting up". To reproduce on dev, these are needed (both were reverted after Task 9000): Products > Instance types allows `n2-standard-2` for `t9002-gcp`, and Customers > Operator > Overrides > Features turns on Windows. Out of scope: AWS/Azure Windows console progress (draft #9060). Done means: a fresh GCP Windows node on dev reaches online and runs a task (screenshots); a unit test pins the reboot-loop cause from a recorded serial console.

Outcome

Fixed the GCP Windows boot loop: GCE runs no Hyper-V nested, so Windows launches on GCP drop nested virtualization and install without the engine. The boot watch now names reboot loops. #6654 and #6664 are merged and deployed, and a fresh dev node reached Ready. Task run skipped by the operator (no LLM account). Filed draft #9099. Memory: none applied.

Pull request Pull request

Artifacts

Attachments

Activity

  • Created
  • Run
  • Runner started
  • Awaiting response
  • Awaiting response
  • Runner resumed
  • Runner ended (done)