mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge pull request #13010 from ioito/hotfix/qx-vm-stop-status
fix(region): 删除vm中间不会出现ready状态,避免前端停止刷新
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user