hashicorp/nomad · error
plugin does not support listing snapshots
Error message
plugin does not support listing snapshots
What it means
Nomad's CSI ListSnapshots RPC forwards a ControllerListSnapshots request to a CSI plugin's controller. This error is thrown when the target CSI plugin exists but its controller capabilities do not advertise CSI ControllerService Capability LIST_SNAPSHOTS, so Nomad refuses to send a call the plugin cannot answer.
Source
Thrown at nomad/csi_endpoint.go:1788
// NOTE: this is the plugin's namespace, not the volume(s) because they
// might not even be registered
if !allowVolume(aclObj, args.RequestNamespace()) {
return structs.ErrPermissionDenied
}
snap, err := v.srv.fsm.State().Snapshot()
if err != nil {
return err
}
plugin, err := snap.CSIPluginByID(nil, args.PluginID)
if err != nil {
return err
}
if plugin == nil {
return fmt.Errorf("no such plugin")
}
if !plugin.HasControllerCapability(structs.CSIControllerSupportsListSnapshots) {
return fmt.Errorf("plugin does not support listing snapshots")
}
method := "ClientCSI.ControllerListSnapshots"
cReq := &cstructs.ClientCSIControllerListSnapshotsRequest{
MaxEntries: args.PerPage,
StartingToken: args.NextToken,
Secrets: args.Secrets,
}
cReq.PluginID = plugin.ID
cResp := &cstructs.ClientCSIControllerListSnapshotsResponse{}
err = v.srv.RPC(method, cReq, cResp)
if err != nil {
return err
}
if args.PerPage > 0 && args.PerPage < int32(len(cResp.Entries)) {
// this should be done in the plugin already, but enforce it
reply.Snapshots = cResp.Entries[:args.PerPage]View on GitHub (pinned to 482b49bf1a)
Solutions
- Verify the plugin's controller capabilities: nomad plugin status <plugin-id> and check it advertises list-snapshots support
- Upgrade the CSI plugin/driver to a version that implements ControllerListSnapshots (CSI spec >= 1.2 with LIST_SNAPSHOTS controller capability)
- List snapshots directly from the storage backend or via the driver's own tooling instead of through Nomad
- If using an external snapshotter, ensure the snapshot controller sidecar is deployed alongside the driver
Example fix
// before: querying snapshots against a plugin without the capability nomad plugin status aws-ebs-csi-driver # no list-snapshots cap nomad csi snapshot list // Error: plugin does not support listing snapshots // after: upgrade the driver or check capability first capabilities=$(curl -s --unix-socket /run/csi/socket http://localhost/... ) # deploy a driver build that declares LIST_SNAPSHOTS controller capability, then: nomad csi snapshot list
Defensive patterns
Strategy: validation
Validate before calling
p, err := client.CSIPlugins().Get(pluginID)
if err != nil { return err }
if !hasCap(p.ControllerCapabilities, "LIST_SNAPSHOTS") {
return fmt.Errorf("plugin %s cannot list snapshots", pluginID)
} Type guard
func supportsListSnapshots(caps []string) bool {
for _, c := range caps {
if c == "LIST_SNAPSHOTS" { return true }
}
return false
} Try / catch
snaps, err := client.CSISnapshots().List(opts)
if err != nil {
if strings.Contains(err.Error(), "does not support listing snapshots") {
return nil, fmt.Errorf("driver %s lacks snapshot support; use backend tooling", driver)
}
return nil, err
} Prevention
- Check nomad plugin status for controller capabilities before using snapshot APIs
- Pin CSI driver versions that declare LIST_SNAPSHOTS controller capability
- Feature-detect at deploy time rather than at first snapshot-list call
- Document per-driver snapshot support in your platform docs
When it happens
Trigger: Calling GET /v1/plugins/snapshots (or ClientCSI ControllerListSnapshots via nomad csi snapshot list) against a plugin that was registered without CSIControllerSupportsListSnapshots in its controller capability set — typically a plugin whose controller only supports create/delete/attach, or a controller-only plugin built from an older CSI spec.
Common situations: Using a storage vendor's driver version that predates snapshot listing support; a plugin registered as controller-capable for other operations but without LIST_SNAPSHOTS; misconfigured plugin csi_spec_version; attempting snapshot listing on drivers that only implement node-level snapshots.
Related errors
- CSI.ControllerAttachVolume: VolumeID is required
- CSI.ControllerAttachVolume: ClientCSINodeID is required
- CSI.ControllerDetachVolume: VolumeID is required
- CSI.ControllerDetachVolume: ClientCSINodeID is required
- CSI.NodeDetachVolume: PluginID is required
AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04).
Data as JSON: /api/errors/ac186c98f01953f9.
Report an issue: GitHub.