Skip to content

Commit f92ddbf

Browse files
tongyimingmikatong
andauthored
add cos resource (#1907)
* add cos resource * update * add changelog * update * update --------- Co-authored-by: mikatong <mikatong@tencent.com>
1 parent 9f6c433 commit f92ddbf

13 files changed

+905
-42
lines changed

.changelog/1907.txt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_cos_bucket: support `enable_intelligent_tiering` and format client called
3+
```
4+
5+
```release-note:enhancement
6+
resource/tencentcloud_cos_bucket_domain_certificate_attachment: format client called
7+
```
8+
9+
```release-note:enhancement
10+
resource/tencentcloud_cos_bucket_object: format client called
11+
```
12+
13+
```release-note:new-resource
14+
tencentcloud_cos_bucket_inventory
15+
```

tencentcloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,7 @@ Cloud Object Storage(COS)
348348
tencentcloud_cos_bucket_referer
349349
tencentcloud_cos_bucket_version
350350
tencentcloud_cos_bucket_domain_certificate_attachment
351+
tencentcloud_cos_bucket_inventory
351352
352353
Cloud Virtual Machine(CVM)
353354
Data Source
@@ -2552,6 +2553,7 @@ func Provider() *schema.Provider {
25522553
"tencentcloud_tdmq_subscription_attachment": resourceTencentCloudTdmqSubscriptionAttachment(),
25532554
"tencentcloud_cos_bucket_policy": resourceTencentCloudCosBucketPolicy(),
25542555
"tencentcloud_cos_bucket_domain_certificate_attachment": resourceTencentCloudCosBucketDomainCertificateAttachment(),
2556+
"tencentcloud_cos_bucket_inventory": resourceTencentCloudCosBucketInventory(),
25552557
"tencentcloud_address_template": resourceTencentCloudAddressTemplate(),
25562558
"tencentcloud_address_template_group": resourceTencentCloudAddressTemplateGroup(),
25572559
"tencentcloud_protocol_template": resourceTencentCloudProtocolTemplate(),

tencentcloud/resource_tc_cos_bucket.go

Lines changed: 92 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -731,6 +731,24 @@ func resourceTencentCloudCosBucket() *schema.Resource {
731731
ForceNew: true,
732732
Description: "Indicates whether to create a bucket of multi available zone. NOTE: If set to true, the versioning must enable.",
733733
},
734+
"enable_intelligent_tiering": {
735+
Type: schema.TypeBool,
736+
Optional: true,
737+
Computed: true,
738+
Description: "Enable intelligent tiering. NOTE: When intelligent tiering configuration is enabled, it cannot be turned off or modified.",
739+
},
740+
"intelligent_tiering_days": {
741+
Type: schema.TypeInt,
742+
Optional: true,
743+
Computed: true,
744+
Description: "Specifies the limit of days for standard-tier data to low-frequency data in an intelligent tiered storage configuration, with optional days of 30, 60, 90. Default value is 30.",
745+
},
746+
"intelligent_tiering_request_frequent": {
747+
Type: schema.TypeInt,
748+
Optional: true,
749+
Computed: true,
750+
Description: "Specify the access limit for converting standard layer data into low-frequency layer data in the configuration. The default value is once, which can be used in combination with the number of days to achieve the conversion effect. For example, if the parameter is set to 1 and the number of access days is 30, it means that objects with less than one visit in 30 consecutive days will be reduced from the standard layer to the low frequency layer.",
751+
},
734752
//computed
735753
"cos_bucket_url": {
736754
Type: schema.TypeString,
@@ -957,6 +975,22 @@ func resourceTencentCloudCosBucketRead(d *schema.ResourceData, meta interface{})
957975
_ = d.Set("tags", tags)
958976
}
959977

978+
//read intelligent tiering
979+
result, err := cosService.BucketGetIntelligentTiering(ctx, bucket)
980+
if err != nil {
981+
return fmt.Errorf("get intelligent tiering failed: %v", err)
982+
}
983+
if result != nil {
984+
if result.Status == "Enabled" {
985+
_ = d.Set("enable_intelligent_tiering", true)
986+
} else {
987+
_ = d.Set("enable_intelligent_tiering", false)
988+
}
989+
}
990+
if result != nil && result.Transition != nil {
991+
_ = d.Set("intelligent_tiering_days", result.Transition.Days)
992+
_ = d.Set("intelligent_tiering_request_frequent", result.Transition.RequestFrequent)
993+
}
960994
return nil
961995
}
962996

@@ -966,14 +1000,41 @@ func resourceTencentCloudCosBucketUpdate(d *schema.ResourceData, meta interface{
9661000
logId := getLogId(contextNil)
9671001
ctx := context.WithValue(context.TODO(), logIdKey, logId)
9681002

969-
client := meta.(*TencentCloudClient).apiV3Conn.UseCosClient()
970-
tcClient := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(d.Id())
9711003
cosService := CosService{client: meta.(*TencentCloudClient).apiV3Conn}
9721004

9731005
d.Partial(true)
9741006

1007+
if d.HasChange("enable_intelligent_tiering") || d.HasChange("intelligent_tiering_days") || d.HasChange("intelligent_tiering_request_frequent") {
1008+
old, new := d.GetChange("enable_intelligent_tiering")
1009+
if old.(bool) && !new.(bool) {
1010+
return fmt.Errorf("enable_intelligent_tiering, intelligent_tiering_days and intelligent_tiering_request_frequent not support change!")
1011+
}
1012+
var transition cos.BucketIntelligentTieringTransition
1013+
if v, ok := d.GetOk("intelligent_tiering_days"); ok {
1014+
transition.Days = v.(int)
1015+
} else {
1016+
transition.Days = 30
1017+
}
1018+
if v, ok := d.GetOk("intelligent_tiering_request_frequent"); ok {
1019+
transition.RequestFrequent = v.(int)
1020+
} else {
1021+
transition.RequestFrequent = 1
1022+
}
1023+
1024+
if v, ok := d.GetOk("enable_intelligent_tiering"); ok && v.(bool) {
1025+
opt := &cos.BucketPutIntelligentTieringOptions{
1026+
Status: "Enabled",
1027+
Transition: &transition,
1028+
}
1029+
err := cosService.BucketPutIntelligentTiering(ctx, d.Id(), opt)
1030+
if err != nil {
1031+
return err
1032+
}
1033+
}
1034+
}
1035+
9751036
if d.HasChange("acl") {
976-
err := resourceTencentCloudCosBucketAclUpdate(ctx, client, d)
1037+
err := resourceTencentCloudCosBucketAclUpdate(ctx, meta, d)
9771038
if err != nil {
9781039
return err
9791040
}
@@ -989,7 +1050,7 @@ func resourceTencentCloudCosBucketUpdate(d *schema.ResourceData, meta interface{
9891050
}
9901051

9911052
if d.HasChange("cors_rules") {
992-
err := resourceTencentCloudCosBucketCorsUpdate(ctx, client, d)
1053+
err := resourceTencentCloudCosBucketCorsUpdate(ctx, meta, d)
9931054
if err != nil {
9941055
return err
9951056
}
@@ -1014,39 +1075,39 @@ func resourceTencentCloudCosBucketUpdate(d *schema.ResourceData, meta interface{
10141075
}
10151076

10161077
if d.HasChange("lifecycle_rules") {
1017-
err := resourceTencentCloudCosBucketLifecycleUpdate(ctx, client, d)
1078+
err := resourceTencentCloudCosBucketLifecycleUpdate(ctx, meta, d)
10181079
if err != nil {
10191080
return err
10201081
}
10211082

10221083
}
10231084

10241085
if d.HasChange("website") {
1025-
err := resourceTencentCloudCosBucketWebsiteUpdate(ctx, client, d)
1086+
err := resourceTencentCloudCosBucketWebsiteUpdate(ctx, meta, d)
10261087
if err != nil {
10271088
return err
10281089
}
10291090

10301091
}
10311092

10321093
if d.HasChange("encryption_algorithm") {
1033-
err := resourceTencentCloudCosBucketEncryptionUpdate(ctx, client, d)
1094+
err := resourceTencentCloudCosBucketEncryptionUpdate(ctx, meta, d)
10341095
if err != nil {
10351096
return err
10361097
}
10371098

10381099
}
10391100

10401101
if d.HasChange("versioning_enable") {
1041-
err := resourceTencentCloudCosBucketVersioningUpdate(ctx, client, d)
1102+
err := resourceTencentCloudCosBucketVersioningUpdate(ctx, meta, d)
10421103
if err != nil {
10431104
return err
10441105
}
10451106

10461107
}
10471108

10481109
if d.HasChange("acceleration_enable") {
1049-
err := resourceTencentCloudCosBucketAccelerationUpdate(ctx, tcClient, d)
1110+
err := resourceTencentCloudCosBucketAccelerationUpdate(ctx, meta, d)
10501111
if err != nil {
10511112
return err
10521113
}
@@ -1072,7 +1133,7 @@ func resourceTencentCloudCosBucketUpdate(d *schema.ResourceData, meta interface{
10721133
}
10731134

10741135
if d.HasChange("log_enable") || d.HasChange("log_target_bucket") || d.HasChange("log_prefix") {
1075-
err := resourceTencentCloudCosBucketLogStatusUpdate(ctx, client, d)
1136+
err := resourceTencentCloudCosBucketLogStatusUpdate(ctx, meta, d)
10761137
if err != nil {
10771138
return err
10781139
}
@@ -1112,7 +1173,7 @@ func resourceTencentCloudCosBucketDelete(d *schema.ResourceData, meta interface{
11121173
return nil
11131174
}
11141175

1115-
func resourceTencentCloudCosBucketEncryptionUpdate(ctx context.Context, client *s3.S3, d *schema.ResourceData) error {
1176+
func resourceTencentCloudCosBucketEncryptionUpdate(ctx context.Context, meta interface{}, d *schema.ResourceData) error {
11161177
logId := getLogId(ctx)
11171178

11181179
bucket := d.Get("bucket").(string)
@@ -1121,7 +1182,7 @@ func resourceTencentCloudCosBucketEncryptionUpdate(ctx context.Context, client *
11211182
request := s3.DeleteBucketEncryptionInput{
11221183
Bucket: aws.String(bucket),
11231184
}
1124-
response, err := client.DeleteBucketEncryption(&request)
1185+
response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().DeleteBucketEncryption(&request)
11251186
if err != nil {
11261187
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
11271188
logId, "delete bucket encryption", request.String(), err.Error())
@@ -1147,7 +1208,7 @@ func resourceTencentCloudCosBucketEncryptionUpdate(ctx context.Context, client *
11471208
rules = append(rules, rule)
11481209
request.ServerSideEncryptionConfiguration.Rules = rules
11491210

1150-
response, err := client.PutBucketEncryption(&request)
1211+
response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().PutBucketEncryption(&request)
11511212
if err != nil {
11521213
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
11531214
logId, "put bucket encryption", request.String(), err.Error())
@@ -1159,7 +1220,7 @@ func resourceTencentCloudCosBucketEncryptionUpdate(ctx context.Context, client *
11591220
return nil
11601221
}
11611222

1162-
func resourceTencentCloudCosBucketVersioningUpdate(ctx context.Context, client *s3.S3, d *schema.ResourceData) error {
1223+
func resourceTencentCloudCosBucketVersioningUpdate(ctx context.Context, meta interface{}, d *schema.ResourceData) error {
11631224
logId := getLogId(ctx)
11641225

11651226
bucket := d.Get("bucket").(string)
@@ -1174,7 +1235,7 @@ func resourceTencentCloudCosBucketVersioningUpdate(ctx context.Context, client *
11741235
Status: aws.String(status),
11751236
},
11761237
}
1177-
response, err := client.PutBucketVersioning(&request)
1238+
response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().PutBucketVersioning(&request)
11781239
if err != nil {
11791240
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
11801241
logId, "put bucket encryption", request.String(), err.Error())
@@ -1186,7 +1247,7 @@ func resourceTencentCloudCosBucketVersioningUpdate(ctx context.Context, client *
11861247
return nil
11871248
}
11881249

1189-
func resourceTencentCloudCosBucketAccelerationUpdate(ctx context.Context, client *cos.Client, d *schema.ResourceData) error {
1250+
func resourceTencentCloudCosBucketAccelerationUpdate(ctx context.Context, meta interface{}, d *schema.ResourceData) error {
11901251
logId := getLogId(ctx)
11911252

11921253
bucket := d.Get("bucket").(string)
@@ -1199,7 +1260,7 @@ func resourceTencentCloudCosBucketAccelerationUpdate(ctx context.Context, client
11991260
opt := &cos.BucketPutAccelerateOptions{
12001261
Status: status,
12011262
}
1202-
response, err := client.Bucket.PutAccelerate(ctx, opt)
1263+
response, err := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(d.Id()).Bucket.PutAccelerate(ctx, opt)
12031264
if err != nil {
12041265
log.Printf("[CRITAL]%s api[%s] fail, status [%s], reason[%s]\n",
12051266
logId, "put bucket acceleration", opt.Status, err.Error())
@@ -1244,7 +1305,7 @@ func resourceTencentCloudCosBucketReplicaUpdate(ctx context.Context, service Cos
12441305
return nil
12451306
}
12461307

1247-
func resourceTencentCloudCosBucketAclUpdate(ctx context.Context, client *s3.S3, d *schema.ResourceData) error {
1308+
func resourceTencentCloudCosBucketAclUpdate(ctx context.Context, meta interface{}, d *schema.ResourceData) error {
12481309
logId := getLogId(ctx)
12491310

12501311
bucket := d.Get("bucket").(string)
@@ -1253,7 +1314,7 @@ func resourceTencentCloudCosBucketAclUpdate(ctx context.Context, client *s3.S3,
12531314
Bucket: aws.String(bucket),
12541315
ACL: aws.String(acl),
12551316
}
1256-
response, err := client.PutBucketAcl(&request)
1317+
response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().PutBucketAcl(&request)
12571318
if err != nil {
12581319
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
12591320
logId, "put bucket acl", request.String(), err.Error())
@@ -1265,7 +1326,7 @@ func resourceTencentCloudCosBucketAclUpdate(ctx context.Context, client *s3.S3,
12651326
return nil
12661327
}
12671328

1268-
func resourceTencentCloudCosBucketCorsUpdate(ctx context.Context, client *s3.S3, d *schema.ResourceData) error {
1329+
func resourceTencentCloudCosBucketCorsUpdate(ctx context.Context, meta interface{}, d *schema.ResourceData) error {
12691330
logId := getLogId(ctx)
12701331

12711332
bucket := d.Get("bucket").(string)
@@ -1275,7 +1336,7 @@ func resourceTencentCloudCosBucketCorsUpdate(ctx context.Context, client *s3.S3,
12751336
request := s3.DeleteBucketCorsInput{
12761337
Bucket: aws.String(bucket),
12771338
}
1278-
response, err := client.DeleteBucketCors(&request)
1339+
response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().DeleteBucketCors(&request)
12791340
if err != nil {
12801341
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
12811342
logId, "delete bucket cors", request.String(), err.Error())
@@ -1318,7 +1379,7 @@ func resourceTencentCloudCosBucketCorsUpdate(ctx context.Context, client *s3.S3,
13181379
CORSRules: rules,
13191380
},
13201381
}
1321-
response, err := client.PutBucketCors(&request)
1382+
response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().PutBucketCors(&request)
13221383
if err != nil {
13231384
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
13241385
logId, "put bucket cors", request.String(), err.Error())
@@ -1330,7 +1391,7 @@ func resourceTencentCloudCosBucketCorsUpdate(ctx context.Context, client *s3.S3,
13301391
return nil
13311392
}
13321393

1333-
func resourceTencentCloudCosBucketLifecycleUpdate(ctx context.Context, client *s3.S3, d *schema.ResourceData) error {
1394+
func resourceTencentCloudCosBucketLifecycleUpdate(ctx context.Context, meta interface{}, d *schema.ResourceData) error {
13341395
logId := getLogId(ctx)
13351396

13361397
bucket := d.Get("bucket").(string)
@@ -1339,7 +1400,7 @@ func resourceTencentCloudCosBucketLifecycleUpdate(ctx context.Context, client *s
13391400
request := s3.DeleteBucketLifecycleInput{
13401401
Bucket: aws.String(bucket),
13411402
}
1342-
response, err := client.DeleteBucketLifecycle(&request)
1403+
response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().DeleteBucketLifecycle(&request)
13431404
if err != nil {
13441405
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
13451406
logId, "delete bucket lifecycle", request.String(), err.Error())
@@ -1448,7 +1509,7 @@ func resourceTencentCloudCosBucketLifecycleUpdate(ctx context.Context, client *s
14481509
Rules: rules,
14491510
},
14501511
}
1451-
response, err := client.PutBucketLifecycleConfiguration(&request)
1512+
response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().PutBucketLifecycleConfiguration(&request)
14521513
if err != nil {
14531514
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
14541515
logId, "put bucket lifecycle", request.String(), err.Error())
@@ -1461,7 +1522,7 @@ func resourceTencentCloudCosBucketLifecycleUpdate(ctx context.Context, client *s
14611522
return nil
14621523
}
14631524

1464-
func resourceTencentCloudCosBucketWebsiteUpdate(ctx context.Context, client *s3.S3, d *schema.ResourceData) error {
1525+
func resourceTencentCloudCosBucketWebsiteUpdate(ctx context.Context, meta interface{}, d *schema.ResourceData) error {
14651526
logId := getLogId(ctx)
14661527

14671528
bucket := d.Get("bucket").(string)
@@ -1471,7 +1532,7 @@ func resourceTencentCloudCosBucketWebsiteUpdate(ctx context.Context, client *s3.
14711532
request := s3.DeleteBucketWebsiteInput{
14721533
Bucket: aws.String(bucket),
14731534
}
1474-
response, err := client.DeleteBucketWebsite(&request)
1535+
response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().DeleteBucketWebsite(&request)
14751536
if err != nil {
14761537
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
14771538
logId, "delete bucket website", request.String(), err.Error())
@@ -1504,7 +1565,7 @@ func resourceTencentCloudCosBucketWebsiteUpdate(ctx context.Context, client *s3.
15041565
},
15051566
},
15061567
}
1507-
response, err := client.PutBucketWebsite(&request)
1568+
response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().PutBucketWebsite(&request)
15081569
if err != nil {
15091570
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
15101571
logId, "put bucket website", request.String(), err.Error())
@@ -1517,7 +1578,7 @@ func resourceTencentCloudCosBucketWebsiteUpdate(ctx context.Context, client *s3.
15171578
return nil
15181579
}
15191580

1520-
func resourceTencentCloudCosBucketLogStatusUpdate(ctx context.Context, client *s3.S3, d *schema.ResourceData) error {
1581+
func resourceTencentCloudCosBucketLogStatusUpdate(ctx context.Context, meta interface{}, d *schema.ResourceData) error {
15211582
logId := getLogId(ctx)
15221583

15231584
bucket := d.Id()
@@ -1544,7 +1605,7 @@ func resourceTencentCloudCosBucketLogStatusUpdate(ctx context.Context, client *s
15441605
},
15451606
}
15461607

1547-
resp, err := client.PutBucketLogging(request)
1608+
resp, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().PutBucketLogging(request)
15481609
if err != nil {
15491610
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
15501611
logId, "cos enable log error", request.String(), err.Error())
@@ -1566,7 +1627,7 @@ func resourceTencentCloudCosBucketLogStatusUpdate(ctx context.Context, client *s
15661627
BucketLoggingStatus: &s3.BucketLoggingStatus{},
15671628
}
15681629

1569-
resp, err := client.PutBucketLogging(request)
1630+
resp, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().PutBucketLogging(request)
15701631
if err != nil {
15711632
return fmt.Errorf("cos disable log error: %s, bucket: %s", err.Error(), bucket)
15721633
}

tencentcloud/resource_tc_cos_bucket_domain_certificate_attachment.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,6 @@ func resourceTencentCloudCosBucketDomainCertificateAttachmentCreate(d *schema.Re
123123
return errors.New("get bucket failed!")
124124
}
125125

126-
tcCosClient := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(bucket)
127-
128126
option := cos.BucketPutDomainCertificateOptions{}
129127
if dcMap, ok := helper.InterfacesHeadMap(d, "domain_certificate"); ok {
130128
if certMap, ok := helper.InterfaceToMap(dcMap, "certificate"); ok {
@@ -151,7 +149,7 @@ func resourceTencentCloudCosBucketDomainCertificateAttachmentCreate(d *schema.Re
151149
}
152150

153151
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
154-
result, e := tcCosClient.Bucket.PutDomainCertificate(ctx, &option)
152+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(bucket).Bucket.PutDomainCertificate(ctx, &option)
155153
if e != nil {
156154
return retryError(e)
157155
} else {

0 commit comments

Comments
 (0)