Merge pull request #13010 from ioito/hotfix/qx-vm-stop-status

fix(region): 删除vm中间不会出现ready状态,避免前端停止刷新
This commit is contained in:
Zexi Li
2021-12-27 12:12:49 +08:00
committed by GitHub
13 changed files with 24 additions and 24 deletions
+1 -1
View File
@@ -361,7 +361,7 @@ func (self *SBaremetalGuestDriver) RequestStopGuestForDelete(ctx context.Context
return nil
}
func (self *SBaremetalGuestDriver) RequestStopOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error {
func (self *SBaremetalGuestDriver) RequestStopOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask, syncStatus bool) error {
body := jsonutils.NewDict()
timeout, err := task.GetParams().Int("timeout")
if err != nil {
+1 -1
View File
@@ -100,7 +100,7 @@ func (self *SContainerDriver) RequestStartOnHost(ctx context.Context, guest *mod
return httperrors.NewUnsupportOperationError("")
}
func (self *SContainerDriver) RequestStopOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error {
func (self *SContainerDriver) RequestStopOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask, syncStatus bool) error {
return containerUseKubectlError
}
+2 -2
View File
@@ -660,7 +660,7 @@ func (self *SESXiGuestDriver) RequestStartOnHost(ctx context.Context, guest *mod
return guest.SetStatus(userCred, api.VM_RUNNING, "StartOnHost")
}
func (self *SESXiGuestDriver) RequestStopOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error {
func (self *SESXiGuestDriver) RequestStopOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask, syncStatus bool) error {
taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) {
ivm, err := guest.GetIVM()
if err != nil {
@@ -709,7 +709,7 @@ func (self *SESXiGuestDriver) RequestSyncstatusOnHost(ctx context.Context, guest
}
ivm = vm
}
err = guest.SyncAllWithCloudVM(ctx, userCred, host, ivm)
err = guest.SyncAllWithCloudVM(ctx, userCred, host, ivm, true)
if err != nil {
return nil, err
}
+1 -1
View File
@@ -213,7 +213,7 @@ func (self *SKVMGuestDriver) GetGuestVncInfo(ctx context.Context, userCred mccli
return result, nil
}
func (self *SKVMGuestDriver) RequestStopOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error {
func (self *SKVMGuestDriver) RequestStopOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask, syncStatus bool) error {
body := jsonutils.NewDict()
params := task.GetParams()
timeout, err := params.Int("timeout")
+4 -4
View File
@@ -345,7 +345,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestStartOnHost(ctx context.Conte
return errors.Wrapf(err, "Wait vm running")
}
// 虚拟机开机,公网ip自动生成
guest.SyncAllWithCloudVM(ctx, userCred, host, ivm)
guest.SyncAllWithCloudVM(ctx, userCred, host, ivm, true)
return task.ScheduleRun(result)
}
return guest.SetStatus(userCred, api.VM_RUNNING, "StartOnHost")
@@ -795,7 +795,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestUndeployGuestOnHost(ctx conte
return nil
}
func (self *SManagedVirtualizedGuestDriver) RequestStopOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error {
func (self *SManagedVirtualizedGuestDriver) RequestStopOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask, syncStatus bool) error {
taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) {
ivm, err := guest.GetIVM()
if err != nil {
@@ -812,7 +812,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestStopOnHost(ctx context.Contex
return nil, errors.Wrapf(err, "wait server stop after 5 miniutes")
}
// 公有云关机,公网ip会释放
guest.SyncAllWithCloudVM(ctx, task.GetUserCred(), host, ivm)
guest.SyncAllWithCloudVM(ctx, task.GetUserCred(), host, ivm, syncStatus)
return nil, nil
})
return nil
@@ -829,7 +829,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestSyncstatusOnHost(ctx context.
return nil, err
}
err = guest.SyncAllWithCloudVM(ctx, userCred, host, ivm)
err = guest.SyncAllWithCloudVM(ctx, userCred, host, ivm, true)
if err != nil {
return nil, err
}
+1 -1
View File
@@ -109,7 +109,7 @@ type IGuestDriver interface {
RequestStartOnHost(ctx context.Context, guest *SGuest, host *SHost, userCred mcclient.TokenCredential, task taskman.ITask) error
RequestStopOnHost(ctx context.Context, guest *SGuest, host *SHost, task taskman.ITask) error
RequestStopOnHost(ctx context.Context, guest *SGuest, host *SHost, task taskman.ITask, syncStatus bool) error
StartDeleteGuestTask(ctx context.Context, userCred mcclient.TokenCredential, guest *SGuest, params *jsonutils.JSONDict, parentTaskId string) error
+5 -5
View File
@@ -2452,7 +2452,7 @@ func (self *SGuest) syncRemoveCloudVM(ctx context.Context, userCred mcclient.Tok
return nil
}
func (guest *SGuest) SyncAllWithCloudVM(ctx context.Context, userCred mcclient.TokenCredential, host *SHost, extVM cloudprovider.ICloudVM) error {
func (guest *SGuest) SyncAllWithCloudVM(ctx context.Context, userCred mcclient.TokenCredential, host *SHost, extVM cloudprovider.ICloudVM, syncStatus bool) error {
if host == nil {
return errors.Error("guest has no host")
}
@@ -2467,7 +2467,7 @@ func (guest *SGuest) SyncAllWithCloudVM(ctx context.Context, userCred mcclient.T
return errors.Wrap(err, "provider.GetProvider")
}
err = guest.syncWithCloudVM(ctx, userCred, driver, host, extVM, provider.GetOwnerId())
err = guest.syncWithCloudVM(ctx, userCred, driver, host, extVM, provider.GetOwnerId(), syncStatus)
if err != nil {
return errors.Wrap(err, "guest.syncWithCloudVM")
}
@@ -2477,7 +2477,7 @@ func (guest *SGuest) SyncAllWithCloudVM(ctx context.Context, userCred mcclient.T
return nil
}
func (self *SGuest) syncWithCloudVM(ctx context.Context, userCred mcclient.TokenCredential, provider cloudprovider.ICloudProvider, host *SHost, extVM cloudprovider.ICloudVM, syncOwnerId mcclient.IIdentityProvider) error {
func (self *SGuest) syncWithCloudVM(ctx context.Context, userCred mcclient.TokenCredential, provider cloudprovider.ICloudProvider, host *SHost, extVM cloudprovider.ICloudVM, syncOwnerId mcclient.IIdentityProvider, syncStatus bool) error {
recycle := false
if provider.GetFactory().IsSupportPrepaidResources() && self.IsPrepaidRecycle() {
@@ -2494,7 +2494,7 @@ func (self *SGuest) syncWithCloudVM(ctx context.Context, userCred mcclient.Token
if extVM.GetName() != extVM.GetHostname() {
self.Hostname = extVM.GetHostname()
}
if !self.IsFailureStatus() {
if !self.IsFailureStatus() && syncStatus {
self.Status = extVM.GetStatus()
}
@@ -4601,7 +4601,7 @@ func (self *SGuest) doExternalSync(ctx context.Context, userCred mcclient.TokenC
if err != nil {
return err
}
return self.syncWithCloudVM(ctx, userCred, iprovider, host, iVM, nil)
return self.syncWithCloudVM(ctx, userCred, iprovider, host, iVM, nil, true)
}
func (manager *SGuestManager) DeleteExpiredPrepaidServers(ctx context.Context, userCred mcclient.TokenCredential, isStart bool) {
+1 -1
View File
@@ -661,7 +661,7 @@ func (host *SHost) RebuildRecycledGuest(ctx context.Context, userCred mcclient.T
return err
}
err = guest.syncWithCloudVM(ctx, userCred, iprovider, &oHost, extVM, nil)
err = guest.syncWithCloudVM(ctx, userCred, iprovider, &oHost, extVM, nil, true)
if err != nil {
log.Errorf("guest.syncWithCloudVM fail %s", err)
return err
+2 -2
View File
@@ -2341,7 +2341,7 @@ func (self *SHost) SyncHostVMs(ctx context.Context, userCred mcclient.TokenCrede
}
for i := 0; i < len(commondb); i += 1 {
err := commondb[i].syncWithCloudVM(ctx, userCred, iprovider, self, commonext[i], syncOwnerId)
err := commondb[i].syncWithCloudVM(ctx, userCred, iprovider, self, commonext[i], syncOwnerId, true)
if err != nil {
syncResult.UpdateError(err)
} else {
@@ -2379,7 +2379,7 @@ func (self *SHost) SyncHostVMs(ctx context.Context, userCred mcclient.TokenCrede
continue
}
host := _host.(*SHost)
err = guest.syncWithCloudVM(ctx, userCred, iprovider, host, added[i], syncOwnerId)
err = guest.syncWithCloudVM(ctx, userCred, iprovider, host, added[i], syncOwnerId, true)
if err != nil {
syncResult.UpdateError(err)
} else {
+2 -2
View File
@@ -46,7 +46,7 @@ func (self *GuestSwitchToBackupTask) OnInit(ctx context.Context, obj db.IStandal
host, _ := guest.GetHost()
self.Params.Set("is_force", jsonutils.JSONTrue)
self.SetStage("OnEnsureMasterGuestStoped", nil)
err := guest.GetDriver().RequestStopOnHost(ctx, guest, host, self)
err := guest.GetDriver().RequestStopOnHost(ctx, guest, host, self, true)
if err != nil {
// In case of master host crash
self.OnEnsureMasterGuestStoped(ctx, guest, nil)
@@ -57,7 +57,7 @@ func (self *GuestSwitchToBackupTask) OnEnsureMasterGuestStoped(ctx context.Conte
backupHost := models.HostManager.FetchHostById(guest.BackupHostId)
self.Params.Set("is_force", jsonutils.JSONTrue)
self.SetStage("OnBackupGuestStoped", nil)
err := guest.GetDriver().RequestStopOnHost(ctx, guest, backupHost, self)
err := guest.GetDriver().RequestStopOnHost(ctx, guest, backupHost, self, true)
if err != nil {
self.OnFail(ctx, guest, jsonutils.NewString(err.Error()))
}
@@ -49,7 +49,7 @@ func (self *GuestDeleteOnHostTask) OnInit(ctx context.Context, obj db.IStandalon
self.SetStage("OnStopGuest", nil)
self.Params.Set("is_force", jsonutils.JSONTrue)
if err := guest.GetDriver().RequestStopOnHost(ctx, guest, host, self); err != nil {
if err := guest.GetDriver().RequestStopOnHost(ctx, guest, host, self, true); err != nil {
log.Errorf("RequestStopGuestForDelete fail %s", err)
self.OnStopGuest(ctx, guest, nil)
}
+2 -2
View File
@@ -53,7 +53,7 @@ func (self *GuestStopTask) stopGuest(ctx context.Context, guest *models.SGuest)
guest.SetStatus(self.GetUserCred(), api.VM_STOPPING, "")
}
self.SetStage("OnGuestStopTaskComplete", nil)
err = guest.GetDriver().RequestStopOnHost(ctx, guest, host, self)
err = guest.GetDriver().RequestStopOnHost(ctx, guest, host, self, !self.IsSubtask())
if err != nil {
self.OnGuestStopTaskCompleteFailed(ctx, guest, jsonutils.NewString(err.Error()))
}
@@ -62,7 +62,7 @@ func (self *GuestStopTask) stopGuest(ctx context.Context, guest *models.SGuest)
func (self *GuestStopTask) OnGuestStopTaskComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) {
db.OpsLog.LogEvent(guest, db.ACT_STOP, guest.GetShortDesc(ctx), self.UserCred)
models.HostManager.ClearSchedDescCache(guest.HostId)
if guest.Status != api.VM_READY { // for kvm
if guest.Status != api.VM_READY && !self.IsSubtask() { // for kvm
guest.SetStatus(self.GetUserCred(), api.VM_READY, "")
}
logclient.AddActionLogWithStartable(self, guest, logclient.ACT_VM_STOP, "success", self.UserCred, true)
+1 -1
View File
@@ -37,7 +37,7 @@ func (self *HAGuestStopTask) OnGuestStopTaskComplete(
) {
host := models.HostManager.FetchHostById(guest.BackupHostId)
self.SetStage("OnSlaveGuestStopTaskComplete", nil)
err := guest.GetDriver().RequestStopOnHost(ctx, guest, host, self)
err := guest.GetDriver().RequestStopOnHost(ctx, guest, host, self, true)
if err != nil {
log.Errorf("RequestStopOnHost fail %s", err)
self.OnGuestStopTaskCompleteFailed(