Skip to content

Commit e781186

Browse files
authored
Update CNSUnregisterVolume's status using Status subresource client (#3491)
1 parent 4afb6dc commit e781186

File tree

3 files changed

+21
-18
lines changed

3 files changed

+21
-18
lines changed

pkg/apis/cnsoperator/config/cnsunregistervolume_crd.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ spec:
6262
type: object
6363
served: true
6464
storage: true
65+
subresources:
66+
status: {}
6567
status:
6668
acceptedNames:
6769
kind: ""

pkg/kubernetes/kubernetes.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,3 +694,19 @@ func PatchFinalizers(ctx context.Context, c client.Client, obj client.Object, fi
694694
patch := client.MergeFromWithOptions(original, client.MergeFromWithOptimisticLock{})
695695
return c.Patch(ctx, obj, patch)
696696
}
697+
698+
// UpdateStatus updates the status subresource of the given Kubernetes object.
699+
// If the object is a Custom Resource, make sure that the `subresources` field in the
700+
// CustomResourceDefinition includes `status` to enable status subresource updates.
701+
func UpdateStatus(ctx context.Context, c client.Client, obj client.Object) error {
702+
log := logger.GetLogger(ctx)
703+
if err := c.Status().Update(ctx, obj); err != nil {
704+
log.Errorf("Failed to update status for %s %s/%s: %v", obj.GetObjectKind().GroupVersionKind().Kind,
705+
obj.GetNamespace(), obj.GetName(), err)
706+
return err
707+
}
708+
709+
log.Infof("Successfully updated status for %s %s/%s", obj.GetObjectKind().GroupVersionKind().Kind,
710+
obj.GetNamespace(), obj.GetName())
711+
return nil
712+
}

pkg/syncer/cnsoperator/controller/cnsunregistervolume/cnsunregistervolume_controller.go

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -404,12 +404,8 @@ func validateVolumeNotInUse(ctx context.Context, volumeID string, pvcName string
404404
// instance.
405405
func setInstanceError(ctx context.Context, r *ReconcileCnsUnregisterVolume,
406406
instance *cnsunregistervolumev1alpha1.CnsUnregisterVolume, errMsg string) {
407-
log := logger.GetLogger(ctx)
408407
instance.Status.Error = errMsg
409-
err := updateCnsUnregisterVolume(ctx, r.client, instance)
410-
if err != nil {
411-
log.Errorf("updateCnsUnregisterVolume failed. err: %v", err)
412-
}
408+
_ = k8s.UpdateStatus(ctx, r.client, instance)
413409
recordEvent(ctx, r, instance, v1.EventTypeWarning, errMsg)
414410
}
415411

@@ -419,10 +415,11 @@ func setInstanceSuccess(ctx context.Context, r *ReconcileCnsUnregisterVolume,
419415
instance *cnsunregistervolumev1alpha1.CnsUnregisterVolume, msg string) error {
420416
instance.Status.Unregistered = true
421417
instance.Status.Error = ""
422-
err := updateCnsUnregisterVolume(ctx, r.client, instance)
418+
err := k8s.UpdateStatus(ctx, r.client, instance)
423419
if err != nil {
424420
return err
425421
}
422+
426423
recordEvent(ctx, r, instance, v1.EventTypeNormal, msg)
427424
return nil
428425
}
@@ -453,15 +450,3 @@ func recordEvent(ctx context.Context, r *ReconcileCnsUnregisterVolume,
453450
backOffDurationMapMutex.Unlock()
454451
}
455452
}
456-
457-
// updateCnsUnregisterVolume updates the CnsUnregisterVolume instance in K8S.
458-
func updateCnsUnregisterVolume(ctx context.Context, client client.Client,
459-
instance *cnsunregistervolumev1alpha1.CnsUnregisterVolume) error {
460-
log := logger.GetLogger(ctx)
461-
err := client.Update(ctx, instance)
462-
if err != nil {
463-
log.Errorf("Failed to update CnsUnregisterVolume instance: %q on namespace: %q. Error: %+v",
464-
instance.Name, instance.Namespace, err)
465-
}
466-
return err
467-
}

0 commit comments

Comments
 (0)