Skip to content

Commit d1bf6b1

Browse files
committed
fix(vd): copy error from data volume
Signed-off-by: Isteb4k <[email protected]>
1 parent 1689580 commit d1bf6b1

File tree

9 files changed

+60
-8
lines changed

9 files changed

+60
-8
lines changed

images/virtualization-artifact/pkg/controller/service/condition.go

+10
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"unicode"
2121

2222
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
23+
cdiv1 "kubevirt.io/containerized-data-importer-api/pkg/apis/core/v1beta1"
2324

2425
"github.com/deckhouse/virtualization/api/core/v1alpha2/cvicondition"
2526
)
@@ -60,3 +61,12 @@ func CapitalizeFirstLetter(s string) string {
6061

6162
return string(runes)
6263
}
64+
65+
func GetDataVolumeCondition(conditionType cdiv1.DataVolumeConditionType, conditions []cdiv1.DataVolumeCondition) *cdiv1.DataVolumeCondition {
66+
for i, condition := range conditions {
67+
if condition.Type == conditionType {
68+
return &conditions[i]
69+
}
70+
}
71+
return nil
72+
}

images/virtualization-artifact/pkg/controller/service/disk_service.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,14 @@ func (s DiskService) GetPersistentVolume(ctx context.Context, pvc *corev1.Persis
235235
return helper.FetchObject(ctx, types.NamespacedName{Name: pvc.Spec.VolumeName}, s.client, &corev1.PersistentVolume{})
236236
}
237237

238-
func (s DiskService) CheckStorageClass(ctx context.Context, storageClassName *string) error {
238+
func (s DiskService) CheckImportProcess(ctx context.Context, dv *cdiv1.DataVolume, storageClassName *string) error {
239+
if dv != nil {
240+
dvRunning := GetDataVolumeCondition(cdiv1.DataVolumeRunning, dv.Status.Conditions)
241+
if dvRunning != nil && dvRunning.Status == corev1.ConditionFalse && dvRunning.Reason == "Error" {
242+
return fmt.Errorf("%w: %s", ErrDataVolumeNotRunning, dvRunning.Message)
243+
}
244+
}
245+
239246
if storageClassName == nil || *storageClassName == "" {
240247
return s.checkDefaultStorageClass(ctx)
241248
}
@@ -251,7 +258,6 @@ func (s DiskService) checkDefaultStorageClass(ctx context.Context) error {
251258
}
252259

253260
for _, sc := range scs.Items {
254-
// TODO comment.
255261
if sc.Annotations[common.AnnDefaultStorageClass] == "true" {
256262
return nil
257263
}

images/virtualization-artifact/pkg/controller/service/errors.go

+1
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,5 @@ var ErrTooSmallDiskSize = errors.New("virtual disk size is too small")
2323
var (
2424
ErrStorageClassNotFound = errors.New("storage class not found")
2525
ErrDefaultStorageClassNotFound = errors.New("default storage class not found")
26+
ErrDataVolumeNotRunning = errors.New("pvc import is not running")
2627
)

images/virtualization-artifact/pkg/controller/vd/internal/source/blank.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -150,14 +150,20 @@ func (ds BlankDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk) (boo
150150
return false, err
151151
}
152152

153-
err = ds.diskService.CheckStorageClass(ctx, vd.Spec.PersistentVolumeClaim.StorageClass)
153+
err = ds.diskService.CheckImportProcess(ctx, dv, vd.Spec.PersistentVolumeClaim.StorageClass)
154154
switch {
155155
case err == nil:
156156
vd.Status.Phase = virtv2.DiskProvisioning
157157
condition.Status = metav1.ConditionFalse
158158
condition.Reason = vdcondition.Provisioning
159159
condition.Message = "Import is in the process of provisioning to PVC."
160160
return false, nil
161+
case errors.Is(err, service.ErrDataVolumeNotRunning):
162+
vd.Status.Phase = virtv2.DiskFailed
163+
condition.Status = metav1.ConditionFalse
164+
condition.Reason = vdcondition.ProvisioningFailed
165+
condition.Message = service.CapitalizeFirstLetter(err.Error())
166+
return false, nil
161167
case errors.Is(err, service.ErrStorageClassNotFound):
162168
vd.Status.Phase = virtv2.DiskFailed
163169
condition.Status = metav1.ConditionFalse

images/virtualization-artifact/pkg/controller/vd/internal/source/http.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -239,14 +239,20 @@ func (ds HTTPDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk) (bool
239239
return false, err
240240
}
241241

242-
err = ds.diskService.CheckStorageClass(ctx, vd.Spec.PersistentVolumeClaim.StorageClass)
242+
err = ds.diskService.CheckImportProcess(ctx, dv, vd.Spec.PersistentVolumeClaim.StorageClass)
243243
switch {
244244
case err == nil:
245245
vd.Status.Phase = virtv2.DiskProvisioning
246246
condition.Status = metav1.ConditionFalse
247247
condition.Reason = vdcondition.Provisioning
248248
condition.Message = "Import is in the process of provisioning to PVC."
249249
return false, nil
250+
case errors.Is(err, service.ErrDataVolumeNotRunning):
251+
vd.Status.Phase = virtv2.DiskFailed
252+
condition.Status = metav1.ConditionFalse
253+
condition.Reason = vdcondition.ProvisioningFailed
254+
condition.Message = service.CapitalizeFirstLetter(err.Error())
255+
return false, nil
250256
case errors.Is(err, service.ErrStorageClassNotFound):
251257
vd.Status.Phase = virtv2.DiskFailed
252258
condition.Status = metav1.ConditionFalse

images/virtualization-artifact/pkg/controller/vd/internal/source/object_ref.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -163,14 +163,20 @@ func (ds ObjectRefDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk)
163163
return false, err
164164
}
165165

166-
err = ds.diskService.CheckStorageClass(ctx, vd.Spec.PersistentVolumeClaim.StorageClass)
166+
err = ds.diskService.CheckImportProcess(ctx, dv, vd.Spec.PersistentVolumeClaim.StorageClass)
167167
switch {
168168
case err == nil:
169169
vd.Status.Phase = virtv2.DiskProvisioning
170170
condition.Status = metav1.ConditionFalse
171171
condition.Reason = vdcondition.Provisioning
172172
condition.Message = "Import is in the process of provisioning to PVC."
173173
return false, nil
174+
case errors.Is(err, service.ErrDataVolumeNotRunning):
175+
vd.Status.Phase = virtv2.DiskFailed
176+
condition.Status = metav1.ConditionFalse
177+
condition.Reason = vdcondition.ProvisioningFailed
178+
condition.Message = service.CapitalizeFirstLetter(err.Error())
179+
return false, nil
174180
case errors.Is(err, service.ErrStorageClassNotFound):
175181
vd.Status.Phase = virtv2.DiskFailed
176182
condition.Status = metav1.ConditionFalse

images/virtualization-artifact/pkg/controller/vd/internal/source/registry.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -244,14 +244,20 @@ func (ds RegistryDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk) (
244244
return false, err
245245
}
246246

247-
err = ds.diskService.CheckStorageClass(ctx, vd.Spec.PersistentVolumeClaim.StorageClass)
247+
err = ds.diskService.CheckImportProcess(ctx, dv, vd.Spec.PersistentVolumeClaim.StorageClass)
248248
switch {
249249
case err == nil:
250250
vd.Status.Phase = virtv2.DiskProvisioning
251251
condition.Status = metav1.ConditionFalse
252252
condition.Reason = vdcondition.Provisioning
253253
condition.Message = "Import is in the process of provisioning to PVC."
254254
return false, nil
255+
case errors.Is(err, service.ErrDataVolumeNotRunning):
256+
vd.Status.Phase = virtv2.DiskFailed
257+
condition.Status = metav1.ConditionFalse
258+
condition.Reason = vdcondition.ProvisioningFailed
259+
condition.Message = service.CapitalizeFirstLetter(err.Error())
260+
return false, nil
255261
case errors.Is(err, service.ErrStorageClassNotFound):
256262
vd.Status.Phase = virtv2.DiskFailed
257263
condition.Status = metav1.ConditionFalse

images/virtualization-artifact/pkg/controller/vd/internal/source/upload.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -266,14 +266,20 @@ func (ds UploadDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk) (bo
266266
return false, err
267267
}
268268

269-
err = ds.diskService.CheckStorageClass(ctx, vd.Spec.PersistentVolumeClaim.StorageClass)
269+
err = ds.diskService.CheckImportProcess(ctx, dv, vd.Spec.PersistentVolumeClaim.StorageClass)
270270
switch {
271271
case err == nil:
272272
vd.Status.Phase = virtv2.DiskProvisioning
273273
condition.Status = metav1.ConditionFalse
274274
condition.Reason = vdcondition.Provisioning
275275
condition.Message = "Import is in the process of provisioning to PVC."
276276
return false, nil
277+
case errors.Is(err, service.ErrDataVolumeNotRunning):
278+
vd.Status.Phase = virtv2.DiskFailed
279+
condition.Status = metav1.ConditionFalse
280+
condition.Reason = vdcondition.ProvisioningFailed
281+
condition.Message = service.CapitalizeFirstLetter(err.Error())
282+
return false, nil
277283
case errors.Is(err, service.ErrStorageClassNotFound):
278284
vd.Status.Phase = virtv2.DiskFailed
279285
condition.Status = metav1.ConditionFalse

images/virtualization-artifact/pkg/controller/vd/vd_reconciler.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,12 @@ func (r *Reconciler) SetupController(_ context.Context, mgr manager.Manager, ctr
149149
return false
150150
}
151151

152-
return oldDV.Status.Progress != newDV.Status.Progress
152+
if oldDV.Status.Progress != newDV.Status.Progress {
153+
return true
154+
}
155+
156+
dvRunning := service.GetDataVolumeCondition(cdiv1.DataVolumeRunning, newDV.Status.Conditions)
157+
return dvRunning != nil && dvRunning.Reason == "Error"
153158
},
154159
},
155160
); err != nil {

0 commit comments

Comments
 (0)