diff --git a/client/devicemanager/instance.go b/client/devicemanager/instance.go index 3119f7207df..edeeb2e8eb7 100644 --- a/client/devicemanager/instance.go +++ b/client/devicemanager/instance.go @@ -336,7 +336,11 @@ START: // Start fingerprinting fingerprintCh, err := devicePlugin.Fingerprint(i.ctx) - if err != nil { + if err == device.ErrPluginDisabled { + i.logger.Info("fingerprinting failed: plugin is not enabled") + i.handleFingerprintError() + return + } else if err != nil { i.logger.Error("fingerprinting failed", "error", err) i.handleFingerprintError() return diff --git a/devices/gpu/nvidia/device.go b/devices/gpu/nvidia/device.go index c0abf874396..67680dc2a0e 100644 --- a/devices/gpu/nvidia/device.go +++ b/devices/gpu/nvidia/device.go @@ -70,8 +70,6 @@ var ( hclspec.NewLiteral("\"1m\""), ), }) - - errDeviceNotEnabled = fmt.Errorf("Nvidia device is not enabled") ) // Config contains configuration information for the plugin. @@ -160,7 +158,7 @@ func (d *NvidiaDevice) SetConfig(cfg *base.Config) error { // devices health changes, messages will be emitted. func (d *NvidiaDevice) Fingerprint(ctx context.Context) (<-chan *device.FingerprintResponse, error) { if !d.enabled { - return nil, errDeviceNotEnabled + return nil, device.ErrPluginDisabled } outCh := make(chan *device.FingerprintResponse) @@ -184,7 +182,7 @@ func (d *NvidiaDevice) Reserve(deviceIDs []string) (*device.ContainerReservation return &device.ContainerReservation{}, nil } if !d.enabled { - return nil, errDeviceNotEnabled + return nil, device.ErrPluginDisabled } // Due to the asynchronous nature of NvidiaPlugin, there is a possibility @@ -221,7 +219,7 @@ func (d *NvidiaDevice) Reserve(deviceIDs []string) (*device.ContainerReservation // Stats streams statistics for the detected devices. func (d *NvidiaDevice) Stats(ctx context.Context, interval time.Duration) (<-chan *device.StatsResponse, error) { if !d.enabled { - return nil, errDeviceNotEnabled + return nil, device.ErrPluginDisabled } outCh := make(chan *device.StatsResponse) diff --git a/devices/gpu/nvidia/device_test.go b/devices/gpu/nvidia/device_test.go index 0554a0b4205..a5ec354e243 100644 --- a/devices/gpu/nvidia/device_test.go +++ b/devices/gpu/nvidia/device_test.go @@ -112,7 +112,7 @@ func TestReserve(t *testing.T) { { Name: "Device is disabled", ExpectedReservation: nil, - ExpectedError: errDeviceNotEnabled, + ExpectedError: device.ErrPluginDisabled, RequestedIDs: []string{ "UUID1", "UUID2", diff --git a/plugins/device/device.go b/plugins/device/device.go index c1e8b0bf406..32fa16133a7 100644 --- a/plugins/device/device.go +++ b/plugins/device/device.go @@ -15,6 +15,11 @@ const ( DeviceTypeGPU = "gpu" ) +var ( + // ErrPluginDisabled indicates that the device plugin is disabled + ErrPluginDisabled = fmt.Errorf("device is not enabled") +) + // DevicePlugin is the interface for a plugin that can expose detected devices // to Nomad and inform it how to mount them. type DevicePlugin interface {