hashicorp/nomad · error

no CSI plugin named: %s could be found

Error message

no CSI plugin named: %s could be found

What it means

pluginValidateVolume looks up the CSI plugin that hosts the volume by PluginID. If no plugin with that ID exists in state store, registration/creation of the volume cannot validate provider info and fails.

Source

Thrown at nomad/csi_endpoint.go:226

			if err != nil {
				return err
			}

			reply.Volume = vol
			return v.srv.replySetIndex(csiVolumeTable, &reply.QueryMeta)
		}}
	return v.srv.blockingRPC(&opts)
}

func (v *CSIVolume) pluginValidateVolume(vol *structs.CSIVolume) (*structs.CSIPlugin, error) {
	state := v.srv.fsm.State()

	plugin, err := state.CSIPluginByID(nil, vol.PluginID)
	if err != nil {
		return nil, err
	}
	if plugin == nil {
		return nil, fmt.Errorf("no CSI plugin named: %s could be found", vol.PluginID)
	}

	if plugin.ControllerRequired && plugin.ControllersHealthy < 1 {
		return nil, fmt.Errorf("no healthy controllers for CSI plugin: %s", vol.PluginID)
	}

	vol.Provider = plugin.Provider
	vol.ProviderVersion = plugin.Version

	return plugin, nil
}

func (v *CSIVolume) controllerValidateVolume(req *structs.CSIVolumeRegisterRequest, vol *structs.CSIVolume, plugin *structs.CSIPlugin) error {

	if !plugin.ControllerRequired {
		// The plugin does not require a controller, so for now we won't do any
		// further validation of the volume.
		return nil

View on GitHub (pinned to 482b49bf1a)

Solutions

  1. Confirm the plugin ID with nomad plugin status and match it exactly in the volume spec
  2. Ensure the CSI plugin job is running on an eligible client so it registers with the server
  3. Re-deploy the CSI plugin job before registering volumes

Example fix

// before
plugin_id = "csi-plugin"  // typo
// after
plugin_id = "aws-ebs-csi" // matches nomad plugin status output
Defensive patterns

Strategy: validation

Validate before calling

// before registering, verify plugin exists
plugins, _ := client.CSIPlugins().List(nil)
// ensure spec plugin_id matches one of plugins

Try / catch

if err := volumeRegister(); err != nil && strings.Contains(err.Error(), "no CSI plugin named") { redeploy plugin job }

Prevention

When it happens

Trigger: Registering or creating a CSI volume whose PluginID does not match any plugin registered by a running Nomad client, or the plugin was deregistered after the volume spec was written.

Common situations: Typo in the plugin_id in the volume spec; CSI plugin workload not yet running so it never registered; plugin node drained or client offline causing plugin deregistration.

Related errors


AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04). Data as JSON: /api/errors/130305a6497842b4. Report an issue: GitHub.