Skip to content

Commit 55fe07e

Browse files
committed
add
1 parent 5a41484 commit 55fe07e

File tree

3 files changed

+143
-84
lines changed

3 files changed

+143
-84
lines changed

tencentcloud/services/cos/resource_tc_cos_bucket.go

Lines changed: 107 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,12 @@ func ResourceTencentCloudCosBucket() *schema.Resource {
579579
ForceNew: true,
580580
Description: "Indicates whether to create a bucket of multi available zone.",
581581
},
582+
"chdfs_ofs": {
583+
Type: schema.TypeBool,
584+
Optional: true,
585+
ForceNew: true,
586+
Description: "Indicates whether to create a bucket of metadata acceleration.",
587+
},
582588
"enable_intelligent_tiering": {
583589
Type: schema.TypeBool,
584590
Optional: true,
@@ -683,10 +689,17 @@ func resourceTencentCloudCosBucketRead(d *schema.ResourceData, meta interface{})
683689
}
684690
}
685691

686-
if header != nil && len(header["X-Cos-Bucket-Az-Type"]) > 0 && header["X-Cos-Bucket-Az-Type"][0] == "MAZ" {
687-
_ = d.Set("multi_az", true)
692+
if header != nil {
693+
if len(header["X-Cos-Bucket-Az-Type"]) > 0 && header["X-Cos-Bucket-Az-Type"][0] == "MAZ" {
694+
_ = d.Set("multi_az", true)
695+
}
696+
697+
if len(header["X-Cos-Bucket-Arch"]) > 0 && header["X-Cos-Bucket-Arch"][0] == "OFS" {
698+
_ = d.Set("chdfs_ofs", true)
699+
}
688700
}
689701

702+
ofs := d.Get("chdfs_ofs").(bool)
690703
cosDomain := meta.(tccommon.ProviderMeta).GetAPIV3Conn().CosDomain
691704
var cosBucketUrl string
692705
if cdcId == "" && cosDomain == "" {
@@ -705,116 +718,118 @@ func resourceTencentCloudCosBucketRead(d *schema.ResourceData, meta interface{})
705718
_ = d.Set("bucket", d.Id())
706719
}
707720

708-
// acl
709-
aclResult, err := cosService.GetBucketACL(ctx, bucket, cdcId)
721+
if !ofs {
722+
// acl
723+
aclResult, err := cosService.GetBucketACL(ctx, bucket, cdcId)
710724

711-
if err != nil {
712-
return err
713-
}
725+
if err != nil {
726+
return err
727+
}
714728

715-
aclBody, err := xml.Marshal(aclResult)
716-
if err != nil {
717-
return err
718-
}
729+
aclBody, err := xml.Marshal(aclResult)
730+
if err != nil {
731+
return err
732+
}
719733

720-
_ = d.Set("acl_body", string(aclBody))
734+
_ = d.Set("acl_body", string(aclBody))
721735

722-
acl := GetBucketPublicACL(aclResult)
736+
acl := GetBucketPublicACL(aclResult)
723737

724-
_ = d.Set("acl", acl)
738+
_ = d.Set("acl", acl)
725739

726-
// read the cors
727-
corsRules, err := cosService.GetBucketCors(ctx, bucket, cdcId)
728-
if err != nil {
729-
return err
730-
}
731-
if err = d.Set("cors_rules", corsRules); err != nil {
732-
return fmt.Errorf("setting cors_rules error: %v", err)
733-
}
740+
if cdcId == "" && cosDomain == "" {
741+
originPullRules, err := cosService.GetBucketPullOrigin(ctx, bucket)
742+
if err != nil {
743+
return err
744+
}
734745

735-
if cdcId == "" && cosDomain == "" {
736-
originPullRules, err := cosService.GetBucketPullOrigin(ctx, bucket)
746+
if err = d.Set("origin_pull_rules", originPullRules); err != nil {
747+
return fmt.Errorf("setting origin_pull_rules error: %v", err)
748+
}
749+
750+
originDomainRules, err := cosService.GetBucketOriginDomain(ctx, bucket)
751+
if err != nil {
752+
return err
753+
}
754+
755+
if err = d.Set("origin_domain_rules", originDomainRules); err != nil {
756+
return fmt.Errorf("setting origin_domain_rules error: %v", err)
757+
}
758+
759+
replicaResult, err := cosService.GetBucketReplication(ctx, bucket, cdcId)
760+
if err != nil {
761+
return err
762+
}
763+
764+
if replicaResult != nil {
765+
err := setBucketReplication(d, *replicaResult)
766+
if err != nil {
767+
return err
768+
}
769+
}
770+
}
771+
772+
// read the website
773+
website, err := cosService.GetBucketWebsite(ctx, bucket, cdcId)
737774
if err != nil {
738775
return err
739776
}
740-
741-
if err = d.Set("origin_pull_rules", originPullRules); err != nil {
742-
return fmt.Errorf("setting origin_pull_rules error: %v", err)
777+
if len(website) > 0 && cosDomain == "" {
778+
// {bucket}.cos-website.{region}.myqcloud.com
779+
endPointUrl := fmt.Sprintf("%s.cos-website.%s.myqcloud.com", d.Id(), meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region)
780+
website[0]["endpoint"] = endPointUrl
781+
}
782+
if err = d.Set("website", website); err != nil {
783+
return fmt.Errorf("setting website error: %v", err)
743784
}
744785

745-
originDomainRules, err := cosService.GetBucketOriginDomain(ctx, bucket)
786+
// read the encryption algorithm
787+
encryption, kmsId, err := cosService.GetBucketEncryption(ctx, bucket, cdcId)
746788
if err != nil {
747789
return err
748790
}
749-
750-
if err = d.Set("origin_domain_rules", originDomainRules); err != nil {
751-
return fmt.Errorf("setting origin_domain_rules error: %v", err)
791+
if err = d.Set("encryption_algorithm", encryption); err != nil {
792+
return fmt.Errorf("setting encryption error: %v", err)
793+
}
794+
if err = d.Set("kms_id", kmsId); err != nil {
795+
return fmt.Errorf("setting kms_id error: %v", err)
752796
}
753797

754-
replicaResult, err := cosService.GetBucketReplication(ctx, bucket, cdcId)
798+
// read the versioning
799+
versioning, err := cosService.GetBucketVersioning(ctx, bucket, cdcId)
755800
if err != nil {
756801
return err
757802
}
758-
759-
if replicaResult != nil {
760-
err := setBucketReplication(d, *replicaResult)
761-
if err != nil {
762-
return err
763-
}
803+
if err = d.Set("versioning_enable", versioning); err != nil {
804+
return fmt.Errorf("setting versioning_enable error: %v", err)
764805
}
765-
}
766806

767-
// read the lifecycle
768-
lifecycleRules, err := cosService.GetBucketLifecycle(ctx, bucket, cdcId)
769-
if err != nil {
770-
return err
771-
}
772-
if err = d.Set("lifecycle_rules", lifecycleRules); err != nil {
773-
return fmt.Errorf("setting lifecycle_rules error: %v", err)
774-
}
775-
776-
// read the website
777-
website, err := cosService.GetBucketWebsite(ctx, bucket, cdcId)
778-
if err != nil {
779-
return err
780-
}
781-
if len(website) > 0 && cosDomain == "" {
782-
// {bucket}.cos-website.{region}.myqcloud.com
783-
endPointUrl := fmt.Sprintf("%s.cos-website.%s.myqcloud.com", d.Id(), meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region)
784-
website[0]["endpoint"] = endPointUrl
785-
}
786-
if err = d.Set("website", website); err != nil {
787-
return fmt.Errorf("setting website error: %v", err)
788-
}
789-
790-
// read the encryption algorithm
791-
encryption, kmsId, err := cosService.GetBucketEncryption(ctx, bucket, cdcId)
792-
if err != nil {
793-
return err
794-
}
795-
if err = d.Set("encryption_algorithm", encryption); err != nil {
796-
return fmt.Errorf("setting encryption error: %v", err)
797-
}
798-
if err = d.Set("kms_id", kmsId); err != nil {
799-
return fmt.Errorf("setting kms_id error: %v", err)
807+
// read the acceleration
808+
acceleration, err := cosService.GetBucketAccleration(ctx, bucket, cdcId)
809+
if err != nil {
810+
return err
811+
}
812+
if err = d.Set("acceleration_enable", acceleration); err != nil {
813+
return fmt.Errorf("setting acceleration_enable error: %v", err)
814+
}
800815
}
801816

802-
// read the versioning
803-
versioning, err := cosService.GetBucketVersioning(ctx, bucket, cdcId)
817+
// read the cors
818+
corsRules, err := cosService.GetBucketCors(ctx, bucket, cdcId)
804819
if err != nil {
805820
return err
806821
}
807-
if err = d.Set("versioning_enable", versioning); err != nil {
808-
return fmt.Errorf("setting versioning_enable error: %v", err)
822+
if err = d.Set("cors_rules", corsRules); err != nil {
823+
return fmt.Errorf("setting cors_rules error: %v", err)
809824
}
810825

811-
// read the acceleration
812-
acceleration, err := cosService.GetBucketAccleration(ctx, bucket, cdcId)
826+
// read the lifecycle
827+
lifecycleRules, err := cosService.GetBucketLifecycle(ctx, bucket, cdcId)
813828
if err != nil {
814829
return err
815830
}
816-
if err = d.Set("acceleration_enable", acceleration); err != nil {
817-
return fmt.Errorf("setting acceleration_enable error: %v", err)
831+
if err = d.Set("lifecycle_rules", lifecycleRules); err != nil {
832+
return fmt.Errorf("setting lifecycle_rules error: %v", err)
818833
}
819834

820835
//read the log
@@ -1067,7 +1082,7 @@ func resourceTencentCloudCosBucketDelete(d *schema.ResourceData, meta interface{
10671082
}
10681083

10691084
// wait for bucket 404, means deleted
1070-
err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
1085+
err = resource.Retry(tccommon.ReadRetryTimeout*10, func() *resource.RetryError {
10711086
code, _, e := cosService.TencentcloudHeadBucket(ctx, bucket, cdcId)
10721087
if e != nil {
10731088
if code == 404 {
@@ -1829,6 +1844,7 @@ func getBucketPutOptions(d *schema.ResourceData) (useCosService bool, options *c
18291844
}
18301845
grants, hasGrantHeaders := d.GetOk("grant_headers")
18311846
maz, hasMAZ := d.GetOk("multi_az")
1847+
ofs, hasOFS := d.GetOk("chdfs_ofs")
18321848

18331849
if !hasGrantHeaders && !hasMAZ {
18341850
return false, opt
@@ -1853,11 +1869,18 @@ func getBucketPutOptions(d *schema.ResourceData) (useCosService bool, options *c
18531869
}
18541870
}
18551871

1872+
configOpt := cos.CreateBucketConfiguration{}
18561873
if hasMAZ {
18571874
if maz.(bool) {
1858-
opt.CreateBucketConfiguration = &cos.CreateBucketConfiguration{
1859-
BucketAZConfig: "MAZ",
1860-
}
1875+
configOpt.BucketAZConfig = "MAZ"
1876+
opt.CreateBucketConfiguration = &configOpt
1877+
}
1878+
}
1879+
1880+
if hasOFS {
1881+
if ofs.(bool) {
1882+
configOpt.BucketArchConfig = "OFS"
1883+
opt.CreateBucketConfiguration = &configOpt
18611884
}
18621885
}
18631886

tencentcloud/services/cos/resource_tc_cos_bucket.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ Provides a COS resource to create a COS bucket and set its attributes.
22

33
~> **NOTE:** The following capabilities do not support cdc scenarios: `multi_az`, `website`, and bucket replication `replica_role`.
44

5+
~> **NOTE:** If `chdfs_ofs` is `true`, cannot set `acl_body`, `acl`, `origin_pull_rules`, `origin_domain_rules`, `website`, `encryption_algorithm`, `kms_id`, `versioning_enable`, `acceleration_enable` at the same time
6+
57
Example Usage
68

79
Private Bucket
@@ -431,6 +433,21 @@ resource "tencentcloud_cos_bucket" "bucket_with_replication" {
431433
}
432434
```
433435

436+
Using OFS
437+
438+
```hcl
439+
data "tencentcloud_user_info" "info" {}
440+
441+
locals {
442+
app_id = data.tencentcloud_user_info.info.app_id
443+
}
444+
445+
resource "tencentcloud_cos_bucket" "example" {
446+
bucket = "private-ofs-bucket-${local.app_id}"
447+
acl = "private"
448+
chdfs_ofs = true
449+
}
450+
```
434451
Import
435452

436453
COS bucket can be imported, e.g.

website/docs/r/cos_bucket.html.markdown

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ Provides a COS resource to create a COS bucket and set its attributes.
1313

1414
~> **NOTE:** The following capabilities do not support cdc scenarios: `multi_az`, `website`, and bucket replication `replica_role`.
1515

16+
~> **NOTE:** If `chdfs_ofs` is `true`, cannot set `acl_body`, `acl`, `origin_pull_rules`, `origin_domain_rules`, `website`, `encryption_algorithm`, `kms_id`, `versioning_enable`, `acceleration_enable` at the same time
17+
1618
## Example Usage
1719

1820
### Private Bucket
@@ -442,6 +444,22 @@ resource "tencentcloud_cos_bucket" "bucket_with_replication" {
442444
}
443445
```
444446

447+
### Using OFS
448+
449+
```hcl
450+
data "tencentcloud_user_info" "info" {}
451+
452+
locals {
453+
app_id = data.tencentcloud_user_info.info.app_id
454+
}
455+
456+
resource "tencentcloud_cos_bucket" "example" {
457+
bucket = "private-ofs-bucket-${local.app_id}"
458+
acl = "private"
459+
chdfs_ofs = true
460+
}
461+
```
462+
445463
## Argument Reference
446464

447465
The following arguments are supported:
@@ -451,6 +469,7 @@ The following arguments are supported:
451469
* `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.
452470
* `acl` - (Optional, String) The canned ACL to apply. Valid values: private, public-read, and public-read-write. Defaults to private.
453471
* `cdc_id` - (Optional, String, ForceNew) CDC cluster ID.
472+
* `chdfs_ofs` - (Optional, Bool, ForceNew) Indicates whether to create a bucket of metadata acceleration.
454473
* `cors_rules` - (Optional, List) A rule of Cross-Origin Resource Sharing (documented below).
455474
* `enable_intelligent_tiering` - (Optional, Bool) Enable intelligent tiering. NOTE: When intelligent tiering configuration is enabled, it cannot be turned off or modified.
456475
* `encryption_algorithm` - (Optional, String) The server-side encryption algorithm to use. Valid values are `AES256`, `KMS` and `SM4`.

0 commit comments

Comments
 (0)