diff --git a/pkg/controller/directvolumemigration/directvolumemigration_controller.go b/pkg/controller/directvolumemigration/directvolumemigration_controller.go index 7499b4704..4a394a3ff 100644 --- a/pkg/controller/directvolumemigration/directvolumemigration_controller.go +++ b/pkg/controller/directvolumemigration/directvolumemigration_controller.go @@ -328,6 +328,9 @@ func (r *ReconcileDirectVolumeMigration) cleanupTargetResourcesInNamespaces(dire if err != nil { return false, err } + if destinationCluster == nil { + return false, nil + } // Cleanup source resources client, err := destinationCluster.GetClient(r) diff --git a/pkg/controller/directvolumemigration/rsync.go b/pkg/controller/directvolumemigration/rsync.go index 59cc96764..a3b250c0b 100644 --- a/pkg/controller/directvolumemigration/rsync.go +++ b/pkg/controller/directvolumemigration/rsync.go @@ -1395,6 +1395,7 @@ func (t *Task) hasAllProgressReportingCompleted() (bool, error) { if err := t.populateVMMappings(ns); err != nil { return false, err } + t.Owner.Status.SkippedVolumes = []string{} for _, vol := range vols { matchString := fmt.Sprintf("%s/%s", ns, vol.Name) if t.PlanResources.MigPlan.LiveMigrationChecked() && @@ -1420,7 +1421,6 @@ func (t *Task) hasAllProgressReportingCompleted() (bool, error) { } } } - return t.Owner.AllReportingCompleted(), nil } diff --git a/pkg/controller/migmigration/task.go b/pkg/controller/migmigration/task.go index 21bad287a..94debf2c4 100644 --- a/pkg/controller/migmigration/task.go +++ b/pkg/controller/migmigration/task.go @@ -125,6 +125,7 @@ const ( HasPreRestoreHooks = 0x4000 // True when postbackup hooks exist HasPostRestoreHooks = 0x8000 // True when postbackup hooks exist StorageConversion = 0x10000 // True when the migration is a storage conversion + LiveVmMigration = 0x20000 // True when the migration is a live vm migration ) // Migration steps @@ -299,8 +300,8 @@ var RollbackItinerary = Itinerary{ {Name: QuiesceDestinationApplications, Step: StepCleanupMigrated, all: DirectVolume | EnableVolume}, {Name: EnsureDestQuiesced, Step: StepCleanupMigrated, all: DirectVolume | EnableVolume}, {Name: SwapPVCReferences, Step: StepCleanupMigrated, all: StorageConversion}, - {Name: CreateDirectVolumeMigrationRollback, Step: StepRollbackLiveMigration, all: DirectVolume | EnableVolume}, - {Name: WaitForDirectVolumeMigrationRollbackToComplete, Step: StepRollbackLiveMigration, all: DirectVolume | EnableVolume}, + {Name: CreateDirectVolumeMigrationRollback, Step: StepRollbackLiveMigration, all: DirectVolume | EnableVolume | LiveVmMigration}, + {Name: WaitForDirectVolumeMigrationRollbackToComplete, Step: StepRollbackLiveMigration, all: DirectVolume | EnableVolume | LiveVmMigration}, {Name: DeleteMigrated, Step: StepCleanupMigrated}, {Name: EnsureMigratedDeleted, Step: StepCleanupMigrated}, {Name: UnQuiesceSrcApplications, Step: StepCleanupUnquiesce}, @@ -1387,6 +1388,9 @@ func (t *Task) allFlags(phase Phase) (bool, error) { if phase.all&IndirectImage != 0 && !t.indirectImageMigration() { return false, nil } + if phase.all&LiveVmMigration != 0 && !t.liveVolumeMigration() { + return false, nil + } if phase.all&EnableImage != 0 && t.PlanResources.MigPlan.IsImageMigrationDisabled() { return false, nil } @@ -1773,6 +1777,10 @@ func (t *Task) directVolumeMigration() bool { return !t.indirectVolumeMigration() && t.hasDirectVolumes() } +func (t *Task) liveVolumeMigration() bool { + return t.PlanResources.MigPlan.Spec.LiveMigrate != nil && *t.PlanResources.MigPlan.Spec.LiveMigrate +} + // Returns true if the migration requires a stage backup func (t *Task) hasStageBackup(hasIS, anyPVs, moveSnapshotPVs bool) bool { return hasIS && t.indirectImageMigration() || anyPVs && t.indirectVolumeMigration() || moveSnapshotPVs