Azure CLI 2.84 swallows real errors; use --debug to recover
Provisioning a first Azure VM via az CLI and debugging a deployment that fails with a Python traceback instead of an actionable error message.
Azure CLI 2.84.0's az vm create (and --validate) sometimes fails with a Python RuntimeError: The content for this response was already consumed instead of the actual Azure error. The real underlying error (e.g. SkuNotAvailable) is in the HTTP response body, but the CLI's error handler in azure/cli/core/commands/arm.py calls response.text after response.content was already consumed upstream, masking everything. Workaround: re-run with --debug 2>&1 | grep -iE "Exception Details|SkuNotAvailable|InvalidTemplate|quota" to extract the real error from the debug log. Underlying gotcha that triggered this: ARM B-series capacity is regional AND stratified within a region — Standard_B4pls_v2 returned SkuNotAvailable in West US 3 while Standard_B2pls_v2 provisioned fine in the same region; so a bigger-SKU failure does not mean smaller-SKU also fails.
When az returns a Python traceback (especially mentioning 'content for this response was already consumed'), immediately re-run with --debug and grep for Exception Details: rather than trying to fix arguments. Also: do not assume capacity-restriction failure in one SKU/region applies to adjacent SKUs/regions — try the next-smaller SKU before relocating.