Skip to content

Commit de306a3

Browse files
committed
task(vm-migration): update migration progress semantics
Signed-off-by: Daniil Antoshin <daniil.antoshin@flant.com>
1 parent 42f1801 commit de306a3

3 files changed

Lines changed: 60 additions & 4 deletions

File tree

images/virtualization-artifact/pkg/controller/vm/internal/migrating.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,10 +169,10 @@ func (h *MigratingHandler) syncMigrating(ctx context.Context, s state.VirtualMac
169169
cb.Message(fmt.Sprintf("Migration is pending: %s.", completed.Message))
170170

171171
case vmopcondition.ReasonMigrationPrepareTarget.String():
172-
cb.Message("Migration is awaiting target preparation.")
172+
cb.Message("Migration is in progress: target pod is being scheduled and prepared.")
173173

174174
case vmopcondition.ReasonMigrationTargetReady.String():
175-
cb.Message("Migration is awaiting execution.")
175+
cb.Message("Migration is in progress: source and target are being synchronized.")
176176

177177
case vmopcondition.ReasonWaitingForVirtualMachineToBeReadyToMigrate.String():
178178
// 3.1 Check if virtual disks can be migrated or ready to migrate

images/virtualization-artifact/pkg/controller/vm/internal/migrating_test.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,26 @@ var _ = Describe("MigratingHandler", func() {
180180
Expect(cond.Message).To(Equal("Migration is awaiting start."))
181181
})
182182

183-
It("Should set condition when vmop is in progress with target ready reason", func() {
183+
It("Should set active progress message when vmop is in progress with target preparing reason", func() {
184+
vm := newVM()
185+
kvvmi := newKVVMI(nil)
186+
vmop := newVMOP(v1alpha2.VMOPPhaseInProgress, vmopcondition.ReasonMigrationPrepareTarget.String(), true)
187+
fakeClient, resource, vmState = setupEnvironment(vm, kvvmi, vmop)
188+
189+
reconcile()
190+
191+
newVM := &v1alpha2.VirtualMachine{}
192+
err := fakeClient.Get(ctx, client.ObjectKeyFromObject(vm), newVM)
193+
Expect(err).NotTo(HaveOccurred())
194+
195+
cond, exists := conditions.GetCondition(vmcondition.TypeMigrating, newVM.Status.Conditions)
196+
Expect(exists).To(BeTrue())
197+
Expect(cond.Status).To(Equal(metav1.ConditionFalse))
198+
Expect(cond.Reason).To(Equal(vmcondition.ReasonMigratingPending.String()))
199+
Expect(cond.Message).To(Equal("Migration is in progress: target pod is being scheduled and prepared."))
200+
})
201+
202+
It("Should set active progress message when vmop is in progress with target ready reason", func() {
184203
vm := newVM()
185204
kvvmi := newKVVMI(nil)
186205
vmop := newVMOP(v1alpha2.VMOPPhaseInProgress, vmopcondition.ReasonMigrationTargetReady.String(), true)
@@ -196,7 +215,7 @@ var _ = Describe("MigratingHandler", func() {
196215
Expect(exists).To(BeTrue())
197216
Expect(cond.Status).To(Equal(metav1.ConditionFalse))
198217
Expect(cond.Reason).To(Equal(vmcondition.ReasonMigratingPending.String()))
199-
Expect(cond.Message).To(Equal("Migration is awaiting execution."))
218+
Expect(cond.Message).To(Equal("Migration is in progress: source and target are being synchronized."))
200219
})
201220

202221
It("Should set condition when vmop is in progress with running reason", func() {

images/virtualization-artifact/pkg/controller/vmop/migration/internal/handler/lifecycle_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,15 @@ import (
3131
vmbuilder "github.com/deckhouse/virtualization-controller/pkg/builder/vm"
3232
vmopbuilder "github.com/deckhouse/virtualization-controller/pkg/builder/vmop"
3333
"github.com/deckhouse/virtualization-controller/pkg/common/testutil"
34+
"github.com/deckhouse/virtualization-controller/pkg/controller/conditions"
3435
"github.com/deckhouse/virtualization-controller/pkg/controller/reconciler"
3536
"github.com/deckhouse/virtualization-controller/pkg/controller/vmop/migration/internal/service"
3637
genericservice "github.com/deckhouse/virtualization-controller/pkg/controller/vmop/service"
3738
"github.com/deckhouse/virtualization-controller/pkg/eventrecord"
3839
"github.com/deckhouse/virtualization-controller/pkg/featuregates"
3940
"github.com/deckhouse/virtualization/api/core/v1alpha2"
4041
"github.com/deckhouse/virtualization/api/core/v1alpha2/vmcondition"
42+
"github.com/deckhouse/virtualization/api/core/v1alpha2/vmopcondition"
4143
)
4244

4345
var _ = Describe("LifecycleHandler", func() {
@@ -186,6 +188,41 @@ var _ = Describe("LifecycleHandler", func() {
186188
),
187189
)
188190

191+
It("should keep migration scheduling in progress after migration starts", func() {
192+
vm := newVM(v1alpha2.PreferSafeMigrationPolicy)
193+
vm.Status.Conditions = []metav1.Condition{{
194+
Type: string(vmcondition.TypeMigrating),
195+
Reason: string(vmcondition.ReasonReadyToMigrate),
196+
}}
197+
vmop := newVMOPMigrate()
198+
vmop.Status.Phase = v1alpha2.VMOPPhaseInProgress
199+
200+
mig := &virtv1.VirtualMachineInstanceMigration{}
201+
mig.Namespace = namespace
202+
mig.Name = fmt.Sprintf("vmop-%s", vmop.Name)
203+
mig.Status.Phase = virtv1.MigrationScheduling
204+
mig.OwnerReferences = []metav1.OwnerReference{{
205+
Kind: "VirtualMachineOperation",
206+
Name: vmop.Name,
207+
UID: vmop.UID,
208+
Controller: ptr.To(true),
209+
}}
210+
mig.Spec.VMIName = name
211+
212+
fakeClient, srv = setupEnvironment(vmop, vm, mig)
213+
migrationService := service.NewMigrationService(fakeClient, featuregates.Default())
214+
base := genericservice.NewBaseVMOPService(fakeClient, recorderMock)
215+
216+
h := NewLifecycleHandler(fakeClient, migrationService, base, recorderMock)
217+
_, err := h.Handle(ctx, srv.Changed())
218+
Expect(err).NotTo(HaveOccurred())
219+
220+
Expect(srv.Changed().Status.Phase).To(Equal(v1alpha2.VMOPPhaseInProgress))
221+
completed, found := conditions.GetCondition(vmopcondition.TypeCompleted, srv.Changed().Status.Conditions)
222+
Expect(found).To(BeTrue())
223+
Expect(completed.Reason).To(Equal(vmopcondition.ReasonMigrationPrepareTarget.String()))
224+
})
225+
189226
DescribeTable("TargetMigration", func(vmPolicy v1alpha2.LiveMigrationPolicy, nodeSelector map[string]string, targetMigrationEnabled bool) {
190227
vm := newVM(vmPolicy)
191228
vm.Status.Conditions = []metav1.Condition{

0 commit comments

Comments
 (0)