From cb919f28809e616c08cb74203523acdf7960ab5a Mon Sep 17 00:00:00 2001 From: ioito Date: Thu, 24 Sep 2020 20:13:44 +0800 Subject: [PATCH] fix: avoid compare err with cloudprovider.ErrNotFound direct --- pkg/compute/models/buckets.go | 6 +++--- pkg/compute/models/hosts.go | 6 +----- pkg/compute/models/snapshotpolicycache.go | 2 +- pkg/compute/tasks/natdentry_delete_task.go | 3 ++- pkg/compute/tasks/natsentry_delete_task.go | 3 ++- pkg/compute/tasks/network_delete_task.go | 3 ++- pkg/multicloud/aliyun/disk.go | 3 ++- pkg/multicloud/aliyun/storagecache.go | 3 ++- pkg/multicloud/aws/region.go | 2 +- pkg/multicloud/aws/storagecache.go | 2 +- pkg/multicloud/azure/azure.go | 6 +++--- pkg/multicloud/azure/host.go | 3 ++- pkg/multicloud/azure/storageaccount.go | 4 ++-- pkg/multicloud/huawei/disk.go | 13 +++++++++---- pkg/multicloud/huawei/loadbalancer_backendgroup.go | 2 +- pkg/multicloud/huawei/storagecache.go | 2 +- pkg/multicloud/openstack/keypaire.go | 12 ++++++++---- pkg/multicloud/openstack/storagecache.go | 3 ++- pkg/multicloud/qcloud/instance.go | 2 +- pkg/multicloud/qcloud/loadbalancer_backendgroup.go | 2 +- pkg/multicloud/qcloud/storagecache.go | 2 +- pkg/multicloud/ucloud/snapshot.go | 2 +- pkg/multicloud/ucloud/storagecache.go | 2 +- pkg/multicloud/zstack/host.go | 2 +- 24 files changed, 51 insertions(+), 39 deletions(-) diff --git a/pkg/compute/models/buckets.go b/pkg/compute/models/buckets.go index 33934e3666..0e969b7d45 100644 --- a/pkg/compute/models/buckets.go +++ b/pkg/compute/models/buckets.go @@ -1019,7 +1019,7 @@ func (bucket *SBucket) PerformUpload( if inc.SizeBytes < 0 { inc.SizeBytes = 0 } - } else if err == cloudprovider.ErrNotFound { + } else if errors.Cause(err) == cloudprovider.ErrNotFound { // new upload inc.SizeBytes = sizeBytes inc.ObjectCount = 1 @@ -1246,7 +1246,7 @@ func (bucket *SBucket) GetDetailsAcl( } else { object, err := cloudprovider.GetIObject(iBucket, objKey) if err != nil { - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { return output, httperrors.NewNotFoundError("object %s not found", objKey) } else { return output, httperrors.NewInternalServerError("iBucket.GetIObjects error %s", err) @@ -1455,7 +1455,7 @@ func (bucket *SBucket) processObjectsActionInput(input api.BucketObjectsActionIn } else { object, err := cloudprovider.GetIObject(iBucket, key) if err != nil { - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { return nil, nil, httperrors.NewResourceNotFoundError("object %s not found", key) } else { return nil, nil, httperrors.NewInternalServerError("iBucket.GetIObject error %s", err) diff --git a/pkg/compute/models/hosts.go b/pkg/compute/models/hosts.go index 12fa332b79..756b6846f9 100644 --- a/pkg/compute/models/hosts.go +++ b/pkg/compute/models/hosts.go @@ -2536,11 +2536,7 @@ func (self *SHost) GetIHostAndProvider() (cloudprovider.ICloudHost, cloudprovide } ihost, err := iregion.GetIHostById(self.ExternalId) if err != nil { - if err == cloudprovider.ErrNotFound { - return nil, nil, cloudprovider.ErrNotFound - } - log.Errorf("fail to find ihost by id %s %s", self.ExternalId, err) - return nil, nil, fmt.Errorf("fail to find ihost by id %s", err) + return nil, nil, errors.Wrapf(err, "iregion.GetIHostById(%s)", self.ExternalId) } return ihost, provider, nil } diff --git a/pkg/compute/models/snapshotpolicycache.go b/pkg/compute/models/snapshotpolicycache.go index 62bcf6eff4..3e340d5ab7 100644 --- a/pkg/compute/models/snapshotpolicycache.go +++ b/pkg/compute/models/snapshotpolicycache.go @@ -484,7 +484,7 @@ func (spc *SSnapshotPolicyCache) DeleteCloudSnapshotPolicy() error { return err } cloudSp, err := iregion.GetISnapshotPolicyById(spc.ExternalId) - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { return nil } if err != nil { diff --git a/pkg/compute/tasks/natdentry_delete_task.go b/pkg/compute/tasks/natdentry_delete_task.go index f07a83a7fc..944e5e57fd 100644 --- a/pkg/compute/tasks/natdentry_delete_task.go +++ b/pkg/compute/tasks/natdentry_delete_task.go @@ -21,6 +21,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" + "yunion.io/x/pkg/errors" api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudcommon/db" @@ -64,7 +65,7 @@ func (self *SNatDEntryDeleteTask) OnInit(ctx context.Context, obj db.IStandalone } cloudNatDEntry, err := cloudNatGateway.GetINatDEntryByID(dnatEntry.ExternalId) - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { // already delete } else if err != nil { self.TaskFailed(ctx, dnatEntry, jsonutils.NewString(fmt.Sprintf("Get DNat Entry by ID '%s' failed", dnatEntry.ExternalId))) diff --git a/pkg/compute/tasks/natsentry_delete_task.go b/pkg/compute/tasks/natsentry_delete_task.go index abbda2b53d..8a828b2a81 100644 --- a/pkg/compute/tasks/natsentry_delete_task.go +++ b/pkg/compute/tasks/natsentry_delete_task.go @@ -21,6 +21,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" + "yunion.io/x/pkg/errors" api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudcommon/db" @@ -64,7 +65,7 @@ func (self *SNatSEntryDeleteTask) OnInit(ctx context.Context, obj db.IStandalone return } cloudNatSEntry, err := cloudNatGateway.GetINatSEntryByID(snatEntry.ExternalId) - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { //already delete } else if err != nil { self.TaskFailed(ctx, snatEntry, jsonutils.NewString(fmt.Sprintf("Get SNat Entry by ID '%s' failed: %s", snatEntry.ExternalId, err))) diff --git a/pkg/compute/tasks/network_delete_task.go b/pkg/compute/tasks/network_delete_task.go index acadf6887f..6c9ab214be 100644 --- a/pkg/compute/tasks/network_delete_task.go +++ b/pkg/compute/tasks/network_delete_task.go @@ -19,6 +19,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" + "yunion.io/x/pkg/errors" api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudcommon/db" @@ -57,7 +58,7 @@ func (self *NetworkDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneMod self.taskFailed(ctx, network, jsonutils.NewString(err.Error())) return } - } else if err == cloudprovider.ErrNotFound { + } else if errors.Cause(err) == cloudprovider.ErrNotFound { // already deleted, do nothing } else { self.taskFailed(ctx, network, jsonutils.NewString(err.Error())) diff --git a/pkg/multicloud/aliyun/disk.go b/pkg/multicloud/aliyun/disk.go index 44192f243c..c514c8f443 100644 --- a/pkg/multicloud/aliyun/disk.go +++ b/pkg/multicloud/aliyun/disk.go @@ -21,6 +21,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" + "yunion.io/x/pkg/errors" "yunion.io/x/pkg/utils" api "yunion.io/x/onecloud/pkg/apis/compute" @@ -130,7 +131,7 @@ func (self *SDisk) GetId() string { func (self *SDisk) Delete(ctx context.Context) error { _, err := self.storage.zone.region.getDisk(self.DiskId) if err != nil { - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { // 未找到disk, 说明disk已经被删除了. 避免回收站中disk-delete循环删除失败 return nil } diff --git a/pkg/multicloud/aliyun/storagecache.go b/pkg/multicloud/aliyun/storagecache.go index 6298cd3faa..6a378ed656 100644 --- a/pkg/multicloud/aliyun/storagecache.go +++ b/pkg/multicloud/aliyun/storagecache.go @@ -26,6 +26,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" + "yunion.io/x/pkg/errors" "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/compute/options" @@ -198,7 +199,7 @@ func (self *SStoragecache) uploadImage(ctx context.Context, userCred mcclient.To for { _, err = self.region.GetImageByName(imageName) if err != nil { - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { break } else { return "", err diff --git a/pkg/multicloud/aws/region.go b/pkg/multicloud/aws/region.go index 0ac5c7678f..cac8610fdd 100644 --- a/pkg/multicloud/aws/region.go +++ b/pkg/multicloud/aws/region.go @@ -809,7 +809,7 @@ func (self *SRegion) CreateILoadBalancerCertificate(cert *cloudprovider.SLoadbal return true, nil } - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { return false, nil } else { return false, err diff --git a/pkg/multicloud/aws/storagecache.go b/pkg/multicloud/aws/storagecache.go index 59866d8ee9..5dcd6749cc 100644 --- a/pkg/multicloud/aws/storagecache.go +++ b/pkg/multicloud/aws/storagecache.go @@ -205,7 +205,7 @@ func (self *SStoragecache) uploadImage(ctx context.Context, userCred mcclient.To for { _, err = self.region.GetImageByName(imageName, ImageOwnerSelf) if err != nil { - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { break } else { return "", err diff --git a/pkg/multicloud/azure/azure.go b/pkg/multicloud/azure/azure.go index b11072f1e9..687e434191 100644 --- a/pkg/multicloud/azure/azure.go +++ b/pkg/multicloud/azure/azure.go @@ -583,15 +583,15 @@ func (e *AzureError) Error() string { func (self *SAzureClient) getUniqName(cli *autorest.Client, resourceGroup string, resourceType, name string, body jsonutils.JSONObject) (string, string, error) { url := fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/%s/%s", self.subscriptionId, resourceGroup, resourceType, name) if _, err := jsonRequest(cli, "GET", self.domain, url, self.subscriptionId, "", DefaultResource); err != nil { - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { return url, body.String(), nil } return "", "", err } for i := 0; i < 20; i++ { url = fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/%s/%s-%d", self.subscriptionId, resourceGroup, resourceType, name, i) - if _, err := jsonRequest(cli, "GET", self.domain, url, self.subscriptionId, "", DefaultResource); err == cloudprovider.ErrNotFound { - if err == cloudprovider.ErrNotFound { + if _, err := jsonRequest(cli, "GET", self.domain, url, self.subscriptionId, "", DefaultResource); err != nil { + if errors.Cause(err) == cloudprovider.ErrNotFound { data := body.(*jsonutils.JSONDict) data.Set("name", jsonutils.NewString(fmt.Sprintf("%s-%d", name, i))) return url, body.String(), nil diff --git a/pkg/multicloud/azure/host.go b/pkg/multicloud/azure/host.go index b84a5317b5..e4909ecb54 100644 --- a/pkg/multicloud/azure/host.go +++ b/pkg/multicloud/azure/host.go @@ -21,6 +21,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" + "yunion.io/x/pkg/errors" "yunion.io/x/pkg/util/osprofile" "yunion.io/x/pkg/utils" @@ -92,7 +93,7 @@ func (self *SHost) CreateVM(desc *cloudprovider.SManagedVMCreateConfig) (cloudpr } nic, err := self.searchNetorkInterface(desc.IpAddr, net.GetId(), desc.ExternalSecgroupId) if err != nil { - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { nic, err = self.zone.region.CreateNetworkInterface(desc.ProjectId, fmt.Sprintf("%s-ipconfig", desc.Name), desc.IpAddr, net.GetId(), desc.ExternalSecgroupId) if err != nil { return nil, err diff --git a/pkg/multicloud/azure/storageaccount.go b/pkg/multicloud/azure/storageaccount.go index 10140ed907..891f9a76d3 100644 --- a/pkg/multicloud/azure/storageaccount.go +++ b/pkg/multicloud/azure/storageaccount.go @@ -267,7 +267,7 @@ func (self *SRegion) CreateStorageAccount(storageAccount string) (*SStorageAccou if err == nil { return account, nil } - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { uniqName := self.GetUniqStorageAccountName() stoargeaccount := SStorageAccount{ region: self, @@ -1145,7 +1145,7 @@ func (b *SStorageAccount) AbortMultipartUpload(ctx context.Context, key string, } container, err := b.getOrCreateContainer(containerName, false) if err != nil { - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { return nil } return errors.Wrap(err, "getOrCreateContainer") diff --git a/pkg/multicloud/huawei/disk.go b/pkg/multicloud/huawei/disk.go index abd54a62ec..843fd1374c 100644 --- a/pkg/multicloud/huawei/disk.go +++ b/pkg/multicloud/huawei/disk.go @@ -21,6 +21,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" + "yunion.io/x/pkg/errors" billing_api "yunion.io/x/onecloud/pkg/apis/billing" api "yunion.io/x/onecloud/pkg/apis/compute" @@ -326,10 +327,14 @@ func (self *SDisk) GetAccessPath() string { } func (self *SDisk) Delete(ctx context.Context) error { - if disk, err := self.storage.zone.region.GetDisk(self.GetId()); err == cloudprovider.ErrNotFound { - log.Errorf("Failed to find disk %s when delete", self.GetId()) - return nil - } else if disk.Status != "deleting" { + disk, err := self.storage.zone.region.GetDisk(self.GetId()) + if err != nil { + if errors.Cause(err) == cloudprovider.ErrNotFound { + return nil + } + return err + } + if disk.Status != "deleting" { // 等待硬盘ready cloudprovider.WaitStatus(self, api.DISK_READY, 5*time.Second, 60*time.Second) err := self.storage.zone.region.DeleteDisk(self.GetId()) diff --git a/pkg/multicloud/huawei/loadbalancer_backendgroup.go b/pkg/multicloud/huawei/loadbalancer_backendgroup.go index 4c961d99d0..47f34b5636 100644 --- a/pkg/multicloud/huawei/loadbalancer_backendgroup.go +++ b/pkg/multicloud/huawei/loadbalancer_backendgroup.go @@ -298,7 +298,7 @@ func (self *SElbBackendGroup) AddBackendServer(serverId string, weight int, port func (self *SElbBackendGroup) RemoveBackendServer(backendId string, weight int, port int) error { ibackend, err := self.GetILoadbalancerBackendById(backendId) if err != nil { - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { return nil } diff --git a/pkg/multicloud/huawei/storagecache.go b/pkg/multicloud/huawei/storagecache.go index fd1d32c6a4..ccc1c8b82a 100644 --- a/pkg/multicloud/huawei/storagecache.go +++ b/pkg/multicloud/huawei/storagecache.go @@ -215,7 +215,7 @@ func (self *SStoragecache) uploadImage(ctx context.Context, userCred mcclient.To for { _, err = self.region.GetImageByName(imageName) if err != nil { - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { break } else { return "", err diff --git a/pkg/multicloud/openstack/keypaire.go b/pkg/multicloud/openstack/keypaire.go index 12f75070db..05f0790eeb 100644 --- a/pkg/multicloud/openstack/keypaire.go +++ b/pkg/multicloud/openstack/keypaire.go @@ -21,6 +21,7 @@ import ( "yunion.io/x/pkg/errors" "yunion.io/x/onecloud/pkg/cloudprovider" + "yunion.io/x/onecloud/pkg/util/rand" ) type SKeypair struct { @@ -112,13 +113,16 @@ func (region *SRegion) syncKeypair(namePrefix, publicKey string) (string, error) return keypair.Keypair.Name, nil } } - for i := 0; i < 10; i++ { - name := fmt.Sprintf("%s-%d", namePrefix, i) + randomString := func(prefix string, length int) string { + return fmt.Sprintf("%s-%s", prefix, rand.String(length)) + } + for i := 1; i < 10; i++ { + name := randomString(namePrefix, i) if _, err := region.GetKeypair(name); err != nil { - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { keypair, err := region.CreateKeypair(name, publicKey, "ssh") if err != nil { - return "", err + return "", errors.Wrapf(err, "CreateKeypair") } return keypair.Keypair.Name, nil } diff --git a/pkg/multicloud/openstack/storagecache.go b/pkg/multicloud/openstack/storagecache.go index 84694714e4..f3d8a7f1e4 100644 --- a/pkg/multicloud/openstack/storagecache.go +++ b/pkg/multicloud/openstack/storagecache.go @@ -21,6 +21,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" + "yunion.io/x/pkg/errors" api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudprovider" @@ -132,7 +133,7 @@ func (cache *SStoragecache) uploadImage(ctx context.Context, userCred mcclient.T for { _, err = cache.region.GetImageByName(imageName) if err != nil { - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { break } else { return "", err diff --git a/pkg/multicloud/qcloud/instance.go b/pkg/multicloud/qcloud/instance.go index fefce2ca7c..68d295a858 100644 --- a/pkg/multicloud/qcloud/instance.go +++ b/pkg/multicloud/qcloud/instance.go @@ -621,7 +621,7 @@ func (self *SRegion) StopVM(instanceId string, isForce bool) error { func (self *SRegion) DeleteVM(instanceId string) error { status, err := self.GetInstanceStatus(instanceId) if err != nil { - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { return nil } log.Errorf("Fail to get instance status on DeleteVM: %s", err) diff --git a/pkg/multicloud/qcloud/loadbalancer_backendgroup.go b/pkg/multicloud/qcloud/loadbalancer_backendgroup.go index bb62d5174a..3d9f4c3cb7 100644 --- a/pkg/multicloud/qcloud/loadbalancer_backendgroup.go +++ b/pkg/multicloud/qcloud/loadbalancer_backendgroup.go @@ -231,7 +231,7 @@ func (self *SLBBackendGroup) AddBackendServer(serverId string, weight int, port // https://cloud.tencent.com/document/product/214/31794 func (self *SLBBackendGroup) RemoveBackendServer(serverId string, weight int, port int) error { _, err := self.lb.region.GetInstance(serverId) - if err == cloudprovider.ErrNotFound { + if err != nil && errors.Cause(err) == cloudprovider.ErrNotFound { return nil } diff --git a/pkg/multicloud/qcloud/storagecache.go b/pkg/multicloud/qcloud/storagecache.go index e2c133653e..8a29d909b5 100644 --- a/pkg/multicloud/qcloud/storagecache.go +++ b/pkg/multicloud/qcloud/storagecache.go @@ -208,7 +208,7 @@ func (self *SStoragecache) uploadImage(ctx context.Context, userCred mcclient.To for { _, err = self.region.GetImageByName(imageName) if err != nil { - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { break } else { return "", err diff --git a/pkg/multicloud/ucloud/snapshot.go b/pkg/multicloud/ucloud/snapshot.go index 718e93a490..1359524871 100644 --- a/pkg/multicloud/ucloud/snapshot.go +++ b/pkg/multicloud/ucloud/snapshot.go @@ -127,7 +127,7 @@ func (self *SSnapshot) Delete() error { idisk, err := self.region.GetDisk(self.UDiskID) if err == nil { zoneId = idisk.Zone - } else if err == cloudprovider.ErrNotFound { + } else if errors.Cause(err) == cloudprovider.ErrNotFound { zones, err := self.region.GetIZones() if err != nil { return errors.Wrap(err, "snapshot.Delete GetIZones") diff --git a/pkg/multicloud/ucloud/storagecache.go b/pkg/multicloud/ucloud/storagecache.go index 39a3a01a99..efd0b408d3 100644 --- a/pkg/multicloud/ucloud/storagecache.go +++ b/pkg/multicloud/ucloud/storagecache.go @@ -214,7 +214,7 @@ func (self *SStoragecache) uploadImage(ctx context.Context, userCred mcclient.To for { _, err = self.region.GetImageByName(imageName) if err != nil { - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { break } else { return "", err diff --git a/pkg/multicloud/zstack/host.go b/pkg/multicloud/zstack/host.go index 3c219aa48f..52cfe3a40e 100644 --- a/pkg/multicloud/zstack/host.go +++ b/pkg/multicloud/zstack/host.go @@ -392,7 +392,7 @@ func (region *SRegion) _createVM(desc *cloudprovider.SManagedVMCreateConfig, zon if len(desc.InstanceType) > 0 { offering, err := region.GetInstanceOfferingByType(desc.InstanceType) if err != nil { - if err == cloudprovider.ErrNotFound { + if errors.Cause(err) == cloudprovider.ErrNotFound { offering, err = region.CreateInstanceOffering(desc.InstanceType, desc.Cpu, desc.MemoryMB, "UserVm") if err != nil { return nil, err