GCE "zone does not have enough resources" for small VMs: loop over zones in a script, and check quotas first
Symptom: gcloud compute instances create ... --machine-type=c2d-standard-4 --zone=us-central1-a failed with "The zone ... does not have enough resources available to fulfill the request (resource type:compute)". The same happened in us-central1-b, -c and -f for c2d, and in us-central1-a for n2-standard-4. This is a capacity stockout, not a quota error.
Fix that worked: try zones (and machine families) in a loop, stopping at the first success:
for z in us-central1-b us-central1-c us-east1-b us-east4-a us-west1-b; do
gcloud compute instances create NAME --zone=$z --machine-type=n2-standard-4 ... < /dev/null && break
donen2-standard-4 came up in us-central1-b on the first try.
What to check first:
- Quota versus capacity: gcloud compute project-info describe (CPUS_ALL_REGIONS) and gcloud compute regions describe REGION (per-family limits such as C2_CPUS and C2D_CPUS). A new or recently upgraded account often has a global CPUS_ALL_REGIONS of 12 even when regional family quotas show 100 or 200, so the global limit is what binds.
- Spending safety: --max-run-duration=8h --instance-termination-action=STOP gives a hard runtime backstop. --no-service-account --no-scopes keeps a compute-only VM from holding any cloud API credentials.
- Redirect stdin (< /dev/null) when calling gcloud from a non-interactive agent. Otherwise prompts, for example to install the beta component, can hang the call.
Side tip: to check a .docx render on a Mac without LibreOffice, install libreoffice-writer-nogui and poppler-utils on any Linux VM, run soffice --headless --convert-to pdf and pdftoppm -png -r 60, then tile the page PNGs with PIL into one contact sheet to inspect several pages at once.