hashicorp/terraform · error
error getting bucket %s: %#v
Error message
error getting bucket %s: %#v
What it means
In RemoteClient.Delete() (client.go:136-138), ossClient.Bucket(c.bucketName) failed before deleting the state object. Same local constructor validation as errors 349/358; non-network. Blocks workspace deletion (terraform workspace delete).
Source
Thrown at internal/backend/remote-state/oss/client.go:138
if err := bucket.PutObject(c.stateFile, body, options...); err != nil {
return diags.Append(fmt.Errorf("failed to upload state %s: %#v", c.stateFile, err))
}
}
sum := md5.Sum(data)
if err := c.putMD5(sum[:]); err != nil {
// if this errors out, we unfortunately have to error out altogether,
// since the next Get will inevitably fail.
return diags.Append(fmt.Errorf("failed to store state MD5: %s", err))
}
return diags
}
func (c *RemoteClient) Delete() tfdiags.Diagnostics {
var diags tfdiags.Diagnostics
bucket, err := c.ossClient.Bucket(c.bucketName)
if err != nil {
return diags.Append(fmt.Errorf("error getting bucket %s: %#v", c.bucketName, err))
}
log.Printf("[DEBUG] Deleting remote state from OSS: %#v", c.stateFile)
if err := bucket.DeleteObject(c.stateFile); err != nil {
return diags.Append(fmt.Errorf("error deleting state %s: %#v", c.stateFile, err))
}
if err := c.deleteMD5(); err != nil {
log.Printf("[WARN] Error deleting state MD5: %s", err)
}
return diags
}
func (c *RemoteClient) Lock(info *statemgr.LockInfo) (string, error) {
if c.otsTable == "" {
return "", nil
}View on GitHub (pinned to c9def3e214)
Solutions
- Fix the bucket name to valid OSS form and re-run terraform init.
- Ensure the variable feeding bucket resolves to the real lowercase bucket name.
- Re-run terraform workspace delete after init.
Example fix
// before
backend "oss" {
bucket = "TF_State"
}
// after
backend "oss" {
bucket = "tf-state"
} Defensive patterns
Strategy: validation
Validate before calling
// Reuse validBucketName (error 344) before Delete path.
if !validBucketName(c.bucketName) {
return fmt.Errorf("refusing Delete: invalid bucket %q", c.bucketName)
} Try / catch
// Local validation; fix name and re-init, no retry.
if strings.Contains(err.Error(), "error getting bucket") { fixBucketName(err) } Prevention
- Validate backend bucket once at config time.
- Re-init after backend edits.
When it happens
Trigger: Delete() reached with an invalid bucketName (uppercase, underscore, length, illegal chars). Bucket() rejects it locally; no OSS call made.
Common situations: Bucket attribute edited to an invalid name; variable interpolation produced garbage; stale cached backend config.
Related errors
- error getting bucket: %#v
- error getting bucket: %#v
- state data in OSS does not have the expected content. This
- failed to upload state %s: %#v
- error deleting state %s: %#v
AI-assisted analysis of hashicorp/terraform@c9def3e214 (2026-08-07).
Data as JSON: /api/errors/14da9495f89464e8.
Report an issue: GitHub.