From 9a09f2d5cc2f666a4b06cc6b94b78df064ca99cc Mon Sep 17 00:00:00 2001 From: Qu Xuan Date: Thu, 7 Nov 2019 21:23:27 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=99=9A=E6=8B=9F=E6=9C=BA=E6=BC=82?= =?UTF-8?q?=E7=A7=BB=E5=90=8E=E8=AE=BE=E7=BD=AE=E6=96=B0=E7=9A=84hostId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/models/disks.go | 15 +++++++++++++-- pkg/compute/models/guests.go | 16 ++++++++++++++-- pkg/multicloud/zstack/region.go | 12 ++++++++++-- 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/pkg/compute/models/disks.go b/pkg/compute/models/disks.go index b48090fcaa..e6d50a5d5f 100644 --- a/pkg/compute/models/disks.go +++ b/pkg/compute/models/disks.go @@ -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 } diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index 019cdcc8ce..5a55ce6e7b 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -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 } diff --git a/pkg/multicloud/zstack/region.go b/pkg/multicloud/zstack/region.go index fa4a830b92..d7aabe6114 100644 --- a/pkg/multicloud/zstack/region.go +++ b/pkg/multicloud/zstack/region.go @@ -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) {