mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-21 06:09:39 +08:00
fix: huawei fail to import image
This commit is contained in:
@@ -971,6 +971,16 @@ func (region *SRegion) CreateIBucket(name string, storageClassStr string, aclStr
|
||||
return nil
|
||||
}
|
||||
|
||||
func obsHttpCode(err error) int {
|
||||
switch httpErr := err.(type) {
|
||||
case obs.ObsError:
|
||||
return httpErr.StatusCode
|
||||
case *obs.ObsError:
|
||||
return httpErr.StatusCode
|
||||
}
|
||||
return -1
|
||||
}
|
||||
|
||||
func (region *SRegion) DeleteIBucket(name string) error {
|
||||
obsClient, err := region.getOBSClient()
|
||||
if err != nil {
|
||||
@@ -978,9 +988,10 @@ func (region *SRegion) DeleteIBucket(name string) error {
|
||||
}
|
||||
_, err = obsClient.DeleteBucket(name)
|
||||
if err != nil {
|
||||
if strings.Index(err.Error(), "Code=NoSuchBucket") >= 0 {
|
||||
if obsHttpCode(err) == 404 {
|
||||
return nil
|
||||
}
|
||||
log.Debugf("%#v %s", err, err)
|
||||
return errors.Wrap(err, "DeleteBucket")
|
||||
}
|
||||
region.client.invalidateIBuckets()
|
||||
@@ -994,7 +1005,12 @@ func (region *SRegion) IBucketExist(name string) (bool, error) {
|
||||
}
|
||||
_, err = obsClient.HeadBucket(name)
|
||||
if err != nil {
|
||||
return false, errors.Wrap(err, "HeadBucket")
|
||||
if obsHttpCode(err) == 404 {
|
||||
return false, nil
|
||||
} else {
|
||||
log.Debugf("%#v %s", err, err)
|
||||
return false, errors.Wrap(err, "HeadBucket")
|
||||
}
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
@@ -163,12 +163,9 @@ func (self *SStoragecache) UploadImage(ctx context.Context, userCred mcclient.To
|
||||
func (self *SStoragecache) uploadImage(ctx context.Context, userCred mcclient.TokenCredential, image *cloudprovider.SImageCreateOption, isForce bool) (string, error) {
|
||||
bucketName := GetBucketName(self.region.GetId(), image.ImageId)
|
||||
|
||||
exist, err := self.region.IBucketExist(bucketName)
|
||||
if err != nil {
|
||||
return "", errors.Wrap(err, "self.region.IBucketExist")
|
||||
}
|
||||
exist, _ := self.region.IBucketExist(bucketName)
|
||||
if !exist {
|
||||
err = self.region.CreateIBucket(bucketName, "", "")
|
||||
err := self.region.CreateIBucket(bucketName, "", "")
|
||||
if err != nil {
|
||||
return "", errors.Wrap(err, "CreateIBucket")
|
||||
}
|
||||
|
||||
@@ -905,6 +905,9 @@ func (region *SRegion) IBucketExist(name string) (bool, error) {
|
||||
}
|
||||
_, err = coscli.Bucket.Head(context.Background())
|
||||
if err != nil {
|
||||
if cosHttpCode(err) == 404 {
|
||||
return false, nil
|
||||
}
|
||||
return false, errors.Wrap(err, "BucketExists")
|
||||
}
|
||||
return true, nil
|
||||
|
||||
@@ -22,8 +22,8 @@ import (
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
"yunion.io/x/log"
|
||||
"yunion.io/x/pkg/errors"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
api "yunion.io/x/onecloud/pkg/apis/compute"
|
||||
"yunion.io/x/onecloud/pkg/cloudprovider"
|
||||
"yunion.io/x/onecloud/pkg/compute/options"
|
||||
|
||||
Reference in New Issue
Block a user