fix: huawei fail to import image

This commit is contained in:
Qiu Jian
2019-08-30 23:08:18 +08:00
parent d884992399
commit 22062150d5
4 changed files with 24 additions and 8 deletions
+18 -2
View File
@@ -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
}
+2 -5
View File
@@ -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")
}
+3
View File
@@ -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
+1 -1
View File
@@ -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"