fix(region): avoid delete ksyun vm error (#24442)

This commit is contained in:
屈轩
2026-03-13 15:23:17 +08:00
committed by GitHub
parent 1673cf3fca
commit c8a6867c10
4 changed files with 34 additions and 17 deletions

View File

@@ -724,3 +724,7 @@ func (base *SBaseGuestDriver) CanStop(guest *models.SGuest) error {
}
return errors.Wrapf(errors.ErrInvalidStatus, "Cannot stop server in status %s", guest.Status)
}
func (base *SBaseGuestDriver) IsNeedCleanDisksAfterUndeploy() bool {
return true
}

View File

@@ -176,3 +176,7 @@ func (self *SKsyunGuestDriver) IsSupportShutdownMode() bool {
func (self *SKsyunGuestDriver) IsNeedRestartForResetLoginInfo() bool {
return false
}
func (self *SKsyunGuestDriver) IsNeedCleanDisksAfterUndeploy() bool {
return false
}

View File

@@ -971,31 +971,39 @@ func (drv *SManagedVirtualizedGuestDriver) RequestUndeployGuestOnHost(ctx contex
cloudprovider.WaitDeleted(ivm, time.Second*10, time.Minute*3)
disks, err := guest.GetDisks()
driver, err := guest.GetDriver()
if err != nil {
return nil, errors.Wrapf(err, "GetDisks")
return nil, err
}
for i := range disks {
disk := disks[i]
storage, _ := disk.GetStorage()
if !utils.IsInStringArray(storage.StorageType, api.STORAGE_LOCAL_TYPES) && disk.DiskType != api.DISK_TYPE_SYS {
idisk, err := disk.GetIDisk(ctx)
if err != nil {
if errors.Cause(err) == cloudprovider.ErrNotFound {
if driver.IsNeedCleanDisksAfterUndeploy() {
disks, err := guest.GetDisks()
if err != nil {
return nil, errors.Wrapf(err, "GetDisks")
}
for i := range disks {
disk := disks[i]
storage, _ := disk.GetStorage()
if !utils.IsInStringArray(storage.StorageType, api.STORAGE_LOCAL_TYPES) && disk.DiskType != api.DISK_TYPE_SYS {
idisk, err := disk.GetIDisk(ctx)
if err != nil {
if errors.Cause(err) == cloudprovider.ErrNotFound {
continue
}
return nil, errors.Wrapf(err, "disk.GetIDisk")
}
if idisk.GetStatus() == api.DISK_DEALLOC {
continue
}
return nil, errors.Wrapf(err, "disk.GetIDisk")
}
if idisk.GetStatus() == api.DISK_DEALLOC {
continue
}
err = idisk.Delete(ctx)
if err != nil {
return nil, errors.Wrapf(err, "idisk.Delete")
err = idisk.Delete(ctx)
if err != nil {
return nil, errors.Wrapf(err, "idisk.Delete")
}
}
}
}
return nil, nil
})
return nil

View File

@@ -128,6 +128,7 @@ type IGuestDriver interface {
RequestDetachDisksFromGuestForDelete(ctx context.Context, guest *SGuest, task taskman.ITask) error
RequestUndeployGuestOnHost(ctx context.Context, guest *SGuest, host *SHost, task taskman.ITask) error
IsNeedCleanDisksAfterUndeploy() bool
OnDeleteGuestFinalCleanup(ctx context.Context, guest *SGuest, userCred mcclient.TokenCredential) error