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
- Verify connectivity to the COS endpoint and retry.
- Confirm the bucket region/endpoint is correctly configured.
- Re-authenticate if the session/STS token expired (long-running destroys).
- 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
- Verify egress to cos.*.myqcloud.com is allowed.
- Re-authenticate if the session/STS expired.
- Retry transient transport failures.
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
- failed to delete file %v: %v
- failed to empty bucket %v: %v
- failed to save file to %v: %v
- bucket %s not exists
- failed to create bucket %v: %v
AI-assisted analysis of hashicorp/terraform@c9def3e214 (2026-08-07).
Data as JSON: /api/errors/ed1d51db28cd1498.
Report an issue: GitHub.