hashicorp/terraform · error

failed to delete bucket %v: %v

Error message

failed to delete bucket %v: %v

What it means

Raised by deleteBucket() when cosClient.Bucket.Delete returns a nil response — the delete-bucket request produced no response. The wrapped error is the transport-level failure. This is the no-response branch of bucket deletion.

Source

Thrown at internal/backend/remote-state/cos/client.go:343

func (c *remoteClient) deleteBucket(recursive bool) error {
	if recursive {
		obs, err := c.getBucket("")
		if err != nil {
			if strings.Contains(err.Error(), "not exists") {
				return nil
			}
			log.Printf("[DEBUG] deleteBucket %s: empty bucket error: %v", c.bucket, err)
			return fmt.Errorf("failed to empty bucket %v: %v", c.bucket, err)
		}
		for _, v := range obs {
			c.deleteObject(v.Key)
		}
	}

	rsp, err := c.cosClient.Bucket.Delete(c.cosContext)
	if rsp == nil {
		log.Printf("[DEBUG] deleteBucket %s: error: %v", c.bucket, err)
		return fmt.Errorf("failed to delete bucket %v: %v", c.bucket, err)
	}
	defer rsp.Body.Close()

	log.Printf("[DEBUG] deleteBucket %s: code: %d, error: %v", c.bucket, rsp.StatusCode, err)
	if rsp.StatusCode == 404 {
		return nil
	}

	if err != nil {
		return fmt.Errorf("failed to delete bucket %v: %v", c.bucket, err)
	}

	return nil
}

// cosLock lock cos for writing
func (c *remoteClient) cosLock(bucket, cosFile string) error {
	log.Printf("[DEBUG] lock cos file %s:%s", bucket, cosFile)

View on GitHub (pinned to c9def3e214)

Solutions

  1. Verify connectivity to the COS endpoint and retry.
  2. Confirm the bucket region/endpoint is correctly configured.
  3. Re-authenticate if the session/STS token expired (long-running destroys).
  4. Check TF_LOG=DEBUG for the underlying transport error.

Example fix

# confirm reachability then retry
curl -I https://cos.ap-guangzhou.myqcloud.com
terraform destroy
Defensive patterns

Strategy: retry

Validate before calling

// Preflight: confirm endpoint reachability before destroy.

Try / catch

if err := c.deleteBucket(false); err != nil {
    if strings.Contains(err.Error(), "failed to delete bucket") {
        // nil-response: verify connectivity/credentials then retry
    }
}

Prevention

When it happens

Trigger: At client.go:340-343: rsp == nil. Triggered during bucket teardown: network/DNS/TLS failure, auth failure before response, or context cancellation during 'terraform destroy'.

Common situations: Network outage during destroy; backend endpoint misconfigured; credentials expired mid-session; VPN/firewall blocking egress to cos.*.myqcloud.com.

Related errors


AI-assisted analysis of hashicorp/terraform@c9def3e214 (2026-08-07). Data as JSON: /api/errors/ed1d51db28cd1498. Report an issue: GitHub.