diff --git a/pkg/node/volumemgr.go b/pkg/node/volumemgr.go index fac40e58f..69ad1764f 100644 --- a/pkg/node/volumemgr.go +++ b/pkg/node/volumemgr.go @@ -1310,12 +1310,23 @@ func (m *VolumeManager) overrideDriveHealth(drive *api.Drive, overriddenHealth, m.log.Warnf("Drive %s has health annotation. Health %s has been overridden with %s.", driveCRName, drive.Health, overriddenHealth) drive.Health = overriddenHealth + m.overrideDriveStatusWhenHealthBad(drive, overriddenHealth, driveCRName) } else { m.log.Errorf("Drive %s has health annotation, but value %s is not %s/%s/%s/%s. Health is not overridden.", driveCRName, overriddenHealth, apiV1.HealthGood, apiV1.HealthSuspect, apiV1.HealthBad, apiV1.HealthUnknown) } } +// overrideDriveStatusWhenHealthBad replaces drive status to offline when health is being overidden to bad or unknown +func (m *VolumeManager) overrideDriveStatusWhenHealthBad(drive *api.Drive, overriddenHealth, driveCRName string) { + if (overriddenHealth == apiV1.HealthBad) || + (overriddenHealth == apiV1.HealthUnknown) { + m.log.Warnf("Drive %s has health %s. Status is overridden with %s.", + driveCRName, drive.Health, apiV1.DriveStatusOffline) + drive.Status = apiV1.DriveStatusOffline + } +} + func (m *VolumeManager) setWbtValue(vol *volumecrd.Volume) error { device, err := m.findDeviceName(vol) if err != nil { diff --git a/pkg/node/volumemgr_test.go b/pkg/node/volumemgr_test.go index b6a40fb9d..e63015ab9 100644 --- a/pkg/node/volumemgr_test.go +++ b/pkg/node/volumemgr_test.go @@ -831,6 +831,7 @@ func TestVolumeManager_updatesDrivesCRs_Success(t *testing.T) { assert.Nil(t, vm.k8sClient.ReadCR(testCtx, drive.Name, "", actualDrive)) assert.Nil(t, err) assert.Equal(t, actualDrive.Spec.Health, apiV1.HealthBad) + assert.Equal(t, apiV1.DriveStatusOffline, actualDrive.Spec.Status) }) t.Run("new drive", func(t *testing.T) {