diff --git a/pkg/multicloud/apsara/apsara.go b/pkg/multicloud/apsara/apsara.go index fde40dc283..e4ba985b4f 100644 --- a/pkg/multicloud/apsara/apsara.go +++ b/pkg/multicloud/apsara/apsara.go @@ -202,6 +202,10 @@ func _jsonRequest(client *sdk.Client, domain string, version string, apiName str id := "" if params != nil { for k, v := range params { + if strings.HasPrefix(k, "x-acs-") { + req.GetHeaders()[k] = v + continue + } req.QueryParams[k] = v if strings.ToLower(k) != "regionid" && strings.HasSuffix(k, "Id") { id = v diff --git a/pkg/multicloud/apsara/bucket.go b/pkg/multicloud/apsara/bucket.go index c7913d9e53..faca8c465e 100644 --- a/pkg/multicloud/apsara/bucket.go +++ b/pkg/multicloud/apsara/bucket.go @@ -61,18 +61,21 @@ func (self *SBucket) GetOssClient() (*oss.Client, error) { } func (b *SBucket) GetAcl() cloudprovider.TBucketACLType { - acl := cloudprovider.ACLPrivate - osscli, err := b.GetOssClient() - if err != nil { - log.Errorf("b.region.GetOssClient fail %s", err) - return acl + acl := b.region.GetBucketAcl(b.Name) + return cloudprovider.TBucketACLType(acl) +} + +func (self *SRegion) GetBucketAcl(bucket string) string { + params := map[string]string{ + "AccountInfo": "aaa", + "x-acs-instanceid": bucket, + "Params": jsonutils.Marshal(map[string]string{"BucketName": bucket, "acl": "acl"}).String(), } - aclResp, err := osscli.GetBucketACL(b.Name) + resp, err := self.ossRequest("GetBucketAcl", params) if err != nil { - log.Errorf("osscli.GetBucketACL fail %s", err) - return acl + return "" } - acl = cloudprovider.TBucketACLType(aclResp.ACL) + acl, _ := resp.GetString("Data", "AccessControlPolicy", "AccessControlList", "Grant") return acl } diff --git a/pkg/multicloud/apsara/region.go b/pkg/multicloud/apsara/region.go index e8c7942c55..a4ccb3c149 100644 --- a/pkg/multicloud/apsara/region.go +++ b/pkg/multicloud/apsara/region.go @@ -1046,23 +1046,17 @@ func (self *SRegion) DeleteIBucket(name string) error { } func (self *SRegion) GetBucket(name string) (*SBucket, error) { - cli, err := self.GetOssClient() - if err != nil { - return nil, err + params := map[string]string{ + "AccountInfo": "aaa", + "x-acs-instanceid": name, + "Params": jsonutils.Marshal(map[string]string{"BucketName": name}).String(), } - bucket, err := cli.GetBucketInfo(name) + resp, err := self.ossRequest("GetBucketInfo", params) if err != nil { - return nil, err + return nil, errors.Wrapf(err, "GetBucketInfo") } - - bInfo := bucket.BucketInfo - return &SBucket{ - region: self, - Name: bInfo.Name, - Location: bInfo.Location, - CreationDate: bInfo.CreationDate, - StorageClass: bInfo.StorageClass, - }, nil + bucket := &SBucket{region: self} + return bucket, resp.Unmarshal(bucket, "Data", "BucketInfo", "Bucket") } func (self *SRegion) IBucketExist(name string) (bool, error) {