mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-01 15:07:17 +08:00
fix: 虚拟机漂移后设置新的hostId
This commit is contained in:
@@ -1224,8 +1224,19 @@ func (self *SDisk) syncRemoveCloudDisk(ctx context.Context, userCred mcclient.To
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = iregion.GetIDiskById(self.ExternalId)
|
||||
if err != nil && err != cloudprovider.ErrNotFound {
|
||||
iDisk, err := iregion.GetIDiskById(self.ExternalId)
|
||||
if err == nil {
|
||||
if storageId := iDisk.GetIStorageId(); len(storageId) > 0 {
|
||||
storage, err := db.FetchByExternalId(StorageManager, storageId)
|
||||
if err == nil {
|
||||
_, err = db.Update(self, func() error {
|
||||
self.StorageId = storage.GetId()
|
||||
return nil
|
||||
})
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else if err != cloudprovider.ErrNotFound {
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@@ -2090,8 +2090,20 @@ func (self *SGuest) syncRemoveCloudVM(ctx context.Context, userCred mcclient.Tok
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = iregion.GetIVMById(self.ExternalId)
|
||||
if err != nil && err != cloudprovider.ErrNotFound {
|
||||
iVM, err := iregion.GetIVMById(self.ExternalId)
|
||||
if err == nil { //漂移归位
|
||||
if hostId := iVM.GetIHostId(); len(hostId) > 0 {
|
||||
host, err := db.FetchByExternalId(HostManager, hostId)
|
||||
if err == nil {
|
||||
_, err = db.Update(self, func() error {
|
||||
self.HostId = host.GetId()
|
||||
self.Status = iVM.GetStatus()
|
||||
return nil
|
||||
})
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else if err != cloudprovider.ErrNotFound {
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@@ -87,11 +87,19 @@ func (region *SRegion) Refresh() error {
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIVMById(id string) (cloudprovider.ICloudVM, error) {
|
||||
return self.GetInstance(id)
|
||||
vm, err := self.GetInstance(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return vm, nil
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIDiskById(id string) (cloudprovider.ICloudDisk, error) {
|
||||
return self.GetDisk(id)
|
||||
disk, err := self.GetDisk(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return disk, nil
|
||||
}
|
||||
|
||||
func (region *SRegion) GetIHostById(id string) (cloudprovider.ICloudHost, error) {
|
||||
|
||||
Reference in New Issue
Block a user