{"record":{"id":"eb9a21faa0131463","repo":"hashicorp/terraform","slug":"unsupported-ephemeral-resource-type-q","errorCode":null,"errorMessage":"unsupported ephemeral resource type %q","messagePattern":"unsupported ephemeral resource type %q","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/builtin/providers/terraform/provider.go","lineNumber":226,"sourceCode":"\tcase \"terraform_data\":\n\t\treturn moveDataStoreResourceState(req)\n\tdefault:\n\t\tvar resp providers.MoveResourceStateResponse\n\n\t\tresp.Diagnostics = resp.Diagnostics.Append(fmt.Errorf(\"Error: unsupported resource %s\", req.TargetTypeName))\n\n\t\treturn resp\n\t}\n}\n\n// ValidateResourceConfig is used to to validate the resource configuration values.\nfunc (p *Provider) ValidateResourceConfig(req providers.ValidateResourceConfigRequest) providers.ValidateResourceConfigResponse {\n\treturn validateDataStoreResourceConfig(req)\n}\n\nfunc (p *Provider) ValidateEphemeralResourceConfig(req providers.ValidateEphemeralResourceConfigRequest) providers.ValidateEphemeralResourceConfigResponse {\n\tvar resp providers.ValidateEphemeralResourceConfigResponse\n\tresp.Diagnostics = resp.Diagnostics.Append(fmt.Errorf(\"unsupported ephemeral resource type %q\", req.TypeName))\n\treturn resp\n}\n\n// OpenEphemeralResource implements providers.Interface.\nfunc (p *Provider) OpenEphemeralResource(req providers.OpenEphemeralResourceRequest) providers.OpenEphemeralResourceResponse {\n\tvar resp providers.OpenEphemeralResourceResponse\n\tresp.Diagnostics = resp.Diagnostics.Append(fmt.Errorf(\"unsupported ephemeral resource type %q\", req.TypeName))\n\treturn resp\n}\n\n// RenewEphemeralResource implements providers.Interface.\nfunc (p *Provider) RenewEphemeralResource(req providers.RenewEphemeralResourceRequest) providers.RenewEphemeralResourceResponse {\n\tvar resp providers.RenewEphemeralResourceResponse\n\tresp.Diagnostics = resp.Diagnostics.Append(fmt.Errorf(\"unsupported ephemeral resource type %q\", req.TypeName))\n\treturn resp\n}\n\n// CloseEphemeralResource implements providers.Interface.","sourceCodeStart":208,"sourceCodeEnd":244,"githubUrl":"https://github.com/hashicorp/terraform/blob/c9def3e214014c1188faabfc4a5bde5095139765/internal/builtin/providers/terraform/provider.go#L208-L244","documentation":"Returned unconditionally by `ValidateEphemeralResourceConfig` (provider.go:226). The built-in `terraform` provider declares an empty `EphemeralResourceTypes` map in `GetProviderSchema`, so no ephemeral resource type is valid and validation always fails.","triggerScenarios":"A `ValidateEphemeralResourceConfigRequest` is routed to this provider during validation of an `ephemeral` block, e.g. `ephemeral \"terraform_token\" \"x\" { ... }`, or by a test/runtime calling the method directly.","commonSituations":"A user writes an `ephemeral` block against the built-in `terraform` provider, which provides no ephemeral resources; an experimental runtime dispatches ephemeral validation here; a future Terraform feature misroutes.","solutions":["Use a provider that actually declares ephemeral resources (e.g. a secrets provider) instead of `terraform`.","Confirm `len(GetProviderSchema().EphemeralResourceTypes) == 0` and skip dispatch.","Remove the `ephemeral` block targeting the built-in provider."],"exampleFix":"// before\nephemeral \"terraform_token\" \"x\" { ... }\n\n// after\nephemeral \"vault_token\" \"x\" { provider = vault ... }","handlingStrategy":"validation","validationCode":"schema := provider.GetProviderSchema()\nif _, ok := schema.EphemeralResourceTypes[req.TypeName]; !ok {\n    return unsupportedEphemeral(req.TypeName) // do not call ValidateEphemeralResourceConfig\n}","typeGuard":"func providerSupportsEphemeral(schema providers.GetProviderSchemaResponse, name string) bool {\n    _, ok := schema.EphemeralResourceTypes[name]\n    return ok\n}","tryCatchPattern":null,"preventionTips":["The built-in terraform provider declares zero ephemeral resources; never route ephemeral blocks to it.","Use a dedicated secrets/ephemeral-capable provider for ephemeral resources.","Gating logic should treat an empty EphemeralResourceTypes map as 'unsupported'."],"tags":["terraform","builtin-provider","ephemeral-resource","dispatch","defensive","provider-interface"],"analyzedSha":"c9def3e214014c1188faabfc4a5bde5095139765","analyzedAt":"2026-08-07T15:39:49.278Z","schemaVersion":2},"datasetVersion":"2026-08-07T21:17:07.882Z"}