diff --git a/pkg/controllers/migration/helper.go b/pkg/controllers/migration/helper.go index 86169ff..b703505 100644 --- a/pkg/controllers/migration/helper.go +++ b/pkg/controllers/migration/helper.go @@ -102,6 +102,11 @@ func (h *virtualMachineHandler) reconcileVirtualMachineStatus(vm *migration.Virt func (h *virtualMachineHandler) reconcilePreFlightChecks(vm *migration.VirtualMachineImport) (*migration.VirtualMachineImport, error) { err := h.preFlightChecks(vm) if err != nil { + if err.Error() == errorClusterNotReady { + h.importVM.EnqueueAfter(vm.Namespace, vm.Name, 5*time.Second) + return vm, err + } + logrus.WithFields(logrus.Fields{ "name": vm.Name, "namespace": vm.Namespace, diff --git a/pkg/controllers/migration/virtualmachine.go b/pkg/controllers/migration/virtualmachine.go index 3983a4a..088a267 100644 --- a/pkg/controllers/migration/virtualmachine.go +++ b/pkg/controllers/migration/virtualmachine.go @@ -42,6 +42,7 @@ const ( labelImported = "migration.harvesterhci.io/imported" labelImageDisplayName = "harvesterhci.io/imageDisplayName" expectedAPIVersion = "migration.harvesterhci.io/v1beta1" + errorClusterNotReady = "source cluster not yet ready" ) type VirtualMachineOperations interface { @@ -237,7 +238,12 @@ func (h *virtualMachineHandler) preFlightChecks(vm *migration.VirtualMachineImpo } if ss.ClusterStatus() != migration.ClusterReady { - return fmt.Errorf("migration not yet ready. Current status is '%s'", ss.ClusterStatus()) + logrus.WithFields(logrus.Fields{ + "kind": ss.GetKind(), + "name": vm.Spec.SourceCluster.Name, + "status": ss.ClusterStatus(), + }).Warn("The source cluster is not ready yet") + return fmt.Errorf(errorClusterNotReady) } // verify specified storage class exists. Empty storage class means default storage class