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 nil

View on GitHub (pinned to 793f7b2e16)

Solutions

  1. Dispatch invokes to the resolved provider for the resource's package, not the Registry
  2. Update the Pulumi engine (this is an internal invariant violation)
  3. 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

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


AI-assisted analysis of pulumi/pulumi@793f7b2e16 (2026-08-31). Data as JSON: /api/errors/10a930be4183fb0a. Report an issue: GitHub.