diff --git a/tencentcloud/connectivity/client.go b/tencentcloud/connectivity/client.go index d94fda3808..2cf72c4197 100644 --- a/tencentcloud/connectivity/client.go +++ b/tencentcloud/connectivity/client.go @@ -118,6 +118,7 @@ type TencentCloudClient struct { Region string Protocol string Domain string + CosDomain string cosConn *s3.S3 tencentCosConn *cos.Client @@ -266,8 +267,12 @@ func (me *TencentCloudClient) UseCosClient() *s3.S3 { resolver := func(service, region string, optFns ...func(*endpoints.Options)) (endpoints.ResolvedEndpoint, error) { if service == endpoints.S3ServiceID { + cosUrl := fmt.Sprintf("https://cos.%s.myqcloud.com", region) + if me.CosDomain != "" { + cosUrl = me.CosDomain + } return endpoints.ResolvedEndpoint{ - URL: fmt.Sprintf("https://cos.%s.myqcloud.com", region), + URL: cosUrl, SigningRegion: region, }, nil } @@ -317,7 +322,14 @@ func (me *TencentCloudClient) UseTencentCosClientNew(bucket string, cdcId ...str // UseTencentCosClient tencent cloud own client for service instead of aws func (me *TencentCloudClient) UseTencentCosClient(bucket string) *cos.Client { - u, _ := url.Parse(fmt.Sprintf("https://%s.cos.%s.myqcloud.com", bucket, me.Region)) + cosUrl := fmt.Sprintf("https://%s.cos.%s.myqcloud.com", bucket, me.Region) + if me.CosDomain != "" { + parsedURL, _ := url.Parse(me.CosDomain) + parsedURL.Host = bucket + "." + parsedURL.Host + cosUrl = parsedURL.String() + } + + u, _ := url.Parse(cosUrl) if me.tencentCosConn != nil && me.tencentCosConn.BaseURL.BucketURL == u { return me.tencentCosConn @@ -1319,7 +1331,12 @@ func (me *TencentCloudClient) UseDtsClient() *dts.Client { // UseCosBatchClient returns ci client for service func (me *TencentCloudClient) UseCosBatchClient(uin string) *cos.Client { - u, _ := url.Parse(fmt.Sprintf("https://%s.cos-control.%s.myqcloud.com", uin, me.Region)) + cosUrl := fmt.Sprintf("https://%s.cos-control.%s.myqcloud.com", uin, me.Region) + if me.CosDomain != "" { + cosUrl = me.CosDomain + } + + u, _ := url.Parse(cosUrl) if me.cosBatchConn != nil && me.cosBatchConn.BaseURL.BatchURL == u { return me.cosBatchConn diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index a81a5baae6..eee6f98c8d 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -125,6 +125,7 @@ const ( PROVIDER_REGION = "TENCENTCLOUD_REGION" PROVIDER_PROTOCOL = "TENCENTCLOUD_PROTOCOL" PROVIDER_DOMAIN = "TENCENTCLOUD_DOMAIN" + PROVIDER_COS_DOMAIN = "TENCENTCLOUD_COS_DOMAIN" //internal version: replace envYunti begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. //internal version: replace envYunti end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. PROVIDER_ASSUME_ROLE_ARN = "TENCENTCLOUD_ASSUME_ROLE_ARN" @@ -204,6 +205,12 @@ func Provider() *schema.Provider { DefaultFunc: schema.EnvDefaultFunc(PROVIDER_DOMAIN, nil), Description: "The root domain of the API request, Default is `tencentcloudapi.com`.", }, + "cos_domain": { + Type: schema.TypeString, + Optional: true, + DefaultFunc: schema.EnvDefaultFunc(PROVIDER_COS_DOMAIN, nil), + Description: "The cos domain of the API request, Default is `https://cos.{region}.myqcloud.com`, Other Examples: `https://cluster-123456.cos-cdc.ap-guangzhou.myqcloud.com`.", + }, //internal version: replace enableBpass begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. //internal version: replace enableBpass end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. "assume_role": { @@ -2156,6 +2163,7 @@ func providerConfigure(d *schema.ResourceData) (interface{}, error) { region string protocol string domain string + cosDomain string camRoleName string ) @@ -2195,6 +2203,10 @@ func providerConfigure(d *schema.ResourceData) (interface{}, error) { domain = v.(string) } + if v, ok := d.GetOk("cos_domain"); ok { + cosDomain = v.(string) + } + if v, ok := d.GetOk("cam_role_name"); ok { camRoleName = v.(string) } @@ -2207,9 +2219,10 @@ func providerConfigure(d *schema.ResourceData) (interface{}, error) { secretKey, securityToken, ), - Region: region, - Protocol: protocol, - Domain: domain, + Region: region, + Protocol: protocol, + Domain: domain, + CosDomain: cosDomain, } // get auth from CAM role name diff --git a/tencentcloud/services/cos/data_source_tc_cos_batchs.md b/tencentcloud/services/cos/data_source_tc_cos_batchs.md index b70a6f7f3a..9c78258d27 100644 --- a/tencentcloud/services/cos/data_source_tc_cos_batchs.md +++ b/tencentcloud/services/cos/data_source_tc_cos_batchs.md @@ -1,5 +1,7 @@ Use this data source to query the COS batch. +~> **NOTE:** The current resource does not support `cos_domain`. + Example Usage ```hcl diff --git a/tencentcloud/services/cos/data_source_tc_cos_bucket_inventorys.md b/tencentcloud/services/cos/data_source_tc_cos_bucket_inventorys.md index 96b16bddf9..25992679f5 100644 --- a/tencentcloud/services/cos/data_source_tc_cos_bucket_inventorys.md +++ b/tencentcloud/services/cos/data_source_tc_cos_bucket_inventorys.md @@ -1,5 +1,7 @@ Use this data source to query the COS bucket inventorys. +~> **NOTE:** The current resource does not support cdc. + Example Usage ```hcl diff --git a/tencentcloud/services/cos/data_source_tc_cos_buckets.go b/tencentcloud/services/cos/data_source_tc_cos_buckets.go index 99a9d8a024..859fac50b2 100644 --- a/tencentcloud/services/cos/data_source_tc_cos_buckets.go +++ b/tencentcloud/services/cos/data_source_tc_cos_buckets.go @@ -400,15 +400,18 @@ func dataSourceTencentCloudCosBucketsRead(d *schema.ResourceData, meta interface } bucket["website"] = website - originRules, err := cosService.GetBucketPullOrigin(ctx, *v.Name) - if err != nil { - return err - } - bucket["origin_pull_rules"] = originRules + cosDomain := meta.(tccommon.ProviderMeta).GetAPIV3Conn().CosDomain + if cosDomain == "" { + originRules, err := cosService.GetBucketPullOrigin(ctx, *v.Name) + if err != nil { + return err + } + bucket["origin_pull_rules"] = originRules - domainRules, err := cosService.GetBucketOriginDomain(ctx, *v.Name) - if err == nil { - bucket["origin_domain_rules"] = domainRules + domainRules, err := cosService.GetBucketOriginDomain(ctx, *v.Name) + if err == nil { + bucket["origin_domain_rules"] = domainRules + } } aclBody, err := cosService.GetBucketACL(ctx, *v.Name, "") diff --git a/tencentcloud/services/cos/resource_tc_cos_batch.md b/tencentcloud/services/cos/resource_tc_cos_batch.md index 5b0fe77528..9c3974fbe2 100644 --- a/tencentcloud/services/cos/resource_tc_cos_batch.md +++ b/tencentcloud/services/cos/resource_tc_cos_batch.md @@ -1,5 +1,7 @@ Provides a resource to create a cos bucket batch. +~> **NOTE:** The current resource does not support `cos_domain`. + Example Usage ```hcl diff --git a/tencentcloud/services/cos/resource_tc_cos_bucket.go b/tencentcloud/services/cos/resource_tc_cos_bucket.go index 35df43081a..ffddcc31d3 100644 --- a/tencentcloud/services/cos/resource_tc_cos_bucket.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket.go @@ -8,6 +8,7 @@ import ( "fmt" "io/ioutil" "log" + "net/url" "strings" "time" @@ -616,9 +617,14 @@ func resourceTencentCloudCosBucketRead(d *schema.ResourceData, meta interface{}) _ = d.Set("multi_az", true) } + cosDomain := meta.(tccommon.ProviderMeta).GetAPIV3Conn().CosDomain var cosBucketUrl string - if cdcId == "" { + if cdcId == "" && cosDomain == "" { cosBucketUrl = fmt.Sprintf("%s.cos.%s.myqcloud.com", d.Id(), meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region) + } else if cosDomain != "" { + parsedURL, _ := url.Parse(cosDomain) + parsedURL.Host = bucket + "." + parsedURL.Host + cosBucketUrl = parsedURL.String() } else { cosBucketUrl = fmt.Sprintf("https://%s.%s.cos-cdc.%s.myqcloud.com", bucket, cdcId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region) } @@ -656,7 +662,7 @@ func resourceTencentCloudCosBucketRead(d *schema.ResourceData, meta interface{}) return fmt.Errorf("setting cors_rules error: %v", err) } - if cdcId == "" { + if cdcId == "" && cosDomain == "" { originPullRules, err := cosService.GetBucketPullOrigin(ctx, bucket) if err != nil { return err @@ -702,7 +708,7 @@ func resourceTencentCloudCosBucketRead(d *schema.ResourceData, meta interface{}) if err != nil { return err } - if len(website) > 0 { + if len(website) > 0 && cosDomain == "" { // {bucket}.cos-website.{region}.myqcloud.com endPointUrl := fmt.Sprintf("%s.cos-website.%s.myqcloud.com", d.Id(), meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region) website[0]["endpoint"] = endPointUrl diff --git a/tencentcloud/services/cos/resource_tc_cos_bucket_domain_certificate_attachment.md b/tencentcloud/services/cos/resource_tc_cos_bucket_domain_certificate_attachment.md index 6e8c97669e..f7ca0909fa 100644 --- a/tencentcloud/services/cos/resource_tc_cos_bucket_domain_certificate_attachment.md +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_domain_certificate_attachment.md @@ -1,5 +1,7 @@ Provides a resource to attach/detach the corresponding certificate for the domain name in specified cos bucket. +~> **NOTE:** The current resource does not support cdc. + Example Usage ```hcl diff --git a/tencentcloud/services/cos/resource_tc_cos_bucket_generate_inventory_immediately_operation.md b/tencentcloud/services/cos/resource_tc_cos_bucket_generate_inventory_immediately_operation.md index 6eae0ffc48..64e08a8b50 100644 --- a/tencentcloud/services/cos/resource_tc_cos_bucket_generate_inventory_immediately_operation.md +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_generate_inventory_immediately_operation.md @@ -1,5 +1,7 @@ Provides a resource to generate a cos bucket inventory immediately +~> **NOTE:** The current resource does not support cdc. + Example Usage ```hcl diff --git a/tencentcloud/services/cos/resource_tc_cos_bucket_inventory.md b/tencentcloud/services/cos/resource_tc_cos_bucket_inventory.md index 2a59846633..43e8b75d8e 100644 --- a/tencentcloud/services/cos/resource_tc_cos_bucket_inventory.md +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_inventory.md @@ -1,5 +1,7 @@ Provides a resource to create a cos bucket inventory +~> **NOTE:** The current resource does not support cdc. + Example Usage ```hcl diff --git a/tencentcloud/services/cos/resource_tc_cos_bucket_referer.md b/tencentcloud/services/cos/resource_tc_cos_bucket_referer.md index 0f774ae8a7..d3908ed76f 100644 --- a/tencentcloud/services/cos/resource_tc_cos_bucket_referer.md +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_referer.md @@ -1,5 +1,7 @@ Provides a resource to create a cos bucket_referer +~> **NOTE:** The current resource does not support cdc. + Example Usage ```hcl diff --git a/tencentcloud/services/cos/resource_tc_cos_bucket_test.go b/tencentcloud/services/cos/resource_tc_cos_bucket_test.go index 269e48c97b..c194fdcffd 100644 --- a/tencentcloud/services/cos/resource_tc_cos_bucket_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_test.go @@ -74,7 +74,7 @@ func testSweepCosBuckets(region string) error { } log.Printf("[INFO] deleting cos bucket: %s", bucket) - if err = cosService.DeleteBucket(ctx, bucket, true, true); err != nil { + if err = cosService.DeleteBucket(ctx, bucket, true, true, ""); err != nil { log.Printf("[ERROR] delete bucket %s error: %s", bucket, err.Error()) } } diff --git a/tencentcloud/services/cos/resource_tc_cos_object_restore_operation.md b/tencentcloud/services/cos/resource_tc_cos_object_restore_operation.md index 68dbbc980a..9572ad6050 100644 --- a/tencentcloud/services/cos/resource_tc_cos_object_restore_operation.md +++ b/tencentcloud/services/cos/resource_tc_cos_object_restore_operation.md @@ -1,5 +1,7 @@ Provides a resource to restore object +~> **NOTE:** The current resource does not support cdc. + Example Usage ```hcl diff --git a/website/docs/d/cos_batchs.html.markdown b/website/docs/d/cos_batchs.html.markdown index 105429a704..19f1d05762 100644 --- a/website/docs/d/cos_batchs.html.markdown +++ b/website/docs/d/cos_batchs.html.markdown @@ -11,6 +11,8 @@ description: |- Use this data source to query the COS batch. +~> **NOTE:** The current resource does not support `cos_domain`. + ## Example Usage ```hcl diff --git a/website/docs/d/cos_bucket_inventorys.html.markdown b/website/docs/d/cos_bucket_inventorys.html.markdown index 03b1ae19cd..85debc4656 100644 --- a/website/docs/d/cos_bucket_inventorys.html.markdown +++ b/website/docs/d/cos_bucket_inventorys.html.markdown @@ -11,6 +11,8 @@ description: |- Use this data source to query the COS bucket inventorys. +~> **NOTE:** The current resource does not support cdc. + ## Example Usage ```hcl diff --git a/website/docs/index.html.markdown b/website/docs/index.html.markdown index e02c131bd2..1d5bd69c73 100644 --- a/website/docs/index.html.markdown +++ b/website/docs/index.html.markdown @@ -236,6 +236,38 @@ $ export TENCENTCLOUD_ASSUME_ROLE_WEB_IDENTITY_TOKEN="my-web-identity-token" $ terraform plan ``` +### CDC cos usage + +You can set the cos domain by setting the environment variable `TENCENTCLOUD_COS_DOMAIN`, and configure the cdc scenario as follows: + +-> **Note:** Please note that not all cos resources are supported. Please pay attention to the prompts for each resource. + +```hcl +locals { + region = "ap-guangzhou" + cdc_id = "cluster_xxx" +} + +provider "tencentcloud" { + region = local.region + secret_id = "xxxxxx" + secret_key = "xxxxxx" + cos_domain = "https://${local.cdc_id}.cos-cdc.${local.region}.myqcloud.com/" +} +``` + +The `cos_domain` can also provided via `TENCENTCLOUD_COS_DOMAIN` environment variables. + +Usage: + +```shell +$ export TENCENTCLOUD_SECRET_ID="my-secret-id" +$ export TENCENTCLOUD_SECRET_KEY="my-secret-key" +$ export TENCENTCLOUD_REGION="ap-guangzhou" +$ export TENCENTCLOUD_COS_DOMAIN="https://cluster-xxxxxx.cos-cdc.ap-guangzhou.myqcloud.com/" +$ terraform plan +``` + ### Shared credentials You can use [Tencent Cloud credentials](https://www.tencentcloud.com/document/product/1013/33464) to specify your credentials. The default location is `$HOME/.tccli` on Linux and macOS, And `"%USERPROFILE%\.tccli"` on Windows. You can optionally specify a different location in the Terraform configuration by providing the `shared_credentials_dir` argument or using the `TENCENTCLOUD_SHARED_CREDENTIALS_DIR` environment variable. This method also supports a `profile` configuration and matching `TENCENTCLOUD_PROFILE` environment variable: diff --git a/website/docs/r/cos_batch.html.markdown b/website/docs/r/cos_batch.html.markdown index b8571a2f34..d05e76e539 100644 --- a/website/docs/r/cos_batch.html.markdown +++ b/website/docs/r/cos_batch.html.markdown @@ -11,6 +11,8 @@ description: |- Provides a resource to create a cos bucket batch. +~> **NOTE:** The current resource does not support `cos_domain`. + ## Example Usage ```hcl diff --git a/website/docs/r/cos_bucket_domain_certificate_attachment.html.markdown b/website/docs/r/cos_bucket_domain_certificate_attachment.html.markdown index 5e0ac6438a..748dd9cb64 100644 --- a/website/docs/r/cos_bucket_domain_certificate_attachment.html.markdown +++ b/website/docs/r/cos_bucket_domain_certificate_attachment.html.markdown @@ -11,6 +11,8 @@ description: |- Provides a resource to attach/detach the corresponding certificate for the domain name in specified cos bucket. +~> **NOTE:** The current resource does not support cdc. + ## Example Usage ```hcl diff --git a/website/docs/r/cos_bucket_generate_inventory_immediately_operation.html.markdown b/website/docs/r/cos_bucket_generate_inventory_immediately_operation.html.markdown index 26f2a76157..177a254356 100644 --- a/website/docs/r/cos_bucket_generate_inventory_immediately_operation.html.markdown +++ b/website/docs/r/cos_bucket_generate_inventory_immediately_operation.html.markdown @@ -11,6 +11,8 @@ description: |- Provides a resource to generate a cos bucket inventory immediately +~> **NOTE:** The current resource does not support cdc. + ## Example Usage ```hcl diff --git a/website/docs/r/cos_bucket_inventory.html.markdown b/website/docs/r/cos_bucket_inventory.html.markdown index fe42498d67..026c72246d 100644 --- a/website/docs/r/cos_bucket_inventory.html.markdown +++ b/website/docs/r/cos_bucket_inventory.html.markdown @@ -11,6 +11,8 @@ description: |- Provides a resource to create a cos bucket inventory +~> **NOTE:** The current resource does not support cdc. + ## Example Usage ```hcl diff --git a/website/docs/r/cos_bucket_referer.html.markdown b/website/docs/r/cos_bucket_referer.html.markdown index 304a5020a5..919e7c5efa 100644 --- a/website/docs/r/cos_bucket_referer.html.markdown +++ b/website/docs/r/cos_bucket_referer.html.markdown @@ -11,6 +11,8 @@ description: |- Provides a resource to create a cos bucket_referer +~> **NOTE:** The current resource does not support cdc. + ## Example Usage ```hcl diff --git a/website/docs/r/cos_object_restore_operation.html.markdown b/website/docs/r/cos_object_restore_operation.html.markdown index bec0a9c538..8802c0c60a 100644 --- a/website/docs/r/cos_object_restore_operation.html.markdown +++ b/website/docs/r/cos_object_restore_operation.html.markdown @@ -11,6 +11,8 @@ description: |- Provides a resource to restore object +~> **NOTE:** The current resource does not support cdc. + ## Example Usage ```hcl