Skip to content

Commit 2f534f2

Browse files
author
taowei.wtw
committed
add bucket tagging
1 parent e544ea6 commit 2f534f2

File tree

5 files changed

+136
-1
lines changed

5 files changed

+136
-1
lines changed

oss/client.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -729,6 +729,72 @@ func (client Client) DeleteBucketEncryption(bucketName string) error {
729729
return checkRespCode(resp.StatusCode, []int{http.StatusNoContent})
730730
}
731731

732+
//
733+
// SetBucketTagging add tagging to bucket
734+
// bucketName name of bucket
735+
// tagging tagging to be added
736+
// error nil if success, otherwise error
737+
func (client Client) SetBucketTagging(bucketName string, tagging Tagging) error {
738+
var err error
739+
var bs []byte
740+
bs, err = xml.Marshal(tagging)
741+
742+
if err != nil {
743+
return err
744+
}
745+
746+
buffer := new(bytes.Buffer)
747+
buffer.Write(bs)
748+
749+
contentType := http.DetectContentType(buffer.Bytes())
750+
headers := map[string]string{}
751+
headers[HTTPHeaderContentType] = contentType
752+
753+
params := map[string]interface{}{}
754+
params["tagging"] = nil
755+
resp, err := client.do("PUT", bucketName, params, headers, buffer)
756+
if err != nil {
757+
return err
758+
}
759+
defer resp.Body.Close()
760+
return checkRespCode(resp.StatusCode, []int{http.StatusOK})
761+
}
762+
763+
// GetBucketTagging get tagging of the bucket
764+
// bucketName name of bucket
765+
// error nil if success, otherwise error
766+
func (client Client) GetBucketTagging(bucketName string) (GetBucketTaggingResult, error) {
767+
var out GetBucketTaggingResult
768+
params := map[string]interface{}{}
769+
params["tagging"] = nil
770+
resp, err := client.do("GET", bucketName, params, nil, nil)
771+
772+
if err != nil {
773+
return out, err
774+
}
775+
defer resp.Body.Close()
776+
777+
err = xmlUnmarshal(resp.Body, &out)
778+
return out, err
779+
}
780+
781+
//
782+
// DeleteBucketTagging delete bucket tagging
783+
// bucketName name of bucket
784+
// error nil if success, otherwise error
785+
//
786+
func (client Client) DeleteBucketTagging(bucketName string) error {
787+
params := map[string]interface{}{}
788+
params["tagging"] = nil
789+
resp, err := client.do("DELETE", bucketName, params, nil, nil)
790+
791+
if err != nil {
792+
return err
793+
}
794+
defer resp.Body.Close()
795+
return checkRespCode(resp.StatusCode, []int{http.StatusNoContent})
796+
}
797+
732798
// GetBucketStat get bucket stat
733799
// bucketName the bucket name.
734800
// error it's nil if no error, otherwise it's an error object.

oss/client_test.go

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1991,6 +1991,64 @@ func (s *OssClientSuite) TestBucketEncyptionPutObjectError(c *C) {
19911991
c.Assert(err, IsNil)
19921992
}
19931993

1994+
func (s *OssClientSuite) TestBucketTaggingOperation(c *C) {
1995+
client, err := New(endpoint, accessID, accessKey)
1996+
c.Assert(err, IsNil)
1997+
1998+
bucketName := bucketNamePrefix + randLowStr(5)
1999+
err = client.CreateBucket(bucketName)
2000+
c.Assert(err, IsNil)
2001+
2002+
// Bucket Tagging
2003+
var tagging Tagging
2004+
tagging.Tags = []Tag{Tag{Key: "testkey2", Value: "testvalue2"}}
2005+
err = client.SetBucketTagging(bucketName, tagging)
2006+
c.Assert(err, IsNil)
2007+
2008+
getResult, err := client.GetBucketTagging(bucketName)
2009+
c.Assert(err, IsNil)
2010+
c.Assert(getResult.Tags[0].Key, Equals, tagging.Tags[0].Key)
2011+
c.Assert(getResult.Tags[0].Value, Equals, tagging.Tags[0].Value)
2012+
2013+
// delete BucketTagging
2014+
err = client.DeleteBucketTagging(bucketName)
2015+
c.Assert(err, IsNil)
2016+
getResult, err = client.GetBucketTagging(bucketName)
2017+
c.Assert(err, IsNil)
2018+
c.Assert(len(getResult.Tags), Equals, 0)
2019+
2020+
err = client.DeleteBucket(bucketName)
2021+
c.Assert(err, IsNil)
2022+
}
2023+
2024+
func (s *OssClientSuite) TestListBucketsTagging(c *C) {
2025+
client, err := New(endpoint, accessID, accessKey)
2026+
c.Assert(err, IsNil)
2027+
2028+
bucketName1 := bucketNamePrefix + randLowStr(5)
2029+
err = client.CreateBucket(bucketName1)
2030+
c.Assert(err, IsNil)
2031+
2032+
bucketName2 := bucketNamePrefix + randLowStr(5)
2033+
err = client.CreateBucket(bucketName2)
2034+
c.Assert(err, IsNil)
2035+
2036+
// Bucket Tagging
2037+
var tagging Tagging
2038+
tagging.Tags = []Tag{Tag{Key: "testkey", Value: "testvalue"}}
2039+
err = client.SetBucketTagging(bucketName1, tagging)
2040+
c.Assert(err, IsNil)
2041+
2042+
// list bucket
2043+
listResult, err := client.ListBuckets(TagKey("testkey"))
2044+
c.Assert(err, IsNil)
2045+
c.Assert(len(listResult.Buckets), Equals, 1)
2046+
c.Assert(listResult.Buckets[0].Name, Equals, bucketName1)
2047+
2048+
client.DeleteBucket(bucketName1)
2049+
client.DeleteBucket(bucketName2)
2050+
}
2051+
19942052
func (s *OssClientSuite) TestGetBucketStat(c *C) {
19952053
client, err := New(endpoint, accessID, accessKey)
19962054
c.Assert(err, IsNil)

oss/const.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,5 +163,5 @@ const (
163163

164164
CheckpointFileSuffix = ".cp" // Checkpoint file suffix
165165

166-
Version = "v1.9.7" // Go SDK version
166+
Version = "v1.9.8" // Go SDK version
167167
)

oss/option.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,16 @@ func KeyMarker(value string) Option {
259259
return addParam("key-marker", value)
260260
}
261261

262+
// TagKey is an option to set tag key parameter
263+
func TagKey(value string) Option {
264+
return addParam("tag-key", value)
265+
}
266+
267+
// TagValue is an option to set tag value parameter
268+
func TagValue(value string) Option {
269+
return addParam("tag-value", value)
270+
}
271+
262272
// UploadIDMarker is an option to set upload-id-marker parameter
263273
func UploadIDMarker(value string) Option {
264274
return addParam("upload-id-marker", value)

oss/type.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -631,6 +631,7 @@ type SSEDefaultRule struct {
631631
}
632632

633633
type GetBucketEncryptionResult ServerEncryptionRule
634+
type GetBucketTaggingResult Tagging
634635

635636
type BucketStat struct {
636637
XMLName xml.Name `xml:"BucketStat"`

0 commit comments

Comments
 (0)