{"record":{"id":"f97ca690f6f2293d","repo":"pulumi/pulumi","slug":"unknown-provider-v-v","errorCode":null,"errorMessage":"unknown provider '%v' -> '%v'","messagePattern":"unknown provider '(.+?)' -> '(.+?)'","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/resource/deploy/source_eval.go","lineNumber":750,"sourceCode":"// getProviderFromSource fetches the provider plugin for a resource, read, or invoke from the given\n// package with the given unparsed provider reference. If the unparsed provider reference is empty,\n// this function returns the plugin for the indicated package's default provider.\nfunc (rm *resmon) getProviderFromSource(\n\tproviderSource ProviderSource, defaultProviders *defaultProviders,\n\treq providers.ProviderRequest, rawProviderRef string,\n\ttoken tokens.ModuleMember,\n) (plugin.Provider, error) {\n\tproviderRef, err := rm.getProviderReference(defaultProviders, req, rawProviderRef)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"getProviderFromSource: %w\", err)\n\t} else if sdkproviders.IsDenyDefaultsProvider(providerRef) {\n\t\tmsg := diag.GetDefaultProviderDenied(\"Invoke\").Message\n\t\treturn nil, fmt.Errorf(msg, req.Package(), token)\n\t}\n\n\tprovider, ok := providerSource.GetProvider(providerRef)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"unknown provider '%v' -> '%v'\", rawProviderRef, providerRef)\n\t}\n\treturn provider, nil\n}\n\nfunc parseProviderRequest(\n\tpkg tokens.Package, version,\n\tpluginDownloadURL string, pluginChecksums map[string][]byte,\n\tparameterization *workspace.Parameterization,\n) (providers.ProviderRequest, error) {\n\tif version == \"\" {\n\t\tlogging.V(5).Infof(\"parseProviderRequest(%s): semver version is the empty string\", pkg)\n\t\treturn providers.NewProviderRequest(pkg, nil, pluginDownloadURL, pluginChecksums, parameterization), nil\n\t}\n\n\tparsedVersion, err := semver.Parse(version)\n\tif err != nil {\n\t\tlogging.V(5).Infof(\"parseProviderRequest(%s, %s): semver version string is invalid: %v\", pkg, version, err)\n\t\treturn providers.ProviderRequest{}, err","sourceCodeStart":732,"sourceCodeEnd":768,"githubUrl":"https://github.com/pulumi/pulumi/blob/793f7b2e160db4321fb7fb6b0607461e01cb251e/pkg/resource/deploy/source_eval.go#L732-L768","documentation":"After resolving a provider reference, `getProviderFromSource` looks it up in the provider source (`providerSource.GetProvider(providerRef)`). If no provider instance with that exact reference (package, type, name, ID) has been registered in this deployment, it fails with `unknown provider '<raw>' -> '<resolved ref>'`, showing both the raw and canonical reference.","triggerScenarios":"Passing an explicit provider reference to RegisterResource/Invoke whose provider resource was never registered in the current deployment — e.g. referencing a provider from another stack, a deleted provider, or a typo'd name/ID.","commonSituations":"Cross-stack provider reuse via `stackReference` without exporting the full provider; provider resource removed/renamed in code while other resources still reference the old URN; copied code referencing provider IDs that don't exist in this stack.","solutions":["Register the provider in the same stack and pass the Provider resource object directly","If cross-stack, export the provider as a stack output and use a Provider resource constructed from it, not a raw ID reference","Ensure the provider resource name matches what resources reference; remove stale references after renames","Run `pulumi stack output` / inspect state (`pulumi stack export`) to find valid provider URNs"],"exampleFix":"// before (TS)\nconst bucket = new aws.s3.Bucket(\"b\", {}, { provider: \"aws::Provider::old::ABC...\" });\n// after\nconst awsProvider = new aws.Provider(\"prov\");\nconst bucket = new aws.s3.Bucket(\"b\", {}, { provider: awsProvider });","handlingStrategy":"validation","validationCode":"// TS: before wiring a cross-stack provider, export and verify it\n// stack A: export const providerUrn = provider.urn;\n// stack B:\nconst ref = new pulumi.StackReference(\"org/proj/stackA\");\nconst urn = await ref.getOutputValue(\"providerUrn\");\nif (!urn || typeof urn !== 'string') throw new Error('provider not exported from source stack');","typeGuard":"function looksLikeProviderUrn(v: unknown): v is string {\n  return typeof v === 'string' && /::Provider::/.test(v) && /[a-z0-9]{26}$/.test(v);\n}","tryCatchPattern":"// TS automation API\ntry {\n  await stack.up();\n} catch (err) {\n  if (String(err).includes(\"unknown provider\")) {\n    console.error(\"Referenced provider is not registered in this stack; register it locally\");\n  }\n  throw err;\n}","preventionTips":["Reference providers via Provider resource objects created in the same stack","After renaming/removing a provider resource, update all resources referencing it","For cross-stack needs, export the provider and reconstruct it, don't copy raw IDs","Run a preview to catch dangling provider references before real deployments"],"tags":["provider","provider-resolution","stack-reference"],"backgroundTag":"unknown-provider-reference","analyzedSha":"793f7b2e160db4321fb7fb6b0607461e01cb251e","analyzedAt":"2026-08-31T09:36:43.099Z","schemaVersion":2},"datasetVersion":"2026-09-01T08:17:40.651Z"}