GCP Windows node boot-loops after WSL reboot
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.
Artifacts
Attachments
Activity
- Created
- Run
- Runner started
- Awaiting response
- Awaiting response
- Runner resumed
- Runner ended (done)