hashicorp/nomad · error
plugin %q does not support snapshot
Error message
plugin %q does not support snapshot
What it means
Before issuing the controller RPC, CreateSnapshot checks that the volume's CSI plugin advertises the CSIControllerSupportsCreateDeleteSnapshot capability. If not, 'plugin %q does not support snapshot' is appended to the multierror. The plugin exists but its controller cannot create/delete snapshots.
Source
Thrown at nomad/csi_endpoint.go:1644
pluginID := snap.PluginID
if pluginID == "" {
pluginID = vol.PluginID
}
plugin, err := state.CSIPluginByID(nil, pluginID)
if err != nil {
multierror.Append(&mErr,
fmt.Errorf("error querying plugin %q: %v", pluginID, err))
continue
}
if plugin == nil {
multierror.Append(&mErr, fmt.Errorf("no such plugin %q", pluginID))
continue
}
if !plugin.HasControllerCapability(structs.CSIControllerSupportsCreateDeleteSnapshot) {
multierror.Append(&mErr,
fmt.Errorf("plugin %q does not support snapshot", pluginID))
continue
}
secrets := vol.Secrets
// merge request secrets onto volume secrets
maps.Copy(secrets, snap.Secrets)
cReq := &cstructs.ClientCSIControllerCreateSnapshotRequest{
ExternalSourceVolumeID: vol.ExternalID,
Name: snap.Name,
Secrets: secrets,
Parameters: snap.Parameters,
}
cReq.PluginID = pluginID
cResp := &cstructs.ClientCSIControllerCreateSnapshotResponse{}
err = v.serializedControllerRPC(pluginID, func() error {
return v.srv.RPC(method, cReq, cResp)
})View on GitHub (pinned to 482b49bf1a)
Solutions
- Verify capabilities with 'nomad plugin status <plugin-id>' — look for Create/Delete Snapshot under ControllerCapabilities
- Update the CSI plugin to a version/driver that supports snapshots and redeploy its job with the CreateDeleteSnapshot controller capability
- Use the storage provider's native snapshot tooling if the driver cannot support snapshots
Example fix
// before (plugin job capabilities)
csi_plugin { id = "my-plugin" type = "controller" capabilities = ["supports_attach_detach"] }
// after
csi_plugin { id = "my-plugin" type = "controller" capabilities = ["supports_attach_detach", "supports_create_delete_snapshot"] } Defensive patterns
Strategy: validation
Validate before calling
// check controller capabilities before issuing snapshot
p, _ := client.Plugins().Get(pluginID)
if p != nil && !contains(p.ControllerCapabilities, "supports_create_delete_snapshot") {
return fmt.Errorf("plugin %s cannot snapshot", pluginID)
} Try / catch
if err != nil && strings.Contains(err.Error(), "does not support snapshot") {
// fall back to provider-native snapshot tooling
} Prevention
- Check plugin capabilities with 'nomad plugin status' before designing snapshot workflows
- Deploy CSI driver versions that advertise snapshot capabilities
- Include supports_create_delete_snapshot in the controller job's csi_plugin capabilities block
When it happens
Trigger: Running 'nomad volume snapshot create' against a plugin whose controller job was launched without the CREATE_DELETE_SNAPSHOT controller capability, or a plugin that only supports attach/detach (no snapshot controller support).
Common situations: Using a storage driver (or older driver version) without snapshot support; plugin task missing the CSI_CONTROLLER_PLUGIN role or capability config; operator assumes snapshot support from a plugin that only manages volumes.
Related errors
- volume snapshot ID cannot be updated
- controller create snapshot: %v
- controller delete snapshot: %v
- controller list snapshots: %v
- unimplemented for this plugin
AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04).
Data as JSON: /api/errors/716b5f1dbd25eb4a.
Report an issue: GitHub.