pulumi/pulumi · warning · NotImplementedError

List is not implemented by the provider

Error message

List is not implemented by the provider

What it means

The List RPC on the experimental provider server is deliberately unimplemented: it sets the gRPC status to UNIMPLEMENTED, sets that detail message, and raises NotImplementedError. Pulumi calls List only when it needs to enumerate resources from a provider, and the experimental dynamic-provider framework does not support it. The error tells you the provider you are talking to cannot list resources.

Source

Thrown at sdk/python/lib/pulumi/provider/experimental/server.py:662

    async def Read(self, request, context):
        resp = await self._provider.read(
            provider.ReadRequest(
                request.urn,
                request.id,
                PropertyValue.unmarshal_map(request.properties),
                PropertyValue.unmarshal_map(request.inputs),
            )
        )
        return proto.ReadResponse(
            id=resp.resource_id,
            properties=PropertyValue.marshal_map(resp.properties),
            inputs=PropertyValue.marshal_map(resp.inputs),
        )

    async def List(self, request, context):
        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
        context.set_details("List is not implemented by the provider")
        raise NotImplementedError("List is not implemented by the provider")


def main(args: list[str], version: str, provider: provider.Provider) -> None:
    """For use as the `main` in programs that wrap a custom Provider
    implementation into a Pulumi-compatible gRPC server.

    :param provider: an instance of a Provider subclass

    :args: command line arguments such as os.argv[1:]

    """

    argp = argparse.ArgumentParser(description="Pulumi provider plugin (gRPC server)")
    argp.add_argument("engine", help="Pulumi engine address")
    argp.add_argument("--logflow", action="store_true", help="Currently ignored")
    argp.add_argument("--logtostderr", action="store_true", help="Currently ignored")

    known_args, _ = argp.parse_known_args()

View on GitHub (pinned to 793f7b2e16)

Solutions

  1. If List is not needed for your workflow, avoid commands/flows that enumerate provider resources, or ignore this UNIMPLEMENTED result if your tooling tolerates it
  2. Upgrade the pulumi Python SDK so the experimental server implements (or properly negotiates) the List capability if a newer version adds support
  3. If you need List, migrate the provider to the non-experimental provider framework or implement the capability in a wrapper server
  4. File/check an issue on pulumi for List support in the experimental provider server
Defensive patterns

Strategy: fallback

Validate before calling

# probe capability before depending on List
try:
    stub.List(proto.ListRequest(), timeout=5)
    list_supported = True
except grpc.RpcError as e:
    list_supported = e.code() != grpc.StatusCode.UNIMPLEMENTED

Type guard

def supports_list(e: grpc.RpcError) -> bool:
    return e.code() == grpc.StatusCode.UNIMPLEMENTED and 'List is not implemented' in e.details()

Try / catch

try:
    resp = stub.List(request)
except grpc.RpcError as e:
    if e.code() == grpc.StatusCode.UNIMPLEMENTED:
        log.warning("provider does not support List; skipping enumeration")
    else:
        raise

Prevention

When it happens

Trigger: The Pulumi engine (or another client) invokes the List RPC against a provider served by the experimental server — e.g. operations that enumerate provider resources such as pulumi refresh with certain resource types, import/bulk-operations flows, or manual gRPC calls to List.

Common situations: Using an experimental dynamic provider with CLI commands or features that probe the List capability; running newer engine versions against older experimental SDK code where the engine newly calls List.

Related errors


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