Skip to content

Commit

Permalink
add bucket resource group api
Browse files Browse the repository at this point in the history
  • Loading branch information
yangzong18 authored and huiguangjun committed Mar 23, 2023
1 parent f5ca9de commit c74b4e8
Show file tree
Hide file tree
Showing 7 changed files with 198 additions and 1 deletion.
61 changes: 61 additions & 0 deletions oss/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -2263,6 +2263,67 @@ func (client Client) DeleteBucketCname(bucketName string, cname string, options
return CheckRespCode(resp.StatusCode, []int{http.StatusOK})
}

// PutBucketResourceGroup set bucket's resource group
// bucketName the bucket name.
// resourceGroup the resource group configuration of bucket.
// error it's nil if no error, otherwise it's an error object.
func (client Client) PutBucketResourceGroup(bucketName string, resourceGroup PutBucketResourceGroup, options ...Option) error {
bs, err := xml.Marshal(resourceGroup)
if err != nil {
return err
}
err = client.PutBucketResourceGroupXml(bucketName, string(bs), options...)
return err
}

// PutBucketResourceGroupXml set bucket's resource group
// bucketName the bucket name.
// xmlData the resource group in xml format
// error it's nil if no error, otherwise it's an error object.
func (client Client) PutBucketResourceGroupXml(bucketName string, xmlData string, options ...Option) error {
buffer := new(bytes.Buffer)
buffer.Write([]byte(xmlData))
contentType := http.DetectContentType(buffer.Bytes())
headers := map[string]string{}
headers[HTTPHeaderContentType] = contentType
params := map[string]interface{}{}
params["resourceGroup"] = nil
resp, err := client.do("PUT", bucketName, params, nil, buffer, options...)
if err != nil {
return err
}
defer resp.Body.Close()
return CheckRespCode(resp.StatusCode, []int{http.StatusOK})
}

// GetBucketResourceGroup get bucket's resource group
// bucketName the bucket name.
// GetBucketResourceGroupResult the resource group configuration result of bucket.
// error it's nil if no error, otherwise it's an error object.
func (client Client) GetBucketResourceGroup(bucketName string, options ...Option) (GetBucketResourceGroupResult, error) {
var out GetBucketResourceGroupResult
body, err := client.GetBucketResourceGroupXml(bucketName, options...)
err = xmlUnmarshal(strings.NewReader(body), &out)
return out, err
}

// GetBucketResourceGroupXml get bucket's resource group
// bucketName the bucket name.
// string the resource group result of bucket xml format.
// error it's nil if no error, otherwise it's an error object.
func (client Client) GetBucketResourceGroupXml(bucketName string, options ...Option) (string, error) {
params := map[string]interface{}{}
params["resourceGroup"] = nil
resp, err := client.do("GET", bucketName, params, nil, nil, options...)
if err != nil {
return "", err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
out := string(body)
return out, err
}

// LimitUploadSpeed set upload bandwidth limit speed,default is 0,unlimited
// upSpeed KB/s, 0 is unlimited,default is 0
// error it's nil if success, otherwise failure
Expand Down
41 changes: 41 additions & 0 deletions oss/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5200,3 +5200,44 @@ func (s *OssClientSuite) TestBucketAccessMonitor(c *C) {
c.Assert(err, IsNil)
c.Assert(result.Status, Equals, "Disabled")
}

// TestBucketResourceGroup
func (s *OssClientSuite) TestBucketResourceGroup(c *C) {
var bucketNameTest = bucketNamePrefix + "-acc-" + RandLowStr(6)
client, err := New(endpoint, accessID, accessKey)
c.Assert(err, IsNil)

err = client.CreateBucket(bucketNameTest)
c.Assert(err, IsNil)
time.Sleep(3 * time.Second)

res, err := client.GetBucketResourceGroup(bucketNameTest)
c.Assert(err, IsNil)
c.Assert(res.ResourceGroupId, Equals, "rg-acfmy7mo47b3adq")

// Put Bucket Resource Group
resource := PutBucketResourceGroup{
ResourceGroupId: "rg-aekztgrh2colcoa",
}
err = client.PutBucketResourceGroup(bucketNameTest, resource)
c.Assert(err, IsNil)
time.Sleep(3 * time.Second)

// Get Bucket Resource Group
res, err = client.GetBucketResourceGroup(bucketNameTest)
c.Assert(err, IsNil)
c.Assert(res.ResourceGroupId, Equals, "rg-aekztgrh2colcoa")

// Put Bucket Resource Group With Empty Resource GroupId
resource = PutBucketResourceGroup{
ResourceGroupId: "",
}
err = client.PutBucketResourceGroup(bucketNameTest, resource)
c.Assert(err, IsNil)
time.Sleep(3 * time.Second)

// Get Bucket Resource Group
res, err = client.GetBucketResourceGroup(bucketNameTest)
c.Assert(err, IsNil)
c.Assert(res.ResourceGroupId, Equals, "rg-acfmy7mo47b3adq")
}
2 changes: 1 addition & 1 deletion oss/conn.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ var signKeyList = []string{"acl", "uploads", "location", "cors",
"x-oss-enable-md5", "x-oss-enable-sha1", "x-oss-enable-sha256",
"x-oss-hash-ctx", "x-oss-md5-ctx", "transferAcceleration",
"regionList", "cloudboxes", "x-oss-ac-source-ip", "x-oss-ac-subnet-mask", "x-oss-ac-vpc-id", "x-oss-ac-forward-allow",
"metaQuery",
"metaQuery", "resourceGroup",
}

// init initializes Conn
Expand Down
12 changes: 12 additions & 0 deletions oss/type.go
Original file line number Diff line number Diff line change
Expand Up @@ -1470,3 +1470,15 @@ type BucketAccessMonitorXml struct {
XMLName xml.Name `xml:"AccessMonitorConfiguration"`
Status string `xml:"Status"` // access monitor status
}

//GetBucketResourceGroupResult define resource group for the bucket
type GetBucketResourceGroupResult BucketResourceGroupXml

//PutBucketResourceGroup define the xml of bucket's resource group config
type PutBucketResourceGroup BucketResourceGroupXml

// BucketResourceGroupXml define the information of the bucket's resource group
type BucketResourceGroupXml struct {
XMLName xml.Name `xml:"BucketResourceGroupConfiguration"`
ResourceGroupId string `xml:"ResourceGroupId"` // resource groupId
}
39 changes: 39 additions & 0 deletions oss/type_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1016,3 +1016,42 @@ func (s *OssTypeSuite) TestLifeCycleRulesWithFilter(c *C) {
c.Assert(res1.Rules[0].Filter.Not[2].Tag.Key, Equals, "notkey2")
c.Assert(res1.Rules[0].Filter.Not[2].Tag.Value, Equals, "notvalue2")
}

// Test Bucket Resource Group
func (s *OssTypeSuite) TestBucketResourceGroup(c *C) {
var res GetBucketResourceGroupResult
xmlData := []byte(`<?xml version="1.0" encoding="UTF-8"?>
<BucketResourceGroupConfiguration>
<ResourceGroupId>rg-xxxxxx</ResourceGroupId>
</BucketResourceGroupConfiguration>`)
err := xml.Unmarshal(xmlData, &res)
c.Assert(err, IsNil)
c.Assert(res.ResourceGroupId, Equals, "rg-xxxxxx")

xmlData = []byte(`<?xml version="1.0" encoding="UTF-8"?>
<BucketResourceGroupConfiguration>
<ResourceGroupId></ResourceGroupId>
</BucketResourceGroupConfiguration>`)
err = xml.Unmarshal(xmlData, &res)
c.Assert(err, IsNil)
c.Assert(res.ResourceGroupId, Equals, "")

resource := PutBucketResourceGroup{
ResourceGroupId: "rg-xxxxxx",
}

bs, err := xml.Marshal(resource)
c.Assert(err, IsNil)

c.Assert(string(bs), Equals, "<BucketResourceGroupConfiguration><ResourceGroupId>rg-xxxxxx</ResourceGroupId></BucketResourceGroupConfiguration>")

resource = PutBucketResourceGroup{
ResourceGroupId: "",
}

bs, err = xml.Marshal(resource)
c.Assert(err, IsNil)

c.Assert(string(bs), Equals, "<BucketResourceGroupConfiguration><ResourceGroupId></ResourceGroupId></BucketResourceGroupConfiguration>")

}
1 change: 1 addition & 0 deletions sample.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ var sampleMap = map[string]interface{}{
"BucketDataIndexingSample": sample.BucketMetaQuerySample,
"BucketTaggingSample": sample.BucketTaggingSample,
"BucketAccessMonitorSample": sample.BucketAccessMonitorSample,
"BucketResourceGroupSample": sample.BucketResourceGroupSample,
"ObjectACLSample": sample.ObjectACLSample,
"ObjectMetaSample": sample.ObjectMetaSample,
"ListObjectsSample": sample.ListObjectsSample,
Expand Down
43 changes: 43 additions & 0 deletions sample/bucket_resourcegroup.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package sample

import (
"fmt"

"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

// BucketResourceGroupSample shows how to set and get the bucket's resource group.
func BucketResourceGroupSample() {
// New client
client, err := oss.New(endpoint, accessID, accessKey)
if err != nil {
HandleError(err)
}

// Create the bucket with default parameters
err = client.CreateBucket(bucketName)
if err != nil {
HandleError(err)
}

// Get bucket's resource group.
result, err := client.GetBucketResourceGroup(bucketName)
if err != nil {
HandleError(err)
}

fmt.Printf("Resource Group Id:%s\n", result.ResourceGroupId)

// Set bucket's resource group.
resourceGroup := oss.PutBucketResourceGroup{
ResourceGroupId: "rg-aek27tc********",
}
err = client.PutBucketResourceGroup(bucketName, resourceGroup)
if err != nil {
HandleError(err)
}

fmt.Println("Bucket Resource Group Set Success!")

fmt.Println("BucketResourceGroupSample completed")
}

0 comments on commit c74b4e8

Please sign in to comment.