hashicorp/nomad · error

plugin has no controller

Error message

plugin has no controller

What it means

Fires in CSIVolume.Create: the plugin validated successfully but ControllerRequired is false, so it exposes no controller endpoint and cannot create volumes on demand; only static volumes can be registered against it.

Source

Thrown at nomad/csi_endpoint.go:1179

		if !allowVolume(aclObj, vol.Namespace) {
			return structs.ErrPermissionDenied
		}
		// Check if override is set and we do not have permissions
		if args.PolicyOverride {
			if !aclObj.AllowNsOp(vol.Namespace, acl.NamespaceCapabilitySentinelOverride) {
				return structs.ErrPermissionDenied
			}
		}

		if err = vol.Validate(); err != nil {
			return err
		}
		plugin, err := v.pluginValidateVolume(vol)
		if err != nil {
			return err
		}
		if !plugin.ControllerRequired {
			return fmt.Errorf("plugin has no controller")
		}
		if !plugin.HasControllerCapability(structs.CSIControllerSupportsCreateDelete) {
			return fmt.Errorf("plugin does not support creating volumes")
		}

		// if the volume already exists, we'll update it instead
		// current will be nil if it does not exist.
		current, err := snap.CSIVolumeByID(nil, vol.Namespace, vol.ID)
		if err != nil {
			return err
		}

		validatedVols = append(validatedVols,
			validated{vol, plugin, current})

		warn, err := v.enforceEnterprisePolicy(snap, vol, current, args.GetIdentity().GetACLToken(), args.PolicyOverride)
		if warn != nil {
			reply.Warnings = warn.Error()

View on GitHub (pinned to 482b49bf1a)

Solutions

  1. Use volume register (static volumes) instead of create for controller-less plugins
  2. Configure the plugin with a controller if dynamic creation is required
  3. Choose a CSI plugin that provides a controller
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at nomad/csi_endpoint.go:1179 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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