From c94fb33c32891133d1d3bd907ef8630c0d443939 Mon Sep 17 00:00:00 2001 From: mhf Date: Thu, 13 Oct 2022 14:58:46 +0800 Subject: [PATCH] fix/remotefile guest --- pkg/compute/models/guests.go | 3 +++ pkg/multicloud/remotefile/projects.go | 1 + pkg/multicloud/remotefile/region.go | 16 ++++++++++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index 9c5dcde110..3125a30a69 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -2673,6 +2673,9 @@ func (self *SGuest) syncRemoveCloudVM(ctx context.Context, userCred mcclient.Tok if err != nil { return err } + if len(self.ExternalId) == 0 { + return self.purge(ctx, userCred) + } iVM, err := iregion.GetIVMById(self.ExternalId) if err == nil { //漂移归位 if hostId := iVM.GetIHostId(); len(hostId) > 0 { diff --git a/pkg/multicloud/remotefile/projects.go b/pkg/multicloud/remotefile/projects.go index 7a79fa4670..f0c38922c6 100644 --- a/pkg/multicloud/remotefile/projects.go +++ b/pkg/multicloud/remotefile/projects.go @@ -21,6 +21,7 @@ import ( type SProject struct { multicloud.SProjectBase + multicloud.RemoteFileTags Id string Name string diff --git a/pkg/multicloud/remotefile/region.go b/pkg/multicloud/remotefile/region.go index 8cfa7e72db..9b8a26730c 100644 --- a/pkg/multicloud/remotefile/region.go +++ b/pkg/multicloud/remotefile/region.go @@ -17,6 +17,8 @@ package remotefile import ( "fmt" + "yunion.io/x/pkg/errors" + api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/multicloud" @@ -85,8 +87,18 @@ func (self *SRegion) GetIZoneById(id string) (cloudprovider.ICloudZone, error) { return nil, cloudprovider.ErrNotFound } -func (self *SRegion) GetIVMById(id string) (cloudprovider.ICloudVM, error) { - return nil, cloudprovider.ErrNotImplemented +func (region *SRegion) GetIVMById(id string) (cloudprovider.ICloudVM, error) { + instances, err := region.client.GetInstances() + if err != nil { + return nil, err + } + instance := SInstance{} + for _, v := range instances { + if v.Id == id { + return &instance, nil + } + } + return nil, errors.Wrapf(errors.ErrNotFound, "GetIVMById:%s", id) } func (self *SRegion) GetIDiskById(id string) (cloudprovider.ICloudDisk, error) {