Merge pull request #10166 from tb365/bugfix/tb-bugfix-01020502

warp aws err with errors.Wrap
This commit is contained in:
Zexi Li
2021-02-06 18:38:45 +08:00
committed by GitHub
27 changed files with 294 additions and 250 deletions
+13 -10
View File
@@ -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 {
+5 -4
View File
@@ -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++ {
+3 -1
View File
@@ -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, &parameters)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "DescribeDBParameters")
}
return parameters.Parameters, nil
}
+3 -2
View File
@@ -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++ {
+13 -12
View File
@@ -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
}
+9 -6
View File
@@ -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)
}
+11 -7
View File
@@ -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
+9 -9
View File
@@ -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{}
+6 -5
View File
@@ -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
}
+3 -1
View File
@@ -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
}
+18 -18
View File
@@ -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})
+32 -28
View File
@@ -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{}
+2 -1
View File
@@ -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
+22 -22
View File
@@ -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")
}
}
+20 -20
View File
@@ -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{}
+4 -2
View File
@@ -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
}
+6 -2
View File
@@ -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
}
+1 -1
View File
@@ -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),
+57 -54
View File
@@ -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)
}
+4 -3
View File
@@ -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 {
+5 -4
View File
@@ -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
}
+7 -5
View File
@@ -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
+23 -14
View File
@@ -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 {
+2 -5
View File
@@ -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
}
+7 -6
View File
@@ -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
+6 -5
View File
@@ -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
}
+3 -3
View File
@@ -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)