From 3f4094e9dfe1a6027a299f1ffefd47f601ada2bc Mon Sep 17 00:00:00 2001 From: TangBin Date: Fri, 5 Feb 2021 13:35:24 +0800 Subject: [PATCH] warp aws err with errors.Wrap --- pkg/multicloud/aws/aws.go | 23 ++-- pkg/multicloud/aws/dbinstance.go | 9 +- pkg/multicloud/aws/dbinstance_parameter.go | 4 +- pkg/multicloud/aws/dbinstance_snapshot.go | 5 +- pkg/multicloud/aws/disk.go | 25 ++-- pkg/multicloud/aws/eip.go | 15 ++- pkg/multicloud/aws/host.go | 18 +-- pkg/multicloud/aws/image.go | 18 +-- pkg/multicloud/aws/instance.go | 11 +- pkg/multicloud/aws/keypair.go | 4 +- pkg/multicloud/aws/loadbalancer.go | 36 +++--- .../aws/loadbalancerbackendgroup.go | 60 +++++----- pkg/multicloud/aws/loadbalancercert.go | 3 +- pkg/multicloud/aws/loadbalancerlistener.go | 44 +++---- .../aws/loadbalancerlistenerrule.go | 40 +++---- pkg/multicloud/aws/network.go | 6 +- pkg/multicloud/aws/networkinterface.go | 8 +- pkg/multicloud/aws/provider/provider.go | 2 +- pkg/multicloud/aws/region.go | 111 +++++++++--------- pkg/multicloud/aws/securitygroup.go | 7 +- pkg/multicloud/aws/snapshot.go | 9 +- pkg/multicloud/aws/storage.go | 12 +- pkg/multicloud/aws/storagecache.go | 37 +++--- pkg/multicloud/aws/utils.go | 7 +- pkg/multicloud/aws/vpc.go | 13 +- pkg/multicloud/aws/wire.go | 11 +- pkg/multicloud/aws/zone.go | 6 +- 27 files changed, 294 insertions(+), 250 deletions(-) diff --git a/pkg/multicloud/aws/aws.go b/pkg/multicloud/aws/aws.go index 22b50f526c..0676c17d03 100644 --- a/pkg/multicloud/aws/aws.go +++ b/pkg/multicloud/aws/aws.go @@ -163,7 +163,7 @@ func (self *SAwsClient) GetSubAccounts() ([]cloudprovider.SSubAccount, error) { // todo: implement me err := self.fetchRegions() if err != nil { - return nil, err + return nil, errors.Wrap(err, "fetchRegions") } subAccount := cloudprovider.SSubAccount{} subAccount.Name = self.cpcfg.Name @@ -234,7 +234,7 @@ func (client *SAwsClient) getAwsSession(regionId string) (*session.Session, erro CredentialsChainVerboseErrors: sdk.Bool(true), }) if err != nil { - return nil, err + return nil, errors.Wrap(err, "getAwsSession.NewSession") } if client.debug { logLevel := aws.LogLevelType(uint(aws.LogDebugWithRequestErrors) + uint(aws.LogDebugWithHTTPBody) + uint(aws.LogDebugWithSigning)) @@ -387,7 +387,7 @@ func (self *SAwsClient) getIRegionByRegionId(id string) (cloudprovider.ICloudReg return self.iregions[i], nil } } - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "getIRegionByRegionId") } func (self *SAwsClient) GetIRegionById(id string) (cloudprovider.ICloudRegion, error) { @@ -396,7 +396,7 @@ func (self *SAwsClient) GetIRegionById(id string) (cloudprovider.ICloudRegion, e return self.iregions[i], nil } } - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetIRegionById") } func (self *SAwsClient) GetIHostById(id string) (cloudprovider.ICloudHost, error) { @@ -405,10 +405,11 @@ func (self *SAwsClient) GetIHostById(id string) (cloudprovider.ICloudHost, error if err == nil { return ihost, nil } else if errors.Cause(err) != cloudprovider.ErrNotFound { - return nil, err + log.Errorf("GetIHostById %s: %s", id, err) + return nil, errors.Wrap(err, "GetIHostById") } } - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetIHostById") } func (self *SAwsClient) GetIVpcById(id string) (cloudprovider.ICloudVpc, error) { @@ -417,10 +418,11 @@ func (self *SAwsClient) GetIVpcById(id string) (cloudprovider.ICloudVpc, error) if err == nil { return ihost, nil } else if errors.Cause(err) != cloudprovider.ErrNotFound { - return nil, err + log.Errorf("GetIVpcById %s: %s", id, err) + return nil, errors.Wrap(err, "GetIVpcById") } } - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetIVpcById") } func (self *SAwsClient) GetIStorageById(id string) (cloudprovider.ICloudStorage, error) { @@ -429,10 +431,11 @@ func (self *SAwsClient) GetIStorageById(id string) (cloudprovider.ICloudStorage, if err == nil { return ihost, nil } else if errors.Cause(err) != cloudprovider.ErrNotFound { - return nil, err + log.Errorf("GetIStorageById %s: %s", id, err) + return nil, errors.Wrap(err, "GetIStorageById") } } - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetIStorageById") } type SAccountBalance struct { diff --git a/pkg/multicloud/aws/dbinstance.go b/pkg/multicloud/aws/dbinstance.go index 9df7d950c1..7d1f6f7ece 100644 --- a/pkg/multicloud/aws/dbinstance.go +++ b/pkg/multicloud/aws/dbinstance.go @@ -20,6 +20,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" + "yunion.io/x/pkg/errors" billing "yunion.io/x/onecloud/pkg/apis/billing" api "yunion.io/x/onecloud/pkg/apis/compute" @@ -214,7 +215,7 @@ func (rds *SDBInstance) Refresh() error { func (region *SRegion) GetDBInstance(instanceId string) (*SDBInstance, error) { instances, err := region.GetDBInstances(instanceId) if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetDBInstances") } if len(instances) == 1 { @@ -279,7 +280,7 @@ func (rds *SDBInstance) GetConnectionStr() string { func (rds *SDBInstance) GetIDBInstanceParameters() ([]cloudprovider.ICloudDBInstanceParameter, error) { parameters, err := rds.region.GetDBInstanceParameters(rds.DBParameterGroups[0].DBParameterGroupName) if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetDBInstanceParameters") } iparams := []cloudprovider.ICloudDBInstanceParameter{} for i := 0; i < len(parameters); i++ { @@ -308,7 +309,7 @@ func (region *SRegion) GetDBInstances(instanceId string) ([]SDBInstance, error) } err := region.rdsRequest("DescribeDBInstances", map[string]string{}, &instances) if err != nil { - return nil, err + return nil, errors.Wrap(err, "DescribeDBInstances") } return instances.DBInstances, nil } @@ -316,7 +317,7 @@ func (region *SRegion) GetDBInstances(instanceId string) ([]SDBInstance, error) func (region *SRegion) GetIDBInstances() ([]cloudprovider.ICloudDBInstance, error) { instances, err := region.GetDBInstances("") if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetDBInstances") } idbinstances := []cloudprovider.ICloudDBInstance{} for i := 0; i < len(instances); i++ { diff --git a/pkg/multicloud/aws/dbinstance_parameter.go b/pkg/multicloud/aws/dbinstance_parameter.go index 761606c75d..4359545d11 100644 --- a/pkg/multicloud/aws/dbinstance_parameter.go +++ b/pkg/multicloud/aws/dbinstance_parameter.go @@ -14,6 +14,8 @@ package aws +import "yunion.io/x/pkg/errors" + type SDBInstanceParameter struct { instance *SDBInstance @@ -53,7 +55,7 @@ func (region *SRegion) GetDBInstanceParameters(name string) ([]SDBInstanceParame parameters := SDBInstanceParameters{} err := region.rdsRequest("DescribeDBParameters", param, ¶meters) if err != nil { - return nil, err + return nil, errors.Wrap(err, "DescribeDBParameters") } return parameters.Parameters, nil } diff --git a/pkg/multicloud/aws/dbinstance_snapshot.go b/pkg/multicloud/aws/dbinstance_snapshot.go index 37f642531e..e3f212232a 100644 --- a/pkg/multicloud/aws/dbinstance_snapshot.go +++ b/pkg/multicloud/aws/dbinstance_snapshot.go @@ -18,6 +18,7 @@ import ( "time" "yunion.io/x/log" + "yunion.io/x/pkg/errors" api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudprovider" @@ -124,7 +125,7 @@ func (region *SRegion) GetDBInstanceSnapshots(instanceId string) ([]SDBInstanceS err := region.rdsRequest("DescribeDBSnapshots", params, &snapshots) if err != nil { - return nil, err + return nil, errors.Wrap(err, "DescribeDBSnapshots") } return snapshots.Snapshots, nil } @@ -132,7 +133,7 @@ func (region *SRegion) GetDBInstanceSnapshots(instanceId string) ([]SDBInstanceS func (region *SRegion) GetIDBInstanceBackups() ([]cloudprovider.ICloudDBInstanceBackup, error) { snapshots, err := region.GetDBInstanceSnapshots("") if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetDBInstanceSnapshots") } isnapshots := []cloudprovider.ICloudDBInstanceBackup{} for i := 0; i < len(snapshots); i++ { diff --git a/pkg/multicloud/aws/disk.go b/pkg/multicloud/aws/disk.go index 62f835c0c6..aaf4af8482 100644 --- a/pkg/multicloud/aws/disk.go +++ b/pkg/multicloud/aws/disk.go @@ -205,13 +205,14 @@ func (self *SDisk) Delete(ctx context.Context) error { func (self *SDisk) CreateISnapshot(ctx context.Context, name string, desc string) (cloudprovider.ICloudSnapshot, error) { if snapshotId, err := self.storage.zone.region.CreateSnapshot(self.DiskId, name, desc); err != nil { log.Errorf("createSnapshot fail %s", err) - return nil, err + return nil, errors.Wrap(err, "CreateSnapshot") } else if snapshot, err := self.getSnapshot(snapshotId); err != nil { - return nil, err + log.Errorf("getSnapshot %s", snapshotId) + return nil, errors.Wrap(err, "getSnapshot") } else { snapshot.region = self.storage.zone.region if err := cloudprovider.WaitStatus(snapshot, api.SNAPSHOT_READY, 15*time.Second, 3600*time.Second); err != nil { - return nil, err + return nil, errors.Wrap(err, "WaitStatus.snapshot") } return snapshot, nil } @@ -219,7 +220,7 @@ func (self *SDisk) CreateISnapshot(ctx context.Context, name string, desc string func (self *SDisk) GetISnapshot(snapshotId string) (cloudprovider.ICloudSnapshot, error) { if snapshot, err := self.getSnapshot(snapshotId); err != nil { - return nil, err + return nil, errors.Wrap(err, "getSnapshot") } else { snapshot.region = self.storage.zone.region return snapshot, nil @@ -230,8 +231,8 @@ func (self *SDisk) GetISnapshots() ([]cloudprovider.ICloudSnapshot, error) { snapshots := make([]SSnapshot, 0) for { if parts, total, err := self.storage.zone.region.GetSnapshots("", self.DiskId, "", []string{}, 0, 20); err != nil { - log.Errorf("GetDisks fail %s", err) - return nil, err + log.Errorf("GetSnapshots fail %s", err) + return nil, errors.Wrap(err, "GetSnapshots") } else { snapshots = append(snapshots, parts...) if len(snapshots) >= total { @@ -266,9 +267,9 @@ func (self *SDisk) getSnapshot(snapshotId string) (*SSnapshot, error) { } if snapshots, total, err := self.storage.zone.region.GetSnapshots("", "", "", []string{snapshotId}, 0, 1); err != nil { - return nil, err + return nil, errors.Wrap(err, "GetSnapshots") } else if total != 1 { - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetSnapshots") } else { return &snapshots[0], nil } @@ -371,18 +372,18 @@ func (self *SRegion) GetDisks(instanceId string, zoneId string, storageType stri func (self *SRegion) GetDisk(diskId string) (*SDisk, error) { if len(diskId) == 0 { // return nil, fmt.Errorf("GetDisk diskId should not be empty.") - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetDisk") } disks, total, err := self.GetDisks("", "", "", []string{diskId}, 0, 1) if err != nil { if strings.Contains(err.Error(), "InvalidVolume.NotFound") { - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetDisks") } else { - return nil, err + return nil, errors.Wrap(err, "GetDisks") } } if total != 1 { - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetDisk") } return &disks[0], nil } diff --git a/pkg/multicloud/aws/eip.go b/pkg/multicloud/aws/eip.go index d14584aa34..f50745f447 100644 --- a/pkg/multicloud/aws/eip.go +++ b/pkg/multicloud/aws/eip.go @@ -22,6 +22,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" + "yunion.io/x/pkg/errors" "yunion.io/x/onecloud/pkg/apis/billing" api "yunion.io/x/onecloud/pkg/apis/compute" @@ -216,10 +217,11 @@ func (self *SRegion) GetEip(eipId string) (*SEipAddress, error) { eips, total, err := self.GetEips(eipId, "", 0, 0) if err != nil { - return nil, err + log.Errorf("GetEips %s: %s", eipId, err) + return nil, errors.Wrap(err, "GetEips") } if total != 1 { - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetEips") } return &eips[0], nil } @@ -227,11 +229,12 @@ func (self *SRegion) GetEip(eipId string) (*SEipAddress, error) { func (self *SRegion) GetEipByIpAddress(eipAddress string) (*SEipAddress, error) { eips, total, err := self.GetEips("", eipAddress, 0, 0) if err != nil { - return nil, err + log.Errorf("GetEips %s: %s", eipAddress, err) + return nil, errors.Wrap(err, "GetEips") } if total != 1 { - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetEips") } return &eips[0], nil } @@ -242,12 +245,12 @@ func (self *SRegion) AllocateEIP(domainType string) (*SEipAddress, error) { eip, err := self.ec2Client.AllocateAddress(params) if err != nil { log.Errorf("AllocateEipAddress fail %s", err) - return nil, err + return nil, errors.Wrap(err, "AllocateAddress") } err = self.fetchInfrastructure() if err != nil { - return nil, err + return nil, errors.Wrap(err, "fetchInfrastructure") } return self.GetEip(*eip.AllocationId) } diff --git a/pkg/multicloud/aws/host.go b/pkg/multicloud/aws/host.go index 19e1596abb..57ba8cc8df 100644 --- a/pkg/multicloud/aws/host.go +++ b/pkg/multicloud/aws/host.go @@ -17,6 +17,8 @@ package aws import ( "fmt" + "github.com/pkg/errors" + "yunion.io/x/jsonutils" "yunion.io/x/log" @@ -58,7 +60,7 @@ func (self *SHost) GetIVMs() ([]cloudprovider.ICloudVM, error) { vms := make([]SInstance, 0) vms, _, err := self.zone.region.GetInstances(self.zone.ZoneId, nil, len(vms), 50) if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetInstances") } ivms := make([]cloudprovider.ICloudVM, len(vms)) @@ -72,15 +74,15 @@ func (self *SHost) GetIVMs() ([]cloudprovider.ICloudVM, error) { func (self *SHost) GetIVMById(gid string) (cloudprovider.ICloudVM, error) { if len(gid) == 0 { log.Errorf("GetIVMById guest id is empty") - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetIVMById") } ivms, _, err := self.zone.region.GetInstances(self.zone.ZoneId, []string{gid}, 0, 1) if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetInstances") } if len(ivms) == 0 { - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetInstances") } if len(ivms) > 1 { return nil, cloudprovider.ErrDuplicateId @@ -162,7 +164,8 @@ func (self *SHost) GetHostType() string { func (self *SHost) GetInstanceById(instanceId string) (*SInstance, error) { inst, err := self.zone.region.GetInstance(instanceId) if err != nil { - return nil, err + log.Errorf("GetInstance %s: %s", instanceId, err) + return nil, errors.Wrap(err, "GetInstance") } inst.host = self return inst, nil @@ -173,12 +176,13 @@ func (self *SHost) CreateVM(desc *cloudprovider.SManagedVMCreateConfig) (cloudpr desc.ExternalNetworkId, desc.IpAddr, desc.Description, desc.Password, desc.DataDisks, desc.PublicKey, desc.ExternalSecgroupId, desc.UserData, desc.Tags) if err != nil { - return nil, err + return nil, errors.Wrap(err, "_createVM") } vm, err := self.GetInstanceById(vmId) if err != nil { - return nil, err + log.Errorf("GetInstanceById %s: %s", vmId, err) + return nil, errors.Wrap(err, "GetInstanceById") } return vm, err diff --git a/pkg/multicloud/aws/image.go b/pkg/multicloud/aws/image.go index 019bf21683..6605cce79f 100644 --- a/pkg/multicloud/aws/image.go +++ b/pkg/multicloud/aws/image.go @@ -306,7 +306,7 @@ func (self *SRegion) ImportImage(name string, osArch string, osType string, osDi params.SetLicenseType("BYOL") // todo: AWS? ret, err := self.ec2Client.ImportImage(params) if err != nil { - return nil, err + return nil, errors.Wrap(err, "ImportImage") } log.Debugf("ImportImage task: %s", ret.String()) return &ImageImportTask{ImageId: StrVal(ret.ImageId), RegionId: self.RegionId, TaskId: *ret.ImportTaskId, Status: StrVal(ret.Status), region: self}, nil @@ -330,7 +330,7 @@ func (self *SRegion) ExportImage(instanceId string, imageId string) (*ImageExpor params.SetExportToS3Task(spec) ret, err := self.ec2Client.CreateInstanceExportTask(params) if err != nil { - return nil, err + return nil, errors.Wrap(err, "CreateInstanceExportTask") } return &ImageExportTask{ImageId: imageId, RegionId: self.RegionId, TaskId: *ret.ExportTask.ExportTaskId}, nil @@ -343,10 +343,10 @@ func (self *SRegion) GetImage(imageId string) (*SImage, error) { images, err := self.getImages("", ImageOwnerAll, []string{imageId}, "", "", nil, "") if err != nil { - return nil, err + return nil, errors.Wrap(err, "getImages") } if len(images) == 0 { - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "getImages") } return &images[0], nil } @@ -358,10 +358,10 @@ func (self *SRegion) GetImageByName(name string, owners []TImageOwnerType) (*SIm images, err := self.getImages("", owners, nil, name, "hvm", nil, "") if err != nil { - return nil, err + return nil, errors.Wrap(err, "getImages") } if len(images) == 0 { - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "getImages") } log.Debugf("%d image found match name %s", len(images), name) @@ -401,7 +401,7 @@ func getLatestImage(images []SImage) SImage { func (self *SRegion) GetImages(status ImageStatusType, owners []TImageOwnerType, imageId []string, name string, virtualizationType string, ownerIds []string, volumeType string, latest bool) ([]SImage, error) { images, err := self.getImages(status, owners, imageId, name, virtualizationType, ownerIds, volumeType) if err != nil { - return nil, err + return nil, errors.Wrap(err, "getImages") } if !latest { return images, err @@ -461,7 +461,7 @@ func (self *SRegion) getImages(status ImageStatusType, owners []TImageOwnerType, ret, err := self.ec2Client.DescribeImages(params) err = parseNotFoundError(err) if err != nil { - return nil, err + return nil, errors.Wrap(err, "parseNotFoundError") } images := []SImage{} @@ -469,7 +469,7 @@ func (self *SRegion) getImages(status ImageStatusType, owners []TImageOwnerType, image := ret.Images[i] if err := FillZero(image); err != nil { - return nil, err + return nil, errors.Wrap(err, "FillZero.image") } tagspec := TagSpec{} diff --git a/pkg/multicloud/aws/instance.go b/pkg/multicloud/aws/instance.go index 59a8ef7148..75390aeddd 100644 --- a/pkg/multicloud/aws/instance.go +++ b/pkg/multicloud/aws/instance.go @@ -297,14 +297,14 @@ func (self *SInstance) GetIDisks() ([]cloudprovider.ICloudDisk, error) { disks, _, err := self.host.zone.region.GetDisks(self.InstanceId, "", "", nil, 0, 0) if err != nil { log.Errorf("fetchDisks fail %s", err) - return nil, err + return nil, errors.Wrap(err, "GetDisks") } idisks := make([]cloudprovider.ICloudDisk, len(disks)) for i := 0; i < len(disks); i += 1 { store, err := self.host.zone.getStorageByCategory(disks[i].Category) if err != nil { - return nil, err + return nil, errors.Wrap(err, "getStorageByCategory") } disks[i].storage = store idisks[i] = &disks[i] @@ -598,7 +598,7 @@ func (self *SRegion) GetInstances(zoneId string, ids []string, offset int, limit res, err := self.ec2Client.DescribeInstances(params) if err != nil { if strings.Contains(err.Error(), "InvalidInstanceID.NotFound") { - return nil, 0, ErrorNotFound() + return nil, 0, errors.Wrap(cloudprovider.ErrNotFound, "DescribeInstances") } else { return nil, 0, err } @@ -732,10 +732,11 @@ func (self *SRegion) GetInstance(instanceId string) (*SInstance, error) { instances, _, err := self.GetInstances("", []string{instanceId}, 0, 1) if err != nil { - return nil, err + log.Errorf("GetInstances %s: %s", instanceId, err) + return nil, errors.Wrap(err, "GetInstances") } if len(instances) == 0 { - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetInstances") } return &instances[0], nil } diff --git a/pkg/multicloud/aws/keypair.go b/pkg/multicloud/aws/keypair.go index fce513713e..60049056fc 100644 --- a/pkg/multicloud/aws/keypair.go +++ b/pkg/multicloud/aws/keypair.go @@ -27,6 +27,8 @@ import ( "github.com/aws/aws-sdk-go/service/ec2" "golang.org/x/crypto/ssh" + "yunion.io/x/pkg/errors" + "yunion.io/x/onecloud/pkg/cloudprovider" ) @@ -113,7 +115,7 @@ func (self *SRegion) ImportKeypair(name string, pubKey string) (*SKeypair, error params.SetPublicKeyMaterial([]byte(pubKey)) ret, err := self.ec2Client.ImportKeyPair(params) if err != nil { - return nil, err + return nil, errors.Wrap(err, "ImportKeyPair") } else { return &SKeypair{StrVal(ret.KeyFingerprint), StrVal(ret.KeyName)}, nil } diff --git a/pkg/multicloud/aws/loadbalancer.go b/pkg/multicloud/aws/loadbalancer.go index 37f303b933..779f6d3ad1 100644 --- a/pkg/multicloud/aws/loadbalancer.go +++ b/pkg/multicloud/aws/loadbalancer.go @@ -249,7 +249,7 @@ func (self *SElb) Stop() error { func (self *SElb) GetILoadBalancerListeners() ([]cloudprovider.ICloudLoadbalancerListener, error) { listeners, err := self.region.GetElbListeners(self.GetId()) if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbListeners") } ret := make([]cloudprovider.ICloudLoadbalancerListener, len(listeners)) @@ -264,7 +264,7 @@ func (self *SElb) GetILoadBalancerListeners() ([]cloudprovider.ICloudLoadbalance func (self *SElb) GetILoadBalancerBackendGroups() ([]cloudprovider.ICloudLoadbalancerBackendGroup, error) { backendgroups, err := self.region.GetElbBackendgroups(self.GetId(), nil) if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbBackendgroups") } ibackendgroups := make([]cloudprovider.ICloudLoadbalancerBackendGroup, len(backendgroups)) @@ -279,7 +279,7 @@ func (self *SElb) GetILoadBalancerBackendGroups() ([]cloudprovider.ICloudLoadbal func (self *SElb) CreateILoadBalancerBackendGroup(group *cloudprovider.SLoadbalancerBackendGroup) (cloudprovider.ICloudLoadbalancerBackendGroup, error) { backendgroup, err := self.region.CreateElbBackendgroup(group) if err != nil { - return nil, err + return nil, errors.Wrap(err, "CreateElbBackendgroup") } backendgroup.lb = self @@ -293,7 +293,7 @@ func (self *SElb) GetILoadBalancerBackendGroupById(groupId string) (cloudprovide func (self *SElb) CreateILoadBalancerListener(ctx context.Context, listener *cloudprovider.SLoadbalancerListener) (cloudprovider.ICloudLoadbalancerListener, error) { ret, err := self.region.CreateElbListener(listener) if err != nil { - return nil, err + return nil, errors.Wrap(err, "CreateElbListener") } ret.lb = self @@ -302,7 +302,7 @@ func (self *SElb) CreateILoadBalancerListener(ctx context.Context, listener *clo func (self *SElb) GetILoadBalancerListenerById(listenerId string) (cloudprovider.ICloudLoadbalancerListener, error) { if listenerId == "" { - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetILoadBalancerListenerById") } return self.region.GetElbListener(listenerId) @@ -315,14 +315,14 @@ func (self *SElb) GetIEIP() (cloudprovider.ICloudEIP, error) { func (self *SRegion) DeleteElb(elbId string) error { client, err := self.GetElbV2Client() if err != nil { - return err + return errors.Wrap(err, "GetElbV2Client") } params := &elbv2.DeleteLoadBalancerInput{} params.SetLoadBalancerArn(elbId) _, err = client.DeleteLoadBalancer(params) if err != nil { - return err + return errors.Wrap(err, "DeleteLoadBalancer") } return nil @@ -331,7 +331,7 @@ func (self *SRegion) DeleteElb(elbId string) error { func (self *SRegion) GetElbBackendgroups(elbId string, backendgroupIds []string) ([]SElbBackendGroup, error) { client, err := self.GetElbV2Client() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbV2Client") } params := &elbv2.DescribeTargetGroupsInput{} @@ -350,13 +350,13 @@ func (self *SRegion) GetElbBackendgroups(elbId string, backendgroupIds []string) ret, err := client.DescribeTargetGroups(params) if err != nil { - return nil, err + return nil, errors.Wrap(err, "DescribeTargetGroups") } backendgroups := []SElbBackendGroup{} err = unmarshalAwsOutput(ret, "TargetGroups", &backendgroups) if err != nil { - return nil, err + return nil, errors.Wrap(err, "unmarshalAwsOutput.TargetGroups") } for i := range backendgroups { @@ -369,7 +369,7 @@ func (self *SRegion) GetElbBackendgroups(elbId string, backendgroupIds []string) func (self *SRegion) GetElbBackendgroup(backendgroupId string) (*SElbBackendGroup, error) { client, err := self.GetElbV2Client() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbV2Client") } params := &elbv2.DescribeTargetGroupsInput{} @@ -380,13 +380,13 @@ func (self *SRegion) GetElbBackendgroup(backendgroupId string) (*SElbBackendGrou if strings.Contains(err.Error(), "TargetGroupNotFound") { return nil, cloudprovider.ErrNotFound } - return nil, err + return nil, errors.Wrap(err, "DescribeTargetGroups") } backendgroups := []SElbBackendGroup{} err = unmarshalAwsOutput(ret, "TargetGroups", &backendgroups) if err != nil { - return nil, err + return nil, errors.Wrap(err, "unmarshalAwsOutput.TargetGroups") } if len(backendgroups) == 1 { @@ -394,7 +394,7 @@ func (self *SRegion) GetElbBackendgroup(backendgroupId string) (*SElbBackendGrou return &backendgroups[0], nil } - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetElbBackendgroup") } func ToAwsHealthCode(s string) string { @@ -482,18 +482,18 @@ func (self *SRegion) CreateElbBackendgroup(group *cloudprovider.SLoadbalancerBac client, err := self.GetElbV2Client() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbV2Client") } ret, err := client.CreateTargetGroup(params) if err != nil { - return nil, err + return nil, errors.Wrap(err, "CreateTargetGroup") } backendgroups := []SElbBackendGroup{} err = unmarshalAwsOutput(ret, "TargetGroups", &backendgroups) if err != nil { - return nil, err + return nil, errors.Wrap(err, "unmarshalAwsOutput.TargetGroups") } if len(backendgroups) == 1 { @@ -519,7 +519,7 @@ func (self *SElb) SetTags(tags map[string]string, replace bool) error { func (self *SRegion) FetchElbTags(arn string) (map[string]string, error) { client, err := self.GetElbV2Client() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbV2Client") } params := elbv2.DescribeTagsInput{} params.SetResourceArns([]*string{&arn}) diff --git a/pkg/multicloud/aws/loadbalancerbackendgroup.go b/pkg/multicloud/aws/loadbalancerbackendgroup.go index a8e8345aac..caff89b927 100644 --- a/pkg/multicloud/aws/loadbalancerbackendgroup.go +++ b/pkg/multicloud/aws/loadbalancerbackendgroup.go @@ -21,8 +21,10 @@ import ( "strings" "github.com/aws/aws-sdk-go/service/elbv2" + "github.com/pkg/errors" "yunion.io/x/jsonutils" + "yunion.io/x/log" "yunion.io/x/pkg/utils" api "yunion.io/x/onecloud/pkg/apis/compute" @@ -135,7 +137,7 @@ func (self *SElbBackendGroup) GetType() string { func (self *SElbBackendGroup) GetILoadbalancerBackends() ([]cloudprovider.ICloudLoadbalancerBackend, error) { backends, err := self.region.GetELbBackends(self.GetId()) if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetELbBackends") } ibackends := make([]cloudprovider.ICloudLoadbalancerBackend, len(backends)) @@ -151,7 +153,7 @@ func (self *SElbBackendGroup) GetILoadbalancerBackends() ([]cloudprovider.ICloud func (self *SElbBackendGroup) GetILoadbalancerBackendById(backendId string) (cloudprovider.ICloudLoadbalancerBackend, error) { backend, err := self.region.GetELbBackend(backendId) if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetELbBackend") } backend.group = self @@ -195,7 +197,7 @@ func (self *SElbBackendGroup) GetHealthCheck() (*cloudprovider.SLoadbalancerHeal func (self *SElbBackendGroup) GetStickySession() (*cloudprovider.SLoadbalancerStickySession, error) { attrs, err := self.region.GetElbBackendgroupAttributesById(self.GetId()) if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbBackendgroupAttributesById") } cookieTime := 0 @@ -216,7 +218,7 @@ func (self *SElbBackendGroup) GetStickySession() (*cloudprovider.SLoadbalancerSt func (self *SElbBackendGroup) AddBackendServer(serverId string, weight int, port int) (cloudprovider.ICloudLoadbalancerBackend, error) { backend, err := self.region.AddElbBackend(self.GetId(), serverId, weight, port) if err != nil { - return nil, err + return nil, errors.Wrap(err, "AddElbBackend") } backend.region = self.region @@ -239,25 +241,25 @@ func (self *SElbBackendGroup) Sync(ctx context.Context, group *cloudprovider.SLo func (self *SRegion) GetELbBackends(backendgroupId string) ([]SElbBackend, error) { client, err := self.GetElbV2Client() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbV2Client") } group, err := self.GetElbBackendgroup(backendgroupId) if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbBackendgroup") } params := &elbv2.DescribeTargetHealthInput{} params.SetTargetGroupArn(backendgroupId) output, err := client.DescribeTargetHealth(params) if err != nil { - return nil, err + return nil, errors.Wrap(err, "DescribeTargetHealth") } backends := []SElbBackend{} err = unmarshalAwsOutput(output, "TargetHealthDescriptions", &backends) if err != nil { - return nil, err + return nil, errors.Wrap(err, "unmarshalAwsOutput.TargetHealthDescriptions") } ret := []SElbBackend{} @@ -275,12 +277,13 @@ func (self *SRegion) GetELbBackends(backendgroupId string) ([]SElbBackend, error func (self *SRegion) GetELbBackend(backendId string) (*SElbBackend, error) { client, err := self.GetElbV2Client() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbV2Client") } groupId, instanceId, port, err := parseElbBackendId(backendId) if err != nil { - return nil, err + log.Errorf("parseElbBackendId %s: %s", backendId, err) + return nil, errors.Wrap(err, "parseElbBackendId") } params := &elbv2.DescribeTargetHealthInput{} @@ -291,13 +294,13 @@ func (self *SRegion) GetELbBackend(backendId string) (*SElbBackend, error) { params.SetTargetGroupArn(groupId) ret, err := client.DescribeTargetHealth(params) if err != nil { - return nil, err + return nil, errors.Wrap(err, "DescribeTargetHealth") } backends := []SElbBackend{} err = unmarshalAwsOutput(ret, "TargetHealthDescriptions", &backends) if err != nil { - return nil, err + return nil, errors.Wrap(err, "unmarshalAwsOutput.TargetHealthDescriptions") } if len(backends) == 1 { @@ -305,7 +308,7 @@ func (self *SRegion) GetELbBackend(backendId string) (*SElbBackend, error) { return &backends[0], nil } - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetELbBackend") } func parseElbBackendId(id string) (string, string, int, error) { @@ -329,7 +332,7 @@ func genElbBackendId(backendgroupId string, serverId string, port int) string { func (self *SRegion) AddElbBackend(backendgroupId, serverId string, weight int, port int) (*SElbBackend, error) { client, err := self.GetElbV2Client() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbV2Client") } params := &elbv2.RegisterTargetsInput{} @@ -340,7 +343,7 @@ func (self *SRegion) AddElbBackend(backendgroupId, serverId string, weight int, params.SetTargets([]*elbv2.TargetDescription{desc}) _, err = client.RegisterTargets(params) if err != nil { - return nil, err + return nil, errors.Wrap(err, "RegisterTargets") } return self.GetELbBackend(genElbBackendId(backendgroupId, serverId, port)) @@ -349,7 +352,7 @@ func (self *SRegion) AddElbBackend(backendgroupId, serverId string, weight int, func (self *SRegion) RemoveElbBackend(backendgroupId, serverId string, weight int, port int) error { client, err := self.GetElbV2Client() if err != nil { - return err + return errors.Wrap(err, "GetElbV2Client") } params := &elbv2.DeregisterTargetsInput{} @@ -360,7 +363,7 @@ func (self *SRegion) RemoveElbBackend(backendgroupId, serverId string, weight in params.SetTargets([]*elbv2.TargetDescription{desc}) _, err = client.DeregisterTargets(params) if err != nil { - return err + return errors.Wrap(err, "DeregisterTargets") } return nil @@ -369,14 +372,14 @@ func (self *SRegion) RemoveElbBackend(backendgroupId, serverId string, weight in func (self *SRegion) DeleteElbBackendGroup(backendgroupId string) error { client, err := self.GetElbV2Client() if err != nil { - return err + return errors.Wrap(err, "GetElbV2Client") } params := &elbv2.DeleteTargetGroupInput{} params.SetTargetGroupArn(backendgroupId) _, err = client.DeleteTargetGroup(params) if err != nil { - return err + return errors.Wrap(err, "DeleteTargetGroup") } return nil @@ -385,12 +388,13 @@ func (self *SRegion) DeleteElbBackendGroup(backendgroupId string) error { func (self *SRegion) SyncELbBackendGroup(backendgroupId string, group *cloudprovider.SLoadbalancerBackendGroup) error { err := self.modifyELbBackendGroup(backendgroupId, group.HealthCheck) if err != nil { - return err + return errors.Wrap(err, "modifyELbBackendGroup") } err = self.RemoveElbBackends(backendgroupId) if err != nil { - return err + log.Errorf("RemoveElbBackends %s: %s", backendgroupId, err) + return errors.Wrap(err, "RemoveElbBackends") } return self.AddElbBackends(backendgroupId, group.Backends) @@ -425,7 +429,7 @@ func (self *SRegion) modifyELbBackendGroup(backendgroupId string, healthCheck *c _, err = client.ModifyTargetGroup(params) if err != nil { - return err + return errors.Wrap(err, "ModifyTargetGroup") } return nil @@ -439,7 +443,7 @@ func (self *SRegion) RemoveElbBackends(backendgroupId string) error { backends, err := self.GetELbBackends(backendgroupId) if err != nil { - return err + return errors.Wrap(err, "GetELbBackends") } if len(backends) == 0 { @@ -459,7 +463,7 @@ func (self *SRegion) RemoveElbBackends(backendgroupId string) error { params.SetTargets(targets) _, err = client.DeregisterTargets(params) if err != nil { - return err + return errors.Wrap(err, "DeregisterTargets") } return nil @@ -488,7 +492,7 @@ func (self *SRegion) AddElbBackends(backendgroupId string, backends []cloudprovi params.SetTargets(targets) _, err = client.RegisterTargets(params) if err != nil { - return err + return errors.Wrap(err, "RegisterTargets") } return nil @@ -497,7 +501,7 @@ func (self *SRegion) AddElbBackends(backendgroupId string, backends []cloudprovi func (self *SRegion) GetElbBackendgroupAttributesById(backendgroupId string) (map[string]string, error) { client, err := self.GetElbV2Client() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbV2Client") } params := &elbv2.DescribeTargetGroupAttributesInput{} @@ -505,13 +509,13 @@ func (self *SRegion) GetElbBackendgroupAttributesById(backendgroupId string) (ma output, err := client.DescribeTargetGroupAttributes(params) if err != nil { - return nil, err + return nil, errors.Wrap(err, "DescribeTargetGroupAttributes") } attrs := []map[string]string{} err = unmarshalAwsOutput(output, "Attributes", &attrs) if err != nil { - return nil, err + return nil, errors.Wrap(err, "unmarshalAwsOutput.Attributes") } ret := map[string]string{} diff --git a/pkg/multicloud/aws/loadbalancercert.go b/pkg/multicloud/aws/loadbalancercert.go index 8e16d347d8..c367ab2643 100644 --- a/pkg/multicloud/aws/loadbalancercert.go +++ b/pkg/multicloud/aws/loadbalancercert.go @@ -26,6 +26,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" @@ -161,7 +162,7 @@ func (self *SElbCertificate) ParsePublicKey() (*x509.Certificate, error) { block, _ := pem.Decode([]byte(publicKey)) cert, err := x509.ParseCertificate(block.Bytes) if err != nil { - return nil, err + return nil, errors.Wrap(err, "ParseCertificate") } self.cert = cert diff --git a/pkg/multicloud/aws/loadbalancerlistener.go b/pkg/multicloud/aws/loadbalancerlistener.go index e43c6dfc36..2b0fa5eef5 100644 --- a/pkg/multicloud/aws/loadbalancerlistener.go +++ b/pkg/multicloud/aws/loadbalancerlistener.go @@ -165,7 +165,7 @@ func (self *SElbListener) getBackendGroup() (*SElbBackendGroup, error) { lbbg, err := self.region.GetElbBackendgroup(self.DefaultActions[0].TargetGroupArn) if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbBackendgroup") } self.group = lbbg @@ -323,16 +323,16 @@ func (self *SElbListener) GetHealthCheckCode() string { func (self *SElbListener) CreateILoadBalancerListenerRule(rule *cloudprovider.SLoadbalancerListenerRule) (cloudprovider.ICloudLoadbalancerListenerRule, error) { rules, err := self.GetILoadbalancerListenerRules() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetILoadbalancerListenerRules") } else { if err := self.region.UpdateRulesPriority(rules); err != nil { - return nil, err + return nil, errors.Wrap(err, "UpdateRulesPriority") } } ret, err := self.region.CreateElbListenerRule(self.GetId(), rule) if err != nil { - return nil, err + return nil, errors.Wrap(err, "CreateElbListenerRule") } ret.listener = self @@ -343,7 +343,7 @@ func (self *SElbListener) CreateILoadBalancerListenerRule(rule *cloudprovider.SL func (self *SElbListener) GetILoadBalancerListenerRuleById(ruleId string) (cloudprovider.ICloudLoadbalancerListenerRule, error) { rule, err := self.region.GetElbListenerRuleById(ruleId) if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbListenerRuleById") } rule.listener = self @@ -353,7 +353,7 @@ func (self *SElbListener) GetILoadBalancerListenerRuleById(ruleId string) (cloud func (self *SElbListener) GetILoadbalancerListenerRules() ([]cloudprovider.ICloudLoadbalancerListenerRule, error) { rules, err := self.region.GetElbListenerRules(self.GetId(), "") if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbListenerRules") } irules := make([]cloudprovider.ICloudLoadbalancerListenerRule, len(rules)) @@ -464,20 +464,20 @@ func (self *SElbListener) Delete(ctx context.Context) error { func (self *SRegion) GetElbListeners(elbId string) ([]SElbListener, error) { client, err := self.GetElbV2Client() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbV2Client") } params := &elbv2.DescribeListenersInput{} params.SetLoadBalancerArn(elbId) ret, err := client.DescribeListeners(params) if err != nil { - return nil, err + return nil, errors.Wrap(err, "DescribeListeners") } listeners := []SElbListener{} err = unmarshalAwsOutput(ret, "Listeners", &listeners) if err != nil { - return nil, err + return nil, errors.Wrap(err, "unmarshalAwsOutput.Listeners") } for i := range listeners { @@ -516,20 +516,20 @@ func unmarshalAwsOutput(output interface{}, respKey string, result interface{}) func (self *SRegion) GetElbListener(listenerId string) (*SElbListener, error) { client, err := self.GetElbV2Client() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbV2Client") } params := &elbv2.DescribeListenersInput{} params.SetListenerArns([]*string{&listenerId}) ret, err := client.DescribeListeners(params) if err != nil { - return nil, err + return nil, errors.Wrap(err, "DescribeListeners") } listeners := []SElbListener{} err = unmarshalAwsOutput(ret, "Listeners", &listeners) if err != nil { - return nil, err + return nil, errors.Wrap(err, "unmarshalAwsOutput.Listeners") } if len(listeners) == 1 { @@ -537,13 +537,13 @@ func (self *SRegion) GetElbListener(listenerId string) (*SElbListener, error) { return &listeners[0], nil } - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetElbListener") } func (self *SRegion) CreateElbListener(listener *cloudprovider.SLoadbalancerListener) (*SElbListener, error) { client, err := self.GetElbV2Client() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbV2Client") } listenerType := strings.ToUpper(listener.ListenerType) @@ -581,7 +581,7 @@ func (self *SRegion) CreateElbListener(listener *cloudprovider.SLoadbalancerList listeners := []SElbListener{} err = unmarshalAwsOutput(ret, "Listeners", &listeners) if err != nil { - return nil, err + return nil, errors.Wrap(err, "unmarshalAwsOutput.Listeners") } if len(listeners) == 1 { @@ -595,7 +595,7 @@ func (self *SRegion) CreateElbListener(listener *cloudprovider.SLoadbalancerList func (self *SRegion) GetElbListenerRules(listenerId string, ruleId string) ([]SElbListenerRule, error) { client, err := self.GetElbV2Client() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbV2Client") } params := &elbv2.DescribeRulesInput{} @@ -609,13 +609,13 @@ func (self *SRegion) GetElbListenerRules(listenerId string, ruleId string) ([]SE ret, err := client.DescribeRules(params) if err != nil { - return nil, err + return nil, errors.Wrap(err, "DescribeRules") } rules := []SElbListenerRule{} err = unmarshalAwsOutput(ret, "Rules", &rules) if err != nil { - return nil, err + return nil, errors.Wrap(err, "unmarshalAwsOutput.Rules") } for i := range rules { @@ -628,7 +628,7 @@ func (self *SRegion) GetElbListenerRules(listenerId string, ruleId string) ([]SE func (self *SRegion) GetElbListenerRuleById(ruleId string) (*SElbListenerRule, error) { client, err := self.GetElbV2Client() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbV2Client") } params := &elbv2.DescribeRulesInput{} @@ -638,13 +638,13 @@ func (self *SRegion) GetElbListenerRuleById(ruleId string) (*SElbListenerRule, e ret, err := client.DescribeRules(params) if err != nil { - return nil, err + return nil, errors.Wrap(err, "DescribeRules") } rules := []SElbListenerRule{} err = unmarshalAwsOutput(ret, "Rules", &rules) if err != nil { - return nil, err + return nil, errors.Wrap(err, "unmarshalAwsOutput.Rules") } if len(rules) == 1 { @@ -652,7 +652,7 @@ func (self *SRegion) GetElbListenerRuleById(ruleId string) (*SElbListenerRule, e return &rules[0], nil } else { log.Errorf("GetElbListenerRuleById %s %d found", ruleId, len(rules)) - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetElbListenerRuleById") } } diff --git a/pkg/multicloud/aws/loadbalancerlistenerrule.go b/pkg/multicloud/aws/loadbalancerlistenerrule.go index ac41afde4f..be9aeec69c 100644 --- a/pkg/multicloud/aws/loadbalancerlistenerrule.go +++ b/pkg/multicloud/aws/loadbalancerlistenerrule.go @@ -187,7 +187,7 @@ func (self *SRegion) DeleteElbListenerRule(ruleId string) error { func (self *SRegion) CreateElbListenerRule(listenerId string, config *cloudprovider.SLoadbalancerListenerRule) (*SElbListenerRule, error) { client, err := self.GetElbV2Client() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbV2Client") } forward := "forward" @@ -198,7 +198,7 @@ func (self *SRegion) CreateElbListenerRule(listenerId string, config *cloudprovi condtions, err := parseConditions(config.Condition) if err != nil { - return nil, err + return nil, errors.Wrap(err, "parseConditions") } params := &elbv2.CreateRuleInput{} @@ -208,7 +208,7 @@ func (self *SRegion) CreateElbListenerRule(listenerId string, config *cloudprovi params.SetPriority(int64(1)) ret, err := client.CreateRule(params) if err != nil { - return nil, err + return nil, errors.Wrap(err, "CreateRule") } if len(ret.Rules) == 0 { @@ -218,7 +218,7 @@ func (self *SRegion) CreateElbListenerRule(listenerId string, config *cloudprovi rule := SElbListenerRule{} err = unmarshalAwsOutput(ret.Rules[0], "", &rule) if err != nil { - return nil, err + return nil, errors.Wrap(err, "unmarshalAwsOutput.rule") } rule.region = self @@ -228,7 +228,7 @@ func (self *SRegion) CreateElbListenerRule(listenerId string, config *cloudprovi func parseConditions(conditions string) ([]*elbv2.RuleCondition, error) { obj, err := jsonutils.ParseString(conditions) if err != nil { - return nil, err + return nil, errors.Wrap(err, "ParseString.conditions") } conditionArray, ok := obj.(*jsonutils.JSONArray) @@ -241,7 +241,7 @@ func parseConditions(conditions string) ([]*elbv2.RuleCondition, error) { for i := range cs { c, err := parseCondition(cs[i]) if err != nil { - return nil, err + return nil, errors.Wrap(err, "parseCondition") } ret = append(ret, c) @@ -287,7 +287,7 @@ func parseHttpHeaderCondition(conditon *jsonutils.JSONDict) (*elbv2.RuleConditio values, err := conditon.GetMap("httpHeaderConfig") if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetMap") } name, ok := values["HttpHeaderName"] @@ -311,7 +311,7 @@ func parseHttpHeaderCondition(conditon *jsonutils.JSONDict) (*elbv2.RuleConditio _vs, err := parseConditionStringArrayValues(vs) if err != nil { - return nil, err + return nil, errors.Wrap(err, "parseConditionStringArrayValues") } config.SetValues(_vs) ret.SetHttpHeaderConfig(config) @@ -324,7 +324,7 @@ func parsePathPatternCondition(condition *jsonutils.JSONDict) (*elbv2.RuleCondit values, err := condition.GetMap("pathPatternConfig") if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetMap") } config := &elbv2.PathPatternConditionConfig{} @@ -335,7 +335,7 @@ func parsePathPatternCondition(condition *jsonutils.JSONDict) (*elbv2.RuleCondit _vs, err := parseConditionStringArrayValues(vs) if err != nil { - return nil, err + return nil, errors.Wrap(err, "parseConditionStringArrayValues") } config.SetValues(_vs) ret.SetPathPatternConfig(config) @@ -349,7 +349,7 @@ func parseRequestModthdCondition(condition *jsonutils.JSONDict) (*elbv2.RuleCond values, err := condition.GetMap("httpRequestMethodConfig") if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetMap.httpRequestMethodConfig") } config := &elbv2.HttpRequestMethodConditionConfig{} @@ -360,7 +360,7 @@ func parseRequestModthdCondition(condition *jsonutils.JSONDict) (*elbv2.RuleCond _vs, err := parseConditionStringArrayValues(vs) if err != nil { - return nil, err + return nil, errors.Wrap(err, "parseConditionStringArrayValues") } config.SetValues(_vs) return ret, nil @@ -372,7 +372,7 @@ func parseHostHeaderCondition(condition *jsonutils.JSONDict) (*elbv2.RuleConditi values, err := condition.GetMap("hostHeaderConfig") if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetMap.hostHeaderConfig") } config := &elbv2.HostHeaderConditionConfig{} @@ -383,7 +383,7 @@ func parseHostHeaderCondition(condition *jsonutils.JSONDict) (*elbv2.RuleConditi _vs, err := parseConditionStringArrayValues(vs) if err != nil { - return nil, err + return nil, errors.Wrap(err, "parseConditionStringArrayValues") } config.SetValues(_vs) ret.SetHostHeaderConfig(config) @@ -396,7 +396,7 @@ func parseQueryStringCondition(condition *jsonutils.JSONDict) (*elbv2.RuleCondit values, err := condition.GetMap("queryStringConfig") if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetMap.queryStringConfig") } config := &elbv2.QueryStringConditionConfig{} @@ -407,7 +407,7 @@ func parseQueryStringCondition(condition *jsonutils.JSONDict) (*elbv2.RuleCondit _vs, err := parseConditionDictArrayValues(vs) if err != nil { - return nil, err + return nil, errors.Wrap(err, "parseConditionDictArrayValues") } config.SetValues(_vs) ret.SetQueryStringConfig(config) @@ -420,7 +420,7 @@ func parseSourceIpCondition(condition *jsonutils.JSONDict) (*elbv2.RuleCondition values, err := condition.GetMap("sourceIpConfig") if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetMap.sourceIpConfig") } config := &elbv2.SourceIpConditionConfig{} @@ -431,7 +431,7 @@ func parseSourceIpCondition(condition *jsonutils.JSONDict) (*elbv2.RuleCondition _vs, err := parseConditionStringArrayValues(vs) if err != nil { - return nil, err + return nil, errors.Wrap(err, "parseConditionStringArrayValues") } config.SetValues(_vs) return ret, nil @@ -474,12 +474,12 @@ func parseConditionDictArrayValues(values jsonutils.JSONObject) ([]*elbv2.QueryS key, err := v.GetString("key") if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetString.key") } value, err := v.GetString("value") if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetString.value") } pair := &elbv2.QueryStringKeyValuePair{} diff --git a/pkg/multicloud/aws/network.go b/pkg/multicloud/aws/network.go index 662ff197de..05666dcf44 100644 --- a/pkg/multicloud/aws/network.go +++ b/pkg/multicloud/aws/network.go @@ -24,6 +24,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" + "yunion.io/x/pkg/errors" "yunion.io/x/pkg/util/netutils" api "yunion.io/x/onecloud/pkg/apis/compute" @@ -211,10 +212,11 @@ func (self *SRegion) getNetwork(networkId string) (*SNetwork, error) { } networks, total, err := self.GetNetwroks([]string{networkId}, "", 0, 0) if err != nil { - return nil, err + log.Errorf("GetNetwroks %s: %s", networkId, err) + return nil, errors.Wrap(err, "GetNetwroks") } if total != 1 { - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "getNetwork") } return &networks[0], nil } diff --git a/pkg/multicloud/aws/networkinterface.go b/pkg/multicloud/aws/networkinterface.go index 16eb8ebef7..8b869a9dd9 100644 --- a/pkg/multicloud/aws/networkinterface.go +++ b/pkg/multicloud/aws/networkinterface.go @@ -14,7 +14,11 @@ package aws -import "time" +import ( + "time" + + "yunion.io/x/pkg/errors" +) type SGroupSet struct { GroupId string `xml:"groupId"` @@ -65,7 +69,7 @@ func (region *SRegion) GetNetworkInterfaces() ([]SNetworkInterface, error) { interfaces := SNetworkInterfaces{} err := region.ec2Request("DescribeNetworkInterfaces", params, &interfaces) if err != nil { - return nil, err + return nil, errors.Wrap(err, "DescribeNetworkInterfaces") } return interfaces.NetworkInterface, nil } diff --git a/pkg/multicloud/aws/provider/provider.go b/pkg/multicloud/aws/provider/provider.go index 0baa0941c5..60ba061912 100644 --- a/pkg/multicloud/aws/provider/provider.go +++ b/pkg/multicloud/aws/provider/provider.go @@ -194,7 +194,7 @@ func (self *SAwsProviderFactory) GetProvider(cfg cloudprovider.ProviderConfig) ( ).CloudproviderConfig(cfg), ) if err != nil { - return nil, err + return nil, errors.Wrap(err, "NewAwsClient") } return &SAwsProvider{ SBaseProvider: cloudprovider.NewBaseProvider(self), diff --git a/pkg/multicloud/aws/region.go b/pkg/multicloud/aws/region.go index 14154ce9f7..ca108469c8 100644 --- a/pkg/multicloud/aws/region.go +++ b/pkg/multicloud/aws/region.go @@ -159,7 +159,7 @@ func (self *SRegion) getEc2Client() (*ec2.EC2, error) { s, err := self.getAwsSession() if err != nil { - return nil, err + return nil, errors.Wrap(err, "getAwsSession") } self.ec2Client = ec2.New(s) @@ -174,7 +174,7 @@ func (self *SRegion) getIamClient() (*iam.IAM, error) { s, err := self.getAwsSession() if err != nil { - return nil, err + return nil, errors.Wrap(err, "getAwsSession") } self.iamClient = iam.New(s) @@ -187,7 +187,7 @@ func (self *SRegion) GetS3Client() (*s3.S3, error) { if self.s3Client == nil { s, err := self.getAwsSession() if err != nil { - return nil, err + return nil, errors.Wrap(err, "getAwsSession") } self.s3Client = s3.New(s) } @@ -198,7 +198,7 @@ func (self *SRegion) getResourceGroupTagClient() (*resourcegroupstaggingapi.Reso if self.resourceGroupTagClient == nil { s, err := self.getAwsSession() if err != nil { - return nil, err + return nil, errors.Wrap(err, "getAwsSession") } self.resourceGroupTagClient = resourcegroupstaggingapi.New(s) } @@ -349,7 +349,7 @@ func (self *SRegion) GetElbV2Client() (*elbv2.ELBV2, error) { s, err := self.getAwsSession() if err != nil { - return nil, err + return nil, errors.Wrap(err, "getAwsSession") } self.elbv2Client = elbv2.New(s) @@ -491,7 +491,7 @@ func (self *SRegion) GetGeographicInfo() cloudprovider.SGeographicInfo { func (self *SRegion) GetIZones() ([]cloudprovider.ICloudZone, error) { if self.izones == nil { if err := self.fetchInfrastructure(); err != nil { - return nil, err + return nil, errors.Wrap(err, "fetchInfrastructure") } } return self.izones, nil @@ -501,7 +501,7 @@ func (self *SRegion) GetIVpcs() ([]cloudprovider.ICloudVpc, error) { if self.ivpcs == nil { err := self.fetchInfrastructure() if err != nil { - return nil, err + return nil, errors.Wrap(err, "fetchInfrastructure") } } return self.ivpcs, nil @@ -518,12 +518,12 @@ func (self *SRegion) GetIDiskById(id string) (cloudprovider.ICloudDisk, error) { func (self *SRegion) GetIEips() ([]cloudprovider.ICloudEIP, error) { _, err := self.getEc2Client() if err != nil { - return nil, err + return nil, errors.Wrap(err, "getEc2Client") } eips, total, err := self.GetEips("", "", 0, 0) if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetEips") } ret := make([]cloudprovider.ICloudEIP, total) @@ -536,7 +536,7 @@ func (self *SRegion) GetIEips() ([]cloudprovider.ICloudEIP, error) { func (self *SRegion) GetISnapshots() ([]cloudprovider.ICloudSnapshot, error) { snapshots, _, err := self.GetSnapshots("", "", "", []string{}, 0, 0) if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetSnapshots") } ret := make([]cloudprovider.ICloudSnapshot, len(snapshots)) @@ -549,7 +549,7 @@ func (self *SRegion) GetISnapshots() ([]cloudprovider.ICloudSnapshot, error) { func (self *SRegion) GetIZoneById(id string) (cloudprovider.ICloudZone, error) { izones, err := self.GetIZones() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetIZones") } for _, zone := range izones { @@ -558,13 +558,13 @@ func (self *SRegion) GetIZoneById(id string) (cloudprovider.ICloudZone, error) { } } - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetIZoneById") } func (self *SRegion) GetIVpcById(id string) (cloudprovider.ICloudVpc, error) { ivpcs, err := self.GetIVpcs() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetIVpcs") } for _, vpc := range ivpcs { @@ -573,39 +573,41 @@ func (self *SRegion) GetIVpcById(id string) (cloudprovider.ICloudVpc, error) { } } - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetIVpcById") } func (self *SRegion) GetIHostById(id string) (cloudprovider.ICloudHost, error) { izones, err := self.GetIZones() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetIZones") } for i := 0; i < len(izones); i += 1 { ihost, err := izones[i].GetIHostById(id) if err == nil { return ihost, nil } else if errors.Cause(err) != cloudprovider.ErrNotFound { - return nil, err + log.Errorf("GetIHostById %s: %s", id, err) + return nil, errors.Wrap(err, "GetIHostById") } } - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetIHostById") } func (self *SRegion) GetIStorageById(id string) (cloudprovider.ICloudStorage, error) { izones, err := self.GetIZones() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetIZones") } for i := 0; i < len(izones); i += 1 { istore, err := izones[i].GetIStorageById(id) if err == nil { return istore, nil } else if errors.Cause(err) != cloudprovider.ErrNotFound { - return nil, err + log.Errorf("GetIStorageById %s: %s", id, err) + return nil, errors.Wrap(err, "GetIStorageById") } } - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetIStorageById") } func (self *SRegion) GetIHosts() ([]cloudprovider.ICloudHost, error) { @@ -613,12 +615,12 @@ func (self *SRegion) GetIHosts() ([]cloudprovider.ICloudHost, error) { izones, err := self.GetIZones() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetIZones") } for i := 0; i < len(izones); i += 1 { iZoneHost, err := izones[i].GetIHosts() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetIHosts") } iHosts = append(iHosts, iZoneHost...) } @@ -630,12 +632,12 @@ func (self *SRegion) GetIStorages() ([]cloudprovider.ICloudStorage, error) { izones, err := self.GetIZones() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetIZones") } for i := 0; i < len(izones); i += 1 { iZoneStores, err := izones[i].GetIStorages() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetIStorages") } iStores = append(iStores, iZoneStores...) } @@ -650,7 +652,7 @@ func (self *SRegion) GetIStoragecacheById(id string) (cloudprovider.ICloudStorag if self.storageCache.GetGlobalId() == id { return self.storageCache, nil } - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetIStoragecacheById") } @@ -666,13 +668,13 @@ func (self *SRegion) CreateIVpc(name string, desc string, cidr string) (cloudpro spec, err := tagspec.GetTagSpecifications() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetTagSpecifications") } // start create vpc vpc, err := self.ec2Client.CreateVpc(&ec2.CreateVpcInput{CidrBlock: &cidr}) if err != nil { - return nil, err + return nil, errors.Wrap(err, "CreateVpc") } tagsParams := &ec2.CreateTagsInput{Resources: []*string{vpc.Vpc.VpcId}, Tags: spec.Tags} @@ -683,7 +685,7 @@ func (self *SRegion) CreateIVpc(name string, desc string, cidr string) (cloudpro err = self.fetchInfrastructure() if err != nil { - return nil, err + return nil, errors.Wrap(err, "fetchInfrastructure") } return self.GetIVpcById(*vpc.Vpc.VpcId) } @@ -691,10 +693,11 @@ func (self *SRegion) CreateIVpc(name string, desc string, cidr string) (cloudpro func (self *SRegion) GetIEipById(eipId string) (cloudprovider.ICloudEIP, error) { eips, total, err := self.GetEips(eipId, "", 0, 0) if err != nil { - return nil, err + log.Errorf("GetEips %s: %s", eipId, err) + return nil, errors.Wrap(err, "GetEips") } if total == 0 { - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetIEipById") } if total > 1 { return nil, cloudprovider.ErrDuplicateId @@ -713,7 +716,7 @@ func (self *SRegion) GetCloudEnv() string { func (self *SRegion) CreateInstanceSimple(name string, imgId string, cpu int, memGB int, storageType string, dataDiskSizesGB []int, networkId string, publicKey string) (*SInstance, error) { izones, err := self.GetIZones() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetIZones") } for i := 0; i < len(izones); i += 1 { z := izones[i].(*SZone) @@ -735,7 +738,7 @@ func (self *SRegion) CreateInstanceSimple(name string, imgId string, cpu int, me } inst, err := z.getHost().CreateVM(desc) if err != nil { - return nil, err + return nil, errors.Wrap(err, "CreateVM") } return inst.(*SInstance), nil } @@ -746,19 +749,19 @@ func (self *SRegion) CreateInstanceSimple(name string, imgId string, cpu int, me func (self *SRegion) GetILoadBalancers() ([]cloudprovider.ICloudLoadbalancer, error) { client, err := self.GetElbV2Client() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbV2Client") } params := &elbv2.DescribeLoadBalancersInput{} ret, err := client.DescribeLoadBalancers(params) if err != nil { - return nil, err + return nil, errors.Wrap(err, "DescribeLoadBalancers") } result := make([]SElb, 0) err = unmarshalAwsOutput(ret, "LoadBalancers", &result) if err != nil { - return nil, err + return nil, errors.Wrap(err, "unmarshalAwsOutput.LoadBalancers") } ielbs := make([]cloudprovider.ICloudLoadbalancer, len(result)) @@ -773,7 +776,7 @@ func (self *SRegion) GetILoadBalancers() ([]cloudprovider.ICloudLoadbalancer, er func (self *SRegion) GetILoadBalancerById(loadbalancerId string) (cloudprovider.ICloudLoadbalancer, error) { client, err := self.GetElbV2Client() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbV2Client") } params := &elbv2.DescribeLoadBalancersInput{} @@ -784,13 +787,13 @@ func (self *SRegion) GetILoadBalancerById(loadbalancerId string) (cloudprovider. return nil, cloudprovider.ErrNotFound } - return nil, err + return nil, errors.Wrap(err, "DescribeLoadBalancers") } elbs := []SElb{} err = unmarshalAwsOutput(ret, "LoadBalancers", &elbs) if err != nil { - return nil, err + return nil, errors.Wrap(err, "unmarshalAwsOutput.LoadBalancers") } if len(elbs) == 1 { @@ -798,26 +801,26 @@ func (self *SRegion) GetILoadBalancerById(loadbalancerId string) (cloudprovider. return &elbs[0], nil } - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetILoadBalancerById") } func (self *SRegion) getElbAttributesById(loadbalancerId string) (map[string]string, error) { client, err := self.GetElbV2Client() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbV2Client") } params := &elbv2.DescribeLoadBalancerAttributesInput{} params.SetLoadBalancerArn(loadbalancerId) output, err := client.DescribeLoadBalancerAttributes(params) if err != nil { - return nil, err + return nil, errors.Wrap(err, "DescribeLoadBalancerAttributes") } attrs := []map[string]string{} err = unmarshalAwsOutput(output, "Attributes", &attrs) if err != nil { - return nil, err + return nil, errors.Wrap(err, "unmarshalAwsOutput.Attributes") } ret := map[string]string{} @@ -837,7 +840,7 @@ func (self *SRegion) GetILoadBalancerAclById(aclId string) (cloudprovider.ICloud func (self *SRegion) GetILoadBalancerCertificateById(certId string) (cloudprovider.ICloudLoadbalancerCertificate, error) { certs, err := self.GetILoadBalancerCertificates() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetILoadBalancerCertificates") } for i := range certs { @@ -846,7 +849,7 @@ func (self *SRegion) GetILoadBalancerCertificateById(certId string) (cloudprovid } } - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetILoadBalancerCertificateById") } func (self *SRegion) CreateILoadBalancerCertificate(cert *cloudprovider.SLoadbalancerCertificate) (cloudprovider.ICloudLoadbalancerCertificate, error) { @@ -891,19 +894,19 @@ func (self *SRegion) GetILoadBalancerAcls() ([]cloudprovider.ICloudLoadbalancerA func (self *SRegion) GetILoadBalancerCertificates() ([]cloudprovider.ICloudLoadbalancerCertificate, error) { client, err := self.getIamClient() if err != nil { - return nil, err + return nil, errors.Wrap(err, "getIamClient") } params := &iam.ListServerCertificatesInput{} ret, err := client.ListServerCertificates(params) if err != nil { - return nil, err + return nil, errors.Wrap(err, "ListServerCertificates") } certs := []SElbCertificate{} err = unmarshalAwsOutput(ret, "ServerCertificateMetadataList", &certs) if err != nil { - return nil, err + return nil, errors.Wrap(err, "unmarshalAwsOutput.ServerCertificateMetadataList") } icerts := make([]cloudprovider.ICloudLoadbalancerCertificate, len(certs)) @@ -918,7 +921,7 @@ func (self *SRegion) GetILoadBalancerCertificates() ([]cloudprovider.ICloudLoadb func (self *SRegion) CreateILoadBalancer(loadbalancer *cloudprovider.SLoadbalancer) (cloudprovider.ICloudLoadbalancer, error) { client, err := self.GetElbV2Client() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbV2Client") } params := &elbv2.CreateLoadBalancerInput{} @@ -953,13 +956,13 @@ func (self *SRegion) CreateILoadBalancer(loadbalancer *cloudprovider.SLoadbalanc ret, err := client.CreateLoadBalancer(params) if err != nil { - return nil, err + return nil, errors.Wrap(err, "CreateLoadBalancer") } elbs := []SElb{} err = unmarshalAwsOutput(ret, "LoadBalancers", &elbs) if err != nil { - return nil, err + return nil, errors.Wrap(err, "unmarshalAwsOutput.LoadBalancers") } if len(elbs) == 1 { @@ -1095,7 +1098,7 @@ func (self *SRegion) GetSkus(zoneId string) ([]cloudprovider.ICloudSku, error) { func (self *SRegion) GetILoadBalancerBackendGroups() ([]cloudprovider.ICloudLoadbalancerBackendGroup, error) { backendgroups, err := self.GetElbBackendgroups("", nil) if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetElbBackendgroups") } ret := make([]cloudprovider.ICloudLoadbalancerBackendGroup, len(backendgroups)) @@ -1109,7 +1112,7 @@ func (self *SRegion) GetILoadBalancerBackendGroups() ([]cloudprovider.ICloudLoad func (self *SRegion) GetISecurityGroupById(secgroupId string) (cloudprovider.ICloudSecurityGroup, error) { secgroups, total, err := self.GetSecurityGroups("", "", secgroupId, 0, 1) if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetSecurityGroups") } if total == 0 { return nil, cloudprovider.ErrNotFound @@ -1123,7 +1126,7 @@ func (self *SRegion) GetISecurityGroupById(secgroupId string) (cloudprovider.ICl func (self *SRegion) GetISecurityGroupByName(opts *cloudprovider.SecurityGroupFilterOptions) (cloudprovider.ICloudSecurityGroup, error) { secgroups, total, err := self.GetSecurityGroups(opts.VpcId, opts.Name, "", 0, 1) if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetSecurityGroups") } if total == 0 { return nil, cloudprovider.ErrNotFound @@ -1137,7 +1140,7 @@ func (self *SRegion) GetISecurityGroupByName(opts *cloudprovider.SecurityGroupFi func (self *SRegion) CreateISecurityGroup(conf *cloudprovider.SecurityGroupCreateInput) (cloudprovider.ICloudSecurityGroup, error) { groupId, err := self.CreateSecurityGroup(conf.VpcId, conf.Name, "", conf.Desc) if err != nil { - return nil, err + return nil, errors.Wrap(err, "CreateSecurityGroup") } return self.GetISecurityGroupById(groupId) } diff --git a/pkg/multicloud/aws/securitygroup.go b/pkg/multicloud/aws/securitygroup.go index e48e098627..9719cec054 100644 --- a/pkg/multicloud/aws/securitygroup.go +++ b/pkg/multicloud/aws/securitygroup.go @@ -131,7 +131,7 @@ func (self *SSecurityGroup) GetDescription() string { func (self *SSecurityGroup) GetRules() ([]cloudprovider.SecurityRule, error) { secgrp, err := self.vpc.region.GetSecurityGroupDetails(self.SecurityGroupId) if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetSecurityGroupDetails") } return secgrp.Permissions, nil } @@ -309,7 +309,7 @@ func (self *SRegion) GetSecurityGroupDetails(secGroupId string) (*SSecurityGroup ret, err := self.ec2Client.DescribeSecurityGroups(params) err = parseNotFoundError(err) if err != nil { - return nil, err + return nil, errors.Wrap(err, "DescribeSecurityGroups") } if len(ret.SecurityGroups) == 1 { @@ -342,7 +342,8 @@ func (self *SRegion) getSecurityGroupById(vpcId, secgroupId string) (*SSecurityG secgroups, total, err := self.GetSecurityGroups(vpcId, "", secgroupId, 0, 0) if err != nil { - return nil, err + log.Errorf("GetSecurityGroups vpc %s secgroupId %s: %s", vpcId, secgroupId, err) + return nil, errors.Wrap(err, "GetSecurityGroups") } if total != 1 { diff --git a/pkg/multicloud/aws/snapshot.go b/pkg/multicloud/aws/snapshot.go index d7540685d4..3e743925b3 100644 --- a/pkg/multicloud/aws/snapshot.go +++ b/pkg/multicloud/aws/snapshot.go @@ -22,6 +22,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" @@ -86,7 +87,7 @@ func (self *SSnapshot) Refresh() error { if snapshots, total, err := self.region.GetSnapshots("", "", "", []string{self.SnapshotId}, 0, 1); err != nil { return err } else if total != 1 { - return ErrorNotFound() + return errors.Wrap(cloudprovider.ErrNotFound, "GetSnapshots") } else if err := jsonutils.Update(self, snapshots[0]); err != nil { return err } @@ -139,7 +140,7 @@ func (self *SRegion) GetSnapshots(instanceId string, diskId string, snapshotName err = parseNotFoundError(err) if err != nil { if strings.Contains(err.Error(), "InvalidSnapshot.NotFound") { - return nil, 0, ErrorNotFound() + return nil, 0, errors.Wrap(cloudprovider.ErrNotFound, "parseNotFoundError") } return nil, 0, err @@ -172,9 +173,9 @@ func (self *SRegion) GetSnapshots(instanceId string, diskId string, snapshotName func (self *SRegion) GetISnapshotById(snapshotId string) (cloudprovider.ICloudSnapshot, error) { if snapshots, total, err := self.GetSnapshots("", "", "", []string{snapshotId}, 0, 1); err != nil { - return nil, err + return nil, errors.Wrap(err, "GetSnapshots") } else if total != 1 { - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetSnapshots") } else { return &snapshots[0], nil } diff --git a/pkg/multicloud/aws/storage.go b/pkg/multicloud/aws/storage.go index fa59a1d16d..5fd3e721bf 100644 --- a/pkg/multicloud/aws/storage.go +++ b/pkg/multicloud/aws/storage.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/cloudprovider" @@ -69,7 +70,7 @@ func (self *SStorage) GetIDisks() ([]cloudprovider.ICloudDisk, error) { parts, total, err := self.zone.region.GetDisks("", self.zone.GetId(), self.storageType, nil, len(disks), 50) if err != nil { log.Errorf("GetDisks fail %s", err) - return nil, err + return nil, errors.Wrap(err, "GetDisks") } disks = append(disks, parts...) if len(disks) >= total { @@ -117,12 +118,12 @@ func (self *SStorage) CreateIDisk(conf *cloudprovider.DiskCreateConfig) (cloudpr diskId, err := self.zone.region.CreateDisk(self.zone.ZoneId, self.storageType, conf.Name, conf.SizeGb, "", conf.Desc) if err != nil { log.Errorf("createDisk fail %s", err) - return nil, err + return nil, errors.Wrap(err, "CreateDisk") } disk, err := self.zone.region.GetDisk(diskId) if err != nil { - log.Errorf("getDisk fail %s", err) - return nil, err + log.Errorf("getDisk %s fail %s", diskId, err) + return nil, errors.Wrap(err, "GetDisk") } disk.storage = self return disk, nil @@ -130,7 +131,8 @@ func (self *SStorage) CreateIDisk(conf *cloudprovider.DiskCreateConfig) (cloudpr func (self *SStorage) GetIDiskById(idStr string) (cloudprovider.ICloudDisk, error) { if disk, err := self.zone.region.GetDisk(idStr); err != nil { - return nil, err + log.Errorf("GetDisk %s: %s", idStr, err) + return nil, errors.Wrap(err, "GetDisk") } else { disk.storage = self return disk, nil diff --git a/pkg/multicloud/aws/storagecache.go b/pkg/multicloud/aws/storagecache.go index 41a13efb7e..b33e3ef043 100644 --- a/pkg/multicloud/aws/storagecache.go +++ b/pkg/multicloud/aws/storagecache.go @@ -90,7 +90,8 @@ func (self *SStoragecache) GetIImageById(extId string) (cloudprovider.ICloudImag part, err := self.region.GetImage(extId) if err != nil { - return nil, err + log.Errorf("GetImage %s %s", extId, err) + return nil, errors.Wrap(err, "GetImage") } part.storageCache = self return part, nil @@ -103,18 +104,20 @@ func (self *SStoragecache) GetPath() string { func (self *SStoragecache) CreateIImage(snapshotId, imageName, osType, imageDesc string) (cloudprovider.ICloudImage, error) { imageId, err := self.region.createIImage(snapshotId, imageName, imageDesc) if err != nil { - return nil, err + log.Errorf("createIImage %s %s %s: %s", snapshotId, imageName, imageDesc, err) + return nil, errors.Wrap(err, "createIImage") } image, err := self.region.GetImage(imageId) if err != nil { - return nil, err + log.Errorf("GetImage %s: %s", imageId, err) + return nil, errors.Wrap(err, "GetImage") } image.storageCache = self iimage := make([]cloudprovider.ICloudImage, 1) iimage[0] = image //todo : implement me if err := cloudprovider.WaitStatus(iimage[0], "avaliable", 15*time.Second, 3600*time.Second); err != nil { - return nil, err + return nil, errors.Wrap(err, "WaitStatus.iimage") } return iimage[0], nil } @@ -239,28 +242,32 @@ func (self *SStoragecache) downloadImage(userCred mcclient.TokenCredential, imag // aws 导出镜像限制比较多。https://docs.aws.amazon.com/zh_cn/vm-import/latest/userguide/vmexport.html bucketName := GetBucketName(self.region.GetId(), imageId) if err := self.region.checkBucket(bucketName); err != nil { - return nil, err + log.Errorf("checkBucket %s: %s", bucketName, err) + return nil, errors.Wrap(err, "checkBucket") } instanceId, err := self.region.GetInstanceIdByImageId(extId) if err != nil { - return nil, err + log.Errorf("GetInstanceIdByImageId %s: %s", extId, err) + return nil, errors.Wrap(err, "GetInstanceIdByImageId") } task, err := self.region.ExportImage(instanceId, imageId) if err != nil { - return nil, err + log.Errorf("ExportImage %s %s: %s", instanceId, imageId, err) + return nil, errors.Wrap(err, "ExportImage") } taskParams := &ec2.DescribeExportTasksInput{} taskParams.SetExportTaskIds([]*string{&task.TaskId}) if err := self.region.ec2Client.WaitUntilExportTaskCompleted(taskParams); err != nil { - return nil, err + log.Errorf("WaitUntilExportTaskCompleted %#v %s", taskParams, err) + return nil, errors.Wrap(err, "WaitUntilExportTaskCompleted") } s3Client, err := self.region.GetS3Client() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetS3Client") } i := &s3.GetObjectInput{} @@ -268,13 +275,14 @@ func (self *SStoragecache) downloadImage(userCred mcclient.TokenCredential, imag i.SetKey(fmt.Sprintf("%s.%s", task.TaskId, "ova")) ret, err := s3Client.GetObject(i) if err != nil { - return nil, err + log.Errorf("GetObject %#v: %s", i, err) + return nil, errors.Wrap(err, "GetObject") } s := auth.GetAdminSession(context.Background(), options.Options.Region, "") params := jsonutils.Marshal(map[string]string{"image_id": imageId, "disk-format": "raw"}) if result, err := modules.Images.Upload(s, params, ret.Body, IntVal(ret.ContentLength)); err != nil { - return nil, err + return nil, errors.Wrap(err, "Images.Images") } else { return result, nil } @@ -287,7 +295,8 @@ func (self *SRegion) CheckBucket(bucketName string) error { func (self *SRegion) checkBucket(bucketName string) error { exists, err := self.IsBucketExist(bucketName) if err != nil { - return err + log.Errorf("IsBucketExist %s: %s", bucketName, err) + return errors.Wrap(err, "IsBucketExist") } if !exists { @@ -301,13 +310,13 @@ func (self *SRegion) checkBucket(bucketName string) error { func (self *SRegion) IsBucketExist(bucketName string) (bool, error) { s3Client, err := self.GetS3Client() if err != nil { - return false, err + return false, errors.Wrap(err, "IsBucketExist.GetS3Client") } params := &s3.ListBucketsInput{} ret, err := s3Client.ListBuckets(params) if err != nil { - return false, err + return false, errors.Wrap(err, "ListBuckets") } for _, bucket := range ret.Buckets { diff --git a/pkg/multicloud/aws/utils.go b/pkg/multicloud/aws/utils.go index a570278275..5ecd27e260 100644 --- a/pkg/multicloud/aws/utils.go +++ b/pkg/multicloud/aws/utils.go @@ -25,6 +25,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" + "yunion.io/x/pkg/errors" "yunion.io/x/pkg/util/secrules" "yunion.io/x/onecloud/pkg/cloudprovider" @@ -494,12 +495,8 @@ func parseNotFoundError(err error) error { } if strings.Contains(err.Error(), ".NotFound") { - return ErrorNotFound() + return errors.Wrap(cloudprovider.ErrNotFound, "parseNotFoundError") } else { return err } } - -func ErrorNotFound() error { - return cloudprovider.ErrNotFound -} diff --git a/pkg/multicloud/aws/vpc.go b/pkg/multicloud/aws/vpc.go index 32eaed2b3e..a9ccdfb983 100644 --- a/pkg/multicloud/aws/vpc.go +++ b/pkg/multicloud/aws/vpc.go @@ -111,7 +111,7 @@ func (self *SVpc) GetIWires() ([]cloudprovider.ICloudWire, error) { if self.iwires == nil { err := self.fetchNetworks() if err != nil { - return nil, err + return nil, errors.Wrap(err, "fetchNetworks") } } return self.iwires, nil @@ -121,7 +121,7 @@ func (self *SVpc) GetISecurityGroups() ([]cloudprovider.ICloudSecurityGroup, err if self.secgroups == nil { err := self.fetchSecurityGroups() if err != nil { - return nil, err + return nil, errors.Wrap(err, "fetchSecurityGroups") } } return self.secgroups, nil @@ -192,7 +192,7 @@ func (self *SVpc) GetIWireById(wireId string) (cloudprovider.ICloudWire, error) if self.iwires == nil { err := self.fetchNetworks() if err != nil { - return nil, err + return nil, errors.Wrap(err, "fetchNetworks") } } for i := 0; i < len(self.iwires); i += 1 { @@ -200,7 +200,7 @@ func (self *SVpc) GetIWireById(wireId string) (cloudprovider.ICloudWire, error) return self.iwires[i], nil } } - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetIWireById") } func (self *SVpc) getWireByZoneId(zoneId string) *SWire { @@ -554,10 +554,11 @@ func (self *SRegion) getVpc(vpcId string) (*SVpc, error) { vpcs, total, err := self.GetVpcs([]string{vpcId}, 0, 1) if err != nil { - return nil, err + log.Errorf("GetVpcs %s: %s", vpcId, err) + return nil, errors.Wrap(err, "GetVpcs") } if total != 1 { - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "getVpc") } vpcs[0].region = self return &vpcs[0], nil diff --git a/pkg/multicloud/aws/wire.go b/pkg/multicloud/aws/wire.go index 076b98fdc7..9be777b609 100644 --- a/pkg/multicloud/aws/wire.go +++ b/pkg/multicloud/aws/wire.go @@ -18,6 +18,7 @@ import ( "fmt" "yunion.io/x/log" + "yunion.io/x/pkg/errors" "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/multicloud" @@ -67,7 +68,7 @@ func (self *SWire) GetINetworks() ([]cloudprovider.ICloudNetwork, error) { if self.inetworks == nil { err := self.vpc.fetchNetworks() if err != nil { - return nil, err + return nil, errors.Wrap(err, "fetchNetworks") } } return self.inetworks, nil @@ -80,27 +81,27 @@ func (self *SWire) GetBandwidth() int { func (self *SWire) GetINetworkById(netid string) (cloudprovider.ICloudNetwork, error) { networks, err := self.GetINetworks() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetINetworks") } for i := 0; i < len(networks); i += 1 { if networks[i].GetGlobalId() == netid { return networks[i], nil } } - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetINetworkById") } func (self *SWire) CreateINetwork(opts *cloudprovider.SNetworkCreateOptions) (cloudprovider.ICloudNetwork, error) { networkId, err := self.zone.region.createNetwork(self.zone.ZoneId, self.vpc.VpcId, opts.Name, opts.Cidr, opts.Desc) if err != nil { log.Errorf("createNetwork error %s", err) - return nil, err + return nil, errors.Wrap(err, "createNetwork") } self.inetworks = nil network := self.getNetworkById(networkId) if network == nil { log.Errorf("cannot find network after create????") - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "getNetworkById") } return network, nil } diff --git a/pkg/multicloud/aws/zone.go b/pkg/multicloud/aws/zone.go index 3b06c43065..5b527fc0b0 100644 --- a/pkg/multicloud/aws/zone.go +++ b/pkg/multicloud/aws/zone.go @@ -153,7 +153,7 @@ func (self *SZone) GetIHostById(id string) (cloudprovider.ICloudHost, error) { if host.GetGlobalId() == id { return host, nil } - return nil, ErrorNotFound() + return nil, errors.Wrap(cloudprovider.ErrNotFound, "GetIHostById") } func (self *SZone) GetIStorages() ([]cloudprovider.ICloudStorage, error) { @@ -184,7 +184,7 @@ func (self *SZone) GetIStorageById(id string) (cloudprovider.ICloudStorage, erro func (self *SZone) getStorageByCategory(category string) (*SStorage, error) { storages, err := self.GetIStorages() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetIStorages") } for i := 0; i < len(storages); i += 1 { storage := storages[i].(*SStorage) @@ -198,7 +198,7 @@ func (self *SZone) getStorageByCategory(category string) (*SStorage, error) { func (self *SRegion) getZoneById(id string) (*SZone, error) { izones, err := self.GetIZones() if err != nil { - return nil, err + return nil, errors.Wrap(err, "GetIZones") } for i := 0; i < len(izones); i += 1 { zone := izones[i].(*SZone)