Skip to content

Commit 50e2f28

Browse files
committed
fix(api, vmop): set Completed condition to InProgress on restore/clone start
- Set Completed condition to False with CloneInProgress/RestoreInProgress reason when VMOP phase transitions to InProgress, fixing condition showing Unknown - Skip process clone/restore steps if VMOP is already completed to prevent re-running finished operations Signed-off-by: Daniil Antoshin <daniil.antoshin@flant.com>
1 parent 85dedd3 commit 50e2f28

File tree

3 files changed

+23
-0
lines changed

3 files changed

+23
-0
lines changed

images/virtualization-artifact/pkg/controller/vmop/snapshot/internal/handler/lifecycle.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,16 @@ func (h LifecycleHandler) Handle(ctx context.Context, vmop *v1alpha2.VirtualMach
116116

117117
// 6. The Operation is valid, and can be executed.
118118
vmop.Status.Phase = v1alpha2.VMOPPhaseInProgress
119+
120+
reason := svcOp.GetInProgressReason()
121+
conditions.SetCondition(
122+
conditions.NewConditionBuilder(vmopcondition.TypeCompleted).
123+
Generation(vmop.GetGeneration()).
124+
Reason(reason).
125+
Message("Wait for operation to complete").
126+
Status(metav1.ConditionFalse),
127+
&vmop.Status.Conditions)
128+
119129
return svcOp.Execute(ctx)
120130
}
121131

images/virtualization-artifact/pkg/controller/vmop/snapshot/internal/step/process_clone_step.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,19 @@ import (
2121
"errors"
2222

2323
corev1 "k8s.io/api/core/v1"
24+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2425
"k8s.io/apimachinery/pkg/types"
2526
"sigs.k8s.io/controller-runtime/pkg/client"
2627
"sigs.k8s.io/controller-runtime/pkg/reconcile"
2728

2829
"github.com/deckhouse/virtualization-controller/pkg/common/annotations"
2930
"github.com/deckhouse/virtualization-controller/pkg/common/object"
31+
"github.com/deckhouse/virtualization-controller/pkg/controller/conditions"
3032
"github.com/deckhouse/virtualization-controller/pkg/controller/service/restorer"
3133
"github.com/deckhouse/virtualization-controller/pkg/controller/service/restorer/common"
3234
"github.com/deckhouse/virtualization-controller/pkg/eventrecord"
3335
"github.com/deckhouse/virtualization/api/core/v1alpha2"
36+
"github.com/deckhouse/virtualization/api/core/v1alpha2/vmopcondition"
3437
)
3538

3639
type ProcessCloneStep struct {
@@ -49,6 +52,11 @@ func NewProcessCloneStep(
4952
}
5053

5154
func (s ProcessCloneStep) Take(ctx context.Context, vmop *v1alpha2.VirtualMachineOperation) (*reconcile.Result, error) {
55+
cond, found := conditions.GetCondition(vmopcondition.TypeCompleted, vmop.Status.Conditions)
56+
if found && cond.Status == metav1.ConditionTrue {
57+
return nil, nil
58+
}
59+
5260
snapshotName, ok := vmop.Annotations[annotations.AnnVMOPSnapshotName]
5361
if !ok {
5462
return &reconcile.Result{}, errors.New("snapshot name annotation not found")

images/virtualization-artifact/pkg/controller/vmop/snapshot/internal/step/process_restore_step.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ func NewProcessRestoreStep(
5151
}
5252

5353
func (s ProcessRestoreStep) Take(ctx context.Context, vmop *v1alpha2.VirtualMachineOperation) (*reconcile.Result, error) {
54+
cond, found := conditions.GetCondition(vmopcondition.TypeCompleted, vmop.Status.Conditions)
55+
if found && cond.Status == metav1.ConditionTrue {
56+
return nil, nil
57+
}
58+
5459
maintenanceModeCondition, found := conditions.GetCondition(vmopcondition.TypeMaintenanceMode, vmop.Status.Conditions)
5560
if vmop.Spec.Restore.Mode != v1alpha2.SnapshotOperationModeDryRun && (!found || maintenanceModeCondition.Status == metav1.ConditionFalse) {
5661
return &reconcile.Result{}, nil

0 commit comments

Comments
 (0)