{"record":{"id":"ef3ff2bb814ddfef","repo":"hashicorp/terraform","slug":"resource-schema-not-found-for-type-q","errorCode":null,"errorMessage":"resource schema not found for type %q","messagePattern":"resource schema not found for type %q","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/grpcwrap/provider6.go","lineNumber":851,"sourceCode":"\t\treturn resp, nil\n\t}\n\n\tdv, err := encodeDynamicValue6(upgradeResp.UpgradedIdentity, ty)\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tresp.UpgradedIdentity = &tfplugin6.ResourceIdentityData{\n\t\tIdentityData: dv,\n\t}\n\treturn resp, nil\n}\n\nfunc (p *provider6) ListResource(req *tfplugin6.ListResource_Request, res tfplugin6.Provider_ListResourceServer) error {\n\tresourceSchema, ok := p.schema.ResourceTypes[req.TypeName]\n\tif !ok {\n\t\treturn fmt.Errorf(\"resource schema not found for type %q\", req.TypeName)\n\t}\n\tlistSchema, ok := p.schema.ListResourceTypes[req.TypeName]\n\tif !ok {\n\t\treturn fmt.Errorf(\"list resource schema not found for type %q\", req.TypeName)\n\t}\n\tcfg, err := decodeDynamicValue6(req.Config, listSchema.Body.ImpliedType())\n\tif err != nil {\n\t\treturn status.Errorf(codes.InvalidArgument, \"failed to decode config: %v\", err)\n\t}\n\tresp := p.provider.ListResource(providers.ListResourceRequest{\n\t\tTypeName:              req.TypeName,\n\t\tConfig:                cfg,\n\t\tLimit:                 req.Limit,\n\t\tIncludeResourceObject: req.IncludeResourceObject,\n\t})\n\tif resp.Diagnostics.HasErrors() {\n\t\treturn resp.Diagnostics.Err()\n\t}","sourceCodeStart":833,"sourceCodeEnd":869,"githubUrl":"https://github.com/hashicorp/terraform/blob/c9def3e214014c1188faabfc4a5bde5095139765/internal/grpcwrap/provider6.go#L833-L869","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\n// provider advertises ListResourceTypes[\"things\"] but not ResourceTypes[\"things\"]\nreq.TypeName = \"things\"  // -> resource schema not found for type \"things\"\n\n// after\nschema.ResourceTypes[\"things\"] = providers.Schema{Body: ...}\nschema.ListResourceTypes[\"things\"] = providers.Schema{Body: ...}","handlingStrategy":"validation","validationCode":"func resourceTypeAdvertised(s providers.GetProviderSchemaResponse, typ string) bool {\n    _, ok := s.ResourceTypes[typ]\n    return ok\n}","typeGuard":"func advertisedResourceTypes(s providers.GetProviderSchemaResponse) []string {\n    out := make([]string, 0, len(s.ResourceTypes))\n    for k := range s.ResourceTypes { out = append(out, k) }\n    return out\n}","tryCatchPattern":"if err := server.ListResource(req, stream); err != nil {\n    if strings.Contains(err.Error(), \"resource schema not found\") {\n        // re-init provider or skip this list resource\n    }\n}","preventionTips":["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."],"tags":["grpc","provider","schema","list-resource","terraform-core"],"analyzedSha":"c9def3e214014c1188faabfc4a5bde5095139765","analyzedAt":"2026-08-07T15:39:49.278Z","schemaVersion":2},"datasetVersion":"2026-08-07T20:17:04.800Z"}