From 632d1118db50485040178a94be106bd6bed89178 Mon Sep 17 00:00:00 2001 From: TangBin Date: Wed, 13 Feb 2019 17:04:06 +0800 Subject: [PATCH] server delete etc fix --- pkg/compute/guestdrivers/managedvirtual.go | 6 ++++++ pkg/util/huawei/instance.go | 19 +++++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/pkg/compute/guestdrivers/managedvirtual.go b/pkg/compute/guestdrivers/managedvirtual.go index 6e45485452..d096e21f4e 100644 --- a/pkg/compute/guestdrivers/managedvirtual.go +++ b/pkg/compute/guestdrivers/managedvirtual.go @@ -147,6 +147,12 @@ func (self *SManagedVirtualizedGuestDriver) RequestUndeployGuestOnHost(ctx conte log.Errorf("host.GetIHost fail %s", err) return nil, err } + + // 创建失败时external id为空。此时直接返回即可。不需要再调用公有云api + if len(guest.ExternalId) == 0 { + return nil, nil + } + ivm, err := ihost.GetIVMById(guest.ExternalId) if err != nil { if err == cloudprovider.ErrNotFound { diff --git a/pkg/util/huawei/instance.go b/pkg/util/huawei/instance.go index 8016abfb2b..c77c40acde 100644 --- a/pkg/util/huawei/instance.go +++ b/pkg/util/huawei/instance.go @@ -189,6 +189,12 @@ func (self *SInstance) Refresh() error { if err != nil { return err } + + if new.Status == InstanceStatusTerminated { + log.Debugf("Instance already terminated.") + return cloudprovider.ErrNotFound + } + return jsonutils.Update(self, new) } @@ -418,6 +424,11 @@ func (self *SInstance) StopVM(ctx context.Context, isForce bool) error { return nil } + if self.Status == InstanceStatusTerminated { + log.Debugf("Instance already terminated.") + return nil + } + err := self.host.zone.region.StopVM(self.GetId(), isForce) if err != nil { return err @@ -426,6 +437,10 @@ func (self *SInstance) StopVM(ctx context.Context, isForce bool) error { } func (self *SInstance) DeleteVM(ctx context.Context) error { + if self.Status == InstanceStatusTerminated { + return nil + } + for { err := self.host.zone.region.DeleteVM(self.GetId()) if err != nil && self.Status != InstanceStatusTerminated { @@ -828,10 +843,6 @@ func (self *SRegion) DeleteVM(instanceId string) error { return err } - if remoteStatus == InstanceStatusTerminated { - return nil - } - if remoteStatus != InstanceStatusStopped { log.Errorf("DeleteVM vm status is %s expect %s", remoteStatus, InstanceStatusStopped) return cloudprovider.ErrInvalidStatus