hashicorp/terraform · error
resource schema not found for type %q
Error message
resource schema not found for type %q
What it means
Returned by ListResource (internal/grpcwrap/provider6.go:851) when the streamed ListResource request's req.TypeName is not a key in p.schema.ResourceTypes. The handler first resolves the underlying resource schema (used to encode each item's 'state' attribute); if the type is unknown it aborts before even checking the list-resource schema.
Source
Thrown at internal/grpcwrap/provider6.go:851
return resp, nil
}
dv, err := encodeDynamicValue6(upgradeResp.UpgradedIdentity, ty)
if err != nil {
resp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)
return resp, nil
}
resp.UpgradedIdentity = &tfplugin6.ResourceIdentityData{
IdentityData: dv,
}
return resp, nil
}
func (p *provider6) ListResource(req *tfplugin6.ListResource_Request, res tfplugin6.Provider_ListResourceServer) error {
resourceSchema, ok := p.schema.ResourceTypes[req.TypeName]
if !ok {
return fmt.Errorf("resource schema not found for type %q", req.TypeName)
}
listSchema, ok := p.schema.ListResourceTypes[req.TypeName]
if !ok {
return fmt.Errorf("list resource schema not found for type %q", req.TypeName)
}
cfg, err := decodeDynamicValue6(req.Config, listSchema.Body.ImpliedType())
if err != nil {
return status.Errorf(codes.InvalidArgument, "failed to decode config: %v", err)
}
resp := p.provider.ListResource(providers.ListResourceRequest{
TypeName: req.TypeName,
Config: cfg,
Limit: req.Limit,
IncludeResourceObject: req.IncludeResourceObject,
})
if resp.Diagnostics.HasErrors() {
return resp.Diagnostics.Err()
}View on GitHub (pinned to c9def3e214)
Solutions
- Ensure GetProviderSchema.ResourceTypes contains the resource type backing the list resource.
- Upgrade/reinstall the provider so its advertised resource types match what config/state expect.
- Check the list resource block's type spelling and that it corresponds to a real resource.
- In test harnesses, make sure the wrapped providers.Interface returns the resource in its schema response.
Example fix
// before
// provider advertises ListResourceTypes["things"] but not ResourceTypes["things"]
req.TypeName = "things" // -> resource schema not found for type "things"
// after
schema.ResourceTypes["things"] = providers.Schema{Body: ...}
schema.ListResourceTypes["things"] = providers.Schema{Body: ...} Defensive patterns
Strategy: validation
Validate before calling
func resourceTypeAdvertised(s providers.GetProviderSchemaResponse, typ string) bool {
_, ok := s.ResourceTypes[typ]
return ok
} Type guard
func advertisedResourceTypes(s providers.GetProviderSchemaResponse) []string {
out := make([]string, 0, len(s.ResourceTypes))
for k := range s.ResourceTypes { out = append(out, k) }
return out
} Try / catch
if err := server.ListResource(req, stream); err != nil {
if strings.Contains(err.Error(), "resource schema not found") {
// re-init provider or skip this list resource
}
} Prevention
- Register the backing resource type in GetProviderSchema.ResourceTypes for every list resource.
- Keep provider version aligned with config/state via terraform init.
- Validate list resource type names against the provider's schema before invoking.
- Regression-test that list resources reference registered backing types.
When it happens
Trigger: Terraform core calls the ListResource gRPC for a resource type the provider did not advertise in GetProviderSchema.ResourceTypes; e.g. a list resource referencing a backing managed resource type that was renamed or not registered.
Common situations: Provider version downgrade (state/config references a type the older provider doesn't define), typo in a list resource block, an experimental list resource whose backing type was removed, or a custom provider test missing the resource schema.
Related errors
- list resource schema not found for type %q
- identity schema not found for type %s
- resource identity schema not found for type %q
- action schema not found for action %q
- missing provider schema
AI-assisted analysis of hashicorp/terraform@c9def3e214 (2026-08-07).
Data as JSON: /api/errors/ef3ff2bb814ddfef.
Report an issue: GitHub.