Skip to content

Commit 88df513

Browse files
authored
Feat/support cos acceleration (#1537)
* update dts mode * feat:support acceleration field for cos bucket * add changelog * use tc client instead of s3 client
1 parent 38fbc49 commit 88df513

File tree

5 files changed

+90
-0
lines changed

5 files changed

+90
-0
lines changed

.changelog/1537.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_cos_bucket: add `acceleration_enable` field
3+
```

tencentcloud/resource_tc_cos_bucket.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,8 +241,10 @@ package tencentcloud
241241
import (
242242
"bytes"
243243
"context"
244+
"encoding/json"
244245
"encoding/xml"
245246
"fmt"
247+
"io/ioutil"
246248
"log"
247249
"reflect"
248250
"time"
@@ -434,6 +436,12 @@ func resourceTencentCloudCosBucket() *schema.Resource {
434436
Default: false,
435437
Description: "Enable bucket versioning.",
436438
},
439+
"acceleration_enable": {
440+
Type: schema.TypeBool,
441+
Optional: true,
442+
Default: false,
443+
Description: "Enable bucket acceleration.",
444+
},
437445
"force_clean": {
438446
Type: schema.TypeBool,
439447
Optional: true,
@@ -905,6 +913,15 @@ func resourceTencentCloudCosBucketRead(d *schema.ResourceData, meta interface{})
905913
return fmt.Errorf("setting versioning_enable error: %v", err)
906914
}
907915

916+
// read the acceleration
917+
acceleration, err := cosService.GetBucketAccleration(ctx, bucket)
918+
if err != nil {
919+
return err
920+
}
921+
if err = d.Set("acceleration_enable", acceleration); err != nil {
922+
return fmt.Errorf("setting acceleration_enable error: %v", err)
923+
}
924+
908925
replicaResult, err := cosService.GetBucketReplication(ctx, bucket)
909926
if err != nil {
910927
return err
@@ -950,6 +967,7 @@ func resourceTencentCloudCosBucketUpdate(d *schema.ResourceData, meta interface{
950967
ctx := context.WithValue(context.TODO(), logIdKey, logId)
951968

952969
client := meta.(*TencentCloudClient).apiV3Conn.UseCosClient()
970+
tcClient := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(d.Id())
953971
cosService := CosService{client: meta.(*TencentCloudClient).apiV3Conn}
954972

955973
d.Partial(true)
@@ -1027,6 +1045,14 @@ func resourceTencentCloudCosBucketUpdate(d *schema.ResourceData, meta interface{
10271045
d.SetPartial("versioning_enable")
10281046
}
10291047

1048+
if d.HasChange("acceleration_enable") {
1049+
err := resourceTencentCloudCosBucketAccelerationUpdate(ctx, tcClient, d)
1050+
if err != nil {
1051+
return err
1052+
}
1053+
d.SetPartial("acceleration_enable")
1054+
}
1055+
10301056
if d.HasChange("replica_role") || d.HasChange("replica_rules") {
10311057
err := resourceTencentCloudCosBucketReplicaUpdate(ctx, cosService, d)
10321058

@@ -1163,6 +1189,33 @@ func resourceTencentCloudCosBucketVersioningUpdate(ctx context.Context, client *
11631189
return nil
11641190
}
11651191

1192+
func resourceTencentCloudCosBucketAccelerationUpdate(ctx context.Context, client *cos.Client, d *schema.ResourceData) error {
1193+
logId := getLogId(ctx)
1194+
1195+
bucket := d.Get("bucket").(string)
1196+
enabled := d.Get("acceleration_enable").(bool)
1197+
status := "Suspended"
1198+
if enabled {
1199+
status = "Enabled"
1200+
}
1201+
1202+
opt := &cos.BucketPutAccelerateOptions{
1203+
Status: status,
1204+
}
1205+
response, err := client.Bucket.PutAccelerate(ctx, opt)
1206+
if err != nil {
1207+
log.Printf("[CRITAL]%s api[%s] fail, status [%s], reason[%s]\n",
1208+
logId, "put bucket acceleration", opt.Status, err.Error())
1209+
return fmt.Errorf("cos put bucket acceleration error: %s, bucket: %s", err.Error(), bucket)
1210+
}
1211+
rb, _ := ioutil.ReadAll(response.Body)
1212+
body, _ := json.Marshal(rb)
1213+
log.Printf("[DEBUG]%s api[%s] success, status [%s], response body [%s]\n",
1214+
logId, "put bucket acceleration", opt.Status, string(body))
1215+
1216+
return err
1217+
}
1218+
11661219
func resourceTencentCloudCosBucketReplicaUpdate(ctx context.Context, service CosService, d *schema.ResourceData) error {
11671220
bucket := d.Get("bucket").(string)
11681221
oldRole, newRole := d.GetChange("replica_role")

tencentcloud/resource_tc_cos_bucket_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ func TestAccTencentCloudCosBucketResource_basic(t *testing.T) {
8787
testAccCheckCosBucketExists("tencentcloud_cos_bucket.bucket_basic"),
8888
resource.TestCheckResourceAttr("tencentcloud_cos_bucket.bucket_basic", "encryption_algorithm", "AES256"),
8989
resource.TestCheckResourceAttr("tencentcloud_cos_bucket.bucket_basic", "versioning_enable", "true"),
90+
resource.TestCheckResourceAttr("tencentcloud_cos_bucket.bucket_basic", "acceleration_enable", "true"),
9091
resource.TestCheckResourceAttr("tencentcloud_cos_bucket.bucket_basic", "force_clean", "true"),
9192
resource.TestCheckResourceAttrSet("tencentcloud_cos_bucket.bucket_basic", "cos_bucket_url"),
9293
),
@@ -559,6 +560,7 @@ resource "tencentcloud_cos_bucket" "bucket_basic" {
559560
acl = "private"
560561
encryption_algorithm = "AES256"
561562
versioning_enable = true
563+
acceleration_enable = true
562564
force_clean = true
563565
}
564566
`, userInfoData)

tencentcloud/service_tencentcloud_cos.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -737,6 +737,37 @@ func (me *CosService) GetBucketVersioning(ctx context.Context, bucket string) (v
737737
return
738738
}
739739

740+
func (me *CosService) GetBucketAccleration(ctx context.Context, bucket string) (accelerationEnable bool, errRet error) {
741+
logId := getLogId(ctx)
742+
743+
request := s3.GetBucketAccelerateConfigurationInput{
744+
Bucket: aws.String(bucket),
745+
}
746+
ratelimit.Check("GetBucketAccelerateConfiguration")
747+
response, err := me.client.UseCosClient().GetBucketAccelerateConfiguration(&request)
748+
if err != nil {
749+
awsError, ok := err.(awserr.Error)
750+
if ok && awsError.Code() == "NoSuchAccelerateConfiguration" {
751+
return
752+
}
753+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
754+
logId, "get bucket acceleration", request.String(), err.Error())
755+
errRet = fmt.Errorf("cos get bucket acceleration error: %s, bucket: %s", err.Error(), bucket)
756+
return
757+
}
758+
759+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
760+
logId, "get bucket acceleration", request.String(), response.String())
761+
762+
if response.Status == nil || *response.Status == "Suspended" {
763+
accelerationEnable = false
764+
} else if *response.Status == "Enabled" {
765+
accelerationEnable = true
766+
}
767+
768+
return
769+
}
770+
740771
func (me *CosService) GetBucketLogStatus(ctx context.Context, bucket string) (logEnable bool, logTargetBucket string, logPrefix string, errRet error) {
741772
logId := getLogId(ctx)
742773

website/docs/r/cos_bucket.html.markdown

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,7 @@ resource "tencentcloud_cos_bucket" "mycos" {
242242
The following arguments are supported:
243243

244244
* `bucket` - (Required, String, ForceNew) The name of a bucket to be created. Bucket format should be [custom name]-[appid], for example `mycos-1258798060`.
245+
* `acceleration_enable` - (Optional, Bool) Enable bucket acceleration.
245246
* `acl_body` - (Optional, String) ACL XML body for multiple grant info. NOTE: this argument will overwrite `acl`. Check https://intl.cloud.tencent.com/document/product/436/7737 for more detail.
246247
* `acl` - (Optional, String) The canned ACL to apply. Valid values: private, public-read, and public-read-write. Defaults to private.
247248
* `cors_rules` - (Optional, List) A rule of Cross-Origin Resource Sharing (documented below).

0 commit comments

Comments
 (0)