From 532922d98ad53feeb4079721b22802c5f6866ebb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Fri, 8 Jul 2022 21:54:04 +0800 Subject: [PATCH] fix(region): apsara bucket acl (#14601) --- pkg/multicloud/apsara/apsara.go | 4 ++++ pkg/multicloud/apsara/bucket.go | 21 ++++++++++++--------- pkg/multicloud/apsara/region.go | 22 ++++++++-------------- 3 files changed, 24 insertions(+), 23 deletions(-) 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) {