mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-05-06 21:52:54 +08:00
fix(region): avoid delete ksyun vm error (#24442)
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -176,3 +176,7 @@ func (self *SKsyunGuestDriver) IsSupportShutdownMode() bool {
|
||||
func (self *SKsyunGuestDriver) IsNeedRestartForResetLoginInfo() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (self *SKsyunGuestDriver) IsNeedCleanDisksAfterUndeploy() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user