pulumi/pulumi · error
the provider registry is not invokable
Error message
the provider registry is not invokable
What it means
Registry.Invoke both fails the process contract (contract.Failf) and returns this error as a defensive fallback, because invokes must never be routed through the provider registry. Reaching this line means the eval source violated its responsibility to select the right host for an invoke.
Source
Thrown at pkg/resource/deploy/providers/registry.go:1047
}
func (r *Registry) Read(context.Context, plugin.ReadRequest) (plugin.ReadResponse, error) {
return plugin.ReadResponse{}, errors.New("provider resources may not be read")
}
func (r *Registry) List(context.Context, plugin.ListRequest) (*plugin.ListStream, error) {
return nil, errors.New("provider resources may not be listed")
}
func (r *Registry) Construct(context.Context, plugin.ConstructRequest) (plugin.ConstructResponse, error) {
return plugin.ConstructResult{}, errors.New("provider resources may not be constructed")
}
func (r *Registry) Invoke(context.Context, plugin.InvokeRequest) (plugin.InvokeResponse, error) {
// It is the responsibility of the eval source to ensure that we never attempt an invoke using the provider
// registry.
contract.Failf("Invoke must not be called on the provider registry")
return plugin.InvokeResponse{}, errors.New("the provider registry is not invokable")
}
func (r *Registry) Call(context.Context, plugin.CallRequest) (plugin.CallResponse, error) {
// It is the responsibility of the eval source to ensure that we never attempt an call using the provider
// registry.
contract.Failf("Call must not be called on the provider registry")
return plugin.CallResult{}, errors.New("the provider registry is not callable")
}
func (r *Registry) GetPluginInfo(context.Context) (plugin.PluginInfo, error) {
// return an error: this should not be called for the provider registry
return plugin.PluginInfo{}, errors.New("the provider registry does not report plugin info")
}
func (r *Registry) SignalCancellation(context.Context) error {
// At the moment there isn't anything reasonable we can do here. In the future, it might be nice to plumb
// cancellation through the plugin loader and cancel any outstanding load requests here.
return nilView on GitHub (pinned to 793f7b2e16)
Solutions
- Dispatch invokes to the resolved provider for the resource's package, not the Registry
- Update the Pulumi engine (this is an internal invariant violation)
- File a bug with a reproduction if reached from standard Pulumi usage
Defensive patterns
Strategy: validation
Validate before calling
// Resolve the provider for the invoke's package first
prov, err := registry.GetProviderForPackage(pkg)
if err != nil { return err }
// invoke via prov, never via registry Prevention
- Always resolve a concrete provider before Invoke
- Note that contract.Failf aborts the process — never call this path
- Add integration tests covering invoke dispatch
When it happens
Trigger: An InvokeRequest (e.g. a data-source call like aws.getAmi) is routed to the Registry instead of the concrete provider instance.
Common situations: Engine dispatch bugs in eval source selection; custom tooling built on internal deploy packages calling Invoke on the registry.
Related errors
- provider resources may not be read
- provider resources may not be listed
- provider resources may not be constructed
- the provider registry is not callable
- the provider registry does not report plugin info
AI-assisted analysis of pulumi/pulumi@793f7b2e16 (2026-08-31).
Data as JSON: /api/errors/10a930be4183fb0a.
Report an issue: GitHub.