diff --git a/tencentcloud/basic_test.go b/tencentcloud/basic_test.go index f21d10d013..55675d0917 100644 --- a/tencentcloud/basic_test.go +++ b/tencentcloud/basic_test.go @@ -789,7 +789,6 @@ const ( const ( defaultMeshClusterId = "cls-9ae9qo9k" - defaultMeshId = "mesh-rofjmux7" defaultMeshVpcId = "vpc-pyyv5k3v" defaultMeshSubnetId = "subnet-06i8auk6" ) diff --git a/tencentcloud/resource_tc_ci_bucket_pic_style.go b/tencentcloud/resource_tc_ci_bucket_pic_style.go index d28dcd3760..47e4ff3d70 100644 --- a/tencentcloud/resource_tc_ci_bucket_pic_style.go +++ b/tencentcloud/resource_tc_ci_bucket_pic_style.go @@ -26,6 +26,7 @@ import ( "fmt" "log" "strings" + "time" "github.com/hashicorp/terraform-plugin-sdk/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" @@ -99,6 +100,7 @@ func resourceTencentCloudCiBucketPicStyleCreate(d *schema.ResourceData, meta int StyleBody: styleBody, }) if e != nil { + time.Sleep(5 * time.Second) return retryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, response status [%s]\n", logId, "AddStyle", result.Status) diff --git a/tencentcloud/resource_tc_tcm_access_log_config_test.go b/tencentcloud/resource_tc_tcm_access_log_config_test.go index 347a951d3c..ca2f48a96e 100644 --- a/tencentcloud/resource_tc_tcm_access_log_config_test.go +++ b/tencentcloud/resource_tc_tcm_access_log_config_test.go @@ -22,7 +22,7 @@ func TestAccTencentCloudTcmAccessLogConfigResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckTcmAccessLogConfigExists("tencentcloud_tcm_access_log_config.access_log_config"), resource.TestCheckResourceAttrSet("tencentcloud_tcm_access_log_config.access_log_config", "id"), - resource.TestCheckResourceAttr("tencentcloud_tcm_access_log_config.access_log_config", "mesh_name", defaultMeshId), + resource.TestCheckResourceAttrSet("tencentcloud_tcm_access_log_config.access_log_config", "mesh_name"), resource.TestCheckResourceAttr("tencentcloud_tcm_access_log_config.access_log_config", "address", "10.0.0.1"), resource.TestCheckResourceAttr("tencentcloud_tcm_access_log_config.access_log_config", "enable", "true"), resource.TestCheckResourceAttr("tencentcloud_tcm_access_log_config.access_log_config", "enable_server", "true"), @@ -68,13 +68,47 @@ func testAccCheckTcmAccessLogConfigExists(r string) resource.TestCheckFunc { } } -const testAccTcmAccessLogConfigVar = ` -variable "mesh_id" { - default = "` + defaultMeshId + `" -} -` +const testAccTcmAccessLogConfig = ` -const testAccTcmAccessLogConfig = testAccTcmAccessLogConfigVar + ` +resource "tencentcloud_tcm_mesh" "basic" { + display_name = "test_mesh" + mesh_version = "1.12.5" + type = "HOSTED" + config { + istio { + outbound_traffic_policy = "ALLOW_ANY" + disable_policy_checks = true + enable_pilot_http = true + disable_http_retry = true + smart_dns { + istio_meta_dns_capture = true + istio_meta_dns_auto_allocate = true + } + } + tracing { + enable = true + sampling = 1 + apm { + enable = false + } + zipkin { + address = "10.0.0.1:1000" + } + } + prometheus { + custom_prom { + url = "https://10.0.0.1:1000" + auth_type = "none" + vpc_id = "vpc-j9yhbzpn" + } + } + } + tag_list { + key = "key" + value = "value" + passthrough = false + } + } resource "tencentcloud_tcm_access_log_config" "access_log_config" { address = "10.0.0.1" @@ -83,7 +117,7 @@ resource "tencentcloud_tcm_access_log_config" "access_log_config" { enable_stdout = true encoding = "JSON" format = "{\n\t\"authority\": \"%REQ(:AUTHORITY)%\",\n\t\"bytes_received\": \"%BYTES_RECEIVED%\",\n\t\"bytes_sent\": \"%BYTES_SENT%\",\n\t\"downstream_local_address\": \"%DOWNSTREAM_LOCAL_ADDRESS%\",\n\t\"downstream_remote_address\": \"%DOWNSTREAM_REMOTE_ADDRESS%\",\n\t\"duration\": \"%DURATION%\",\n\t\"istio_policy_status\": \"%DYNAMIC_METADATA(istio.mixer:status)%\",\n\t\"method\": \"%REQ(:METHOD)%\",\n\t\"path\": \"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%\",\n\t\"protocol\": \"%PROTOCOL%\",\n\t\"request_id\": \"%REQ(X-REQUEST-ID)%\",\n\t\"requested_server_name\": \"%REQUESTED_SERVER_NAME%\",\n\t\"response_code\": \"%RESPONSE_CODE%\",\n\t\"response_flags\": \"%RESPONSE_FLAGS%\",\n\t\"route_name\": \"%ROUTE_NAME%\",\n\t\"start_time\": \"%START_TIME%\",\n\t\"upstream_cluster\": \"%UPSTREAM_CLUSTER%\",\n\t\"upstream_host\": \"%UPSTREAM_HOST%\",\n\t\"upstream_local_address\": \"%UPSTREAM_LOCAL_ADDRESS%\",\n\t\"upstream_service_time\": \"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%\",\n\t\"upstream_transport_failure_reason\": \"%UPSTREAM_TRANSPORT_FAILURE_REASON%\",\n\t\"user_agent\": \"%REQ(USER-AGENT)%\",\n\t\"x_forwarded_for\": \"%REQ(X-FORWARDED-FOR)%\"\n}\n" - mesh_name = var.mesh_id + mesh_name = tencentcloud_tcm_mesh.basic.id template = "istio" cls { diff --git a/tencentcloud/resource_tc_tcm_cluster_attachment.go b/tencentcloud/resource_tc_tcm_cluster_attachment.go index c946ca9180..7fbee18e77 100644 --- a/tencentcloud/resource_tc_tcm_cluster_attachment.go +++ b/tencentcloud/resource_tc_tcm_cluster_attachment.go @@ -57,6 +57,7 @@ func resourceTencentCloudTcmClusterAttachment() *schema.Resource { "cluster_list": { Type: schema.TypeList, Optional: true, + Computed: true, ForceNew: true, Description: "Cluster list.", Elem: &schema.Resource{ @@ -84,6 +85,7 @@ func resourceTencentCloudTcmClusterAttachment() *schema.Resource { "subnet_id": { Type: schema.TypeString, Optional: true, + Computed: true, Description: "Subnet id, only needed if it's standalone mesh.", }, "type": { diff --git a/tencentcloud/resource_tc_tcm_cluster_attachment_test.go b/tencentcloud/resource_tc_tcm_cluster_attachment_test.go index 8e68faae37..55be874855 100644 --- a/tencentcloud/resource_tc_tcm_cluster_attachment_test.go +++ b/tencentcloud/resource_tc_tcm_cluster_attachment_test.go @@ -7,6 +7,7 @@ import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/terraform" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) @@ -23,8 +24,14 @@ func TestAccTencentCloudTcmClusterAttachment_basic(t *testing.T) { Config: testAccTcmClusterAttachment, Check: resource.ComposeTestCheckFunc( testAccCheckClusterAttachmentExists("tencentcloud_tcm_cluster_attachment.basic"), - resource.TestCheckResourceAttr("tencentcloud_tcm_cluster_attachment.basic", "mesh_id", defaultMeshId), + // resource.TestCheckResourceAttrSet("tencentcloud_tcm_cluster_attachment.basic", "mesh_id"), resource.TestCheckResourceAttr("tencentcloud_tcm_cluster_attachment.basic", "cluster_list.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_tcm_cluster_attachment.basic", "cluster_list.0.cluster_id", defaultMeshClusterId), + resource.TestCheckResourceAttr("tencentcloud_tcm_cluster_attachment.basic", "cluster_list.0.region", "ap-guangzhou"), + resource.TestCheckResourceAttr("tencentcloud_tcm_cluster_attachment.basic", "cluster_list.0.role", "REMOTE"), + resource.TestCheckResourceAttr("tencentcloud_tcm_cluster_attachment.basic", "cluster_list.0.vpc_id", defaultMeshVpcId), + resource.TestCheckResourceAttr("tencentcloud_tcm_cluster_attachment.basic", "cluster_list.0.subnet_id", defaultMeshSubnetId), + resource.TestCheckResourceAttr("tencentcloud_tcm_cluster_attachment.basic", "cluster_list.0.type", "EKS"), ), }, { @@ -56,6 +63,11 @@ func testAccCheckClusterAttachmentDestroy(s *terraform.State) error { mesh, err := service.DescribeTcmMesh(ctx, meshId) if err != nil { + if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { + if sdkErr.Code == "ResourceNotFound" { + return nil + } + } return err } @@ -118,9 +130,6 @@ const testAccTcmClusterAttachmentVar = ` variable "cluster_id" { default = "` + defaultMeshClusterId + `" } -variable "mesh_id" { - default = "` + defaultMeshId + `" -} variable "vpc_id" { default = "` + defaultMeshVpcId + `" } @@ -131,15 +140,48 @@ variable "subnet_id" { const testAccTcmClusterAttachment = testAccTcmClusterAttachmentVar + ` +resource "tencentcloud_tcm_mesh" "basic" { + display_name = "test_mesh" + mesh_version = "1.12.5" + type = "HOSTED" + config { + istio { + outbound_traffic_policy = "ALLOW_ANY" + disable_policy_checks = true + enable_pilot_http = true + disable_http_retry = true + smart_dns { + istio_meta_dns_capture = true + istio_meta_dns_auto_allocate = true + } + } + tracing { + enable = true + sampling = 1 + apm { + enable = false + } + zipkin { + address = "10.0.0.1:1000" + } + } + } + tag_list { + key = "key" + value = "value" + passthrough = false + } + } + resource "tencentcloud_tcm_cluster_attachment" "basic" { - mesh_id = var.mesh_id + mesh_id = tencentcloud_tcm_mesh.basic.id cluster_list { cluster_id = var.cluster_id region = "ap-guangzhou" role = "REMOTE" vpc_id = var.vpc_id subnet_id = var.subnet_id - type = "TKE" + type = "EKS" } } diff --git a/tencentcloud/resource_tc_tcm_mesh.go b/tencentcloud/resource_tc_tcm_mesh.go index 97c47606b4..092d599764 100644 --- a/tencentcloud/resource_tc_tcm_mesh.go +++ b/tencentcloud/resource_tc_tcm_mesh.go @@ -94,34 +94,40 @@ func resourceTencentCloudTcmMesh() *schema.Resource { Type: schema.TypeList, MaxItems: 1, Optional: true, + Computed: true, Description: "Tracing config.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "enable": { Type: schema.TypeBool, Optional: true, + Computed: true, Description: "Whether enable tracing.", }, "apm": { Type: schema.TypeList, MaxItems: 1, Optional: true, + Computed: true, Description: "APM config.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "enable": { Type: schema.TypeBool, Optional: true, + Computed: true, Description: "Whether enable APM.", }, "region": { Type: schema.TypeString, Optional: true, + Computed: true, Description: "Region.", }, "instance_id": { Type: schema.TypeString, Optional: true, + Computed: true, Description: "Instance id of the APM.", }, }, @@ -130,12 +136,14 @@ func resourceTencentCloudTcmMesh() *schema.Resource { "sampling": { Type: schema.TypeFloat, Optional: true, + Computed: true, Description: "Tracing sampling, 0.0-1.0.", }, "zipkin": { Type: schema.TypeList, MaxItems: 1, Optional: true, + Computed: true, Description: "Third party zipkin config.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ @@ -154,44 +162,52 @@ func resourceTencentCloudTcmMesh() *schema.Resource { Type: schema.TypeList, MaxItems: 1, Optional: true, + Computed: true, Description: "Prometheus configuration.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "vpc_id": { Type: schema.TypeString, Optional: true, + Computed: true, Description: "Vpc id.", }, "subnet_id": { Type: schema.TypeString, Optional: true, + Computed: true, Description: "Subnet id.", }, "region": { Type: schema.TypeString, Optional: true, + Computed: true, Description: "Region.", }, "instance_id": { Type: schema.TypeString, Optional: true, + Computed: true, Description: "Instance id.", }, "custom_prom": { Type: schema.TypeList, MaxItems: 1, Optional: true, + Computed: true, Description: "Custom prometheus.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "is_public_addr": { Type: schema.TypeBool, Optional: true, + Computed: true, Description: "Whether it is public address, default false.", }, "vpc_id": { Type: schema.TypeString, Optional: true, + Computed: true, Description: "Vpc id.", }, "url": { @@ -207,11 +223,13 @@ func resourceTencentCloudTcmMesh() *schema.Resource { "username": { Type: schema.TypeString, Optional: true, + Computed: true, Description: "Username of the prometheus, used in basic authentication type.", }, "password": { Type: schema.TypeString, Optional: true, + Computed: true, Description: "Password of the prometheus, used in basic authentication type.", }, }, @@ -470,7 +488,7 @@ func resourceTencentCloudTcmMeshCreate(d *schema.ResourceData, meta interface{}) if errRet != nil { return retryError(errRet, InternalError) } - if *mesh.Mesh.State == "PENDING" || *mesh.Mesh.State == "CREATING" { + if *mesh.Mesh.State == "PENDING" || *mesh.Mesh.State == "CREATING" || *mesh.Mesh.State != "RUNNING" { return resource.RetryableError(fmt.Errorf("mesh status is %v, retry...", *mesh.Mesh.State)) } return nil diff --git a/tencentcloud/resource_tc_tcm_prometheus_attachment.go b/tencentcloud/resource_tc_tcm_prometheus_attachment.go index 8fbc205dbd..f54ef7fc40 100644 --- a/tencentcloud/resource_tc_tcm_prometheus_attachment.go +++ b/tencentcloud/resource_tc_tcm_prometheus_attachment.go @@ -2,6 +2,7 @@ Provides a resource to create a tcm prometheus_attachment ~> **NOTE:** Instructions for use: 1. Use Tencent Cloud Prometheus to monitor TMP, please enter `vpc_id`, `subnet_id`, `region` or `instance_id`, it is recommended to use an existing tmp instance; 2. To use the third-party Prometheus service, please enter `custom_prom`; 3. `tencentcloud_tcm_prometheus_attachment` does not support modification; 4. If you use Tencent Cloud Prometheus to monitor TMP, enter `vpc_id`, `subnet_id`, `region` to create a new Prometheus monitoring instance, destroy will not destroy the Prometheus monitoring instance +~> **NOTE:** If you use the config attribute prometheus in tencentcloud_tcm_mesh, do not use tencentcloud_tcm_prometheus_attachment Example Usage @@ -72,38 +73,45 @@ func resourceTencentCloudTcmPrometheusAttachment() *schema.Resource { "vpc_id": { Type: schema.TypeString, Optional: true, + Computed: true, Description: "Vpc id for TMP.", }, "subnet_id": { Type: schema.TypeString, Optional: true, + Computed: true, Description: "Subnet id for TMP.", }, "region": { Type: schema.TypeString, Optional: true, + Computed: true, Description: "Region for TMP.", }, "instance_id": { Type: schema.TypeString, Optional: true, + Computed: true, Description: "Existed TMP id, auto create TMP if empty.", }, "custom_prom": { Type: schema.TypeList, MaxItems: 1, Optional: true, + Computed: true, Description: "Third party prometheus.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "is_public_addr": { Type: schema.TypeBool, Optional: true, + Computed: true, Description: "Whether it is public address, default false.", }, "vpc_id": { Type: schema.TypeString, Optional: true, + Computed: true, Description: "Vpc id.", }, "url": { @@ -119,11 +127,13 @@ func resourceTencentCloudTcmPrometheusAttachment() *schema.Resource { "username": { Type: schema.TypeString, Optional: true, + Computed: true, Description: "Username of the prometheus, used in basic authentication type.", }, "password": { Type: schema.TypeString, Optional: true, + Computed: true, Sensitive: true, Description: "Password of the prometheus, used in basic authentication type.", }, diff --git a/tencentcloud/resource_tc_tcm_prometheus_attachment_test.go b/tencentcloud/resource_tc_tcm_prometheus_attachment_test.go index 3cc99a740c..9008cd2f50 100644 --- a/tencentcloud/resource_tc_tcm_prometheus_attachment_test.go +++ b/tencentcloud/resource_tc_tcm_prometheus_attachment_test.go @@ -22,7 +22,7 @@ func TestAccTencentCloudTcmPrometheusAttachmentResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckPrometheusAttachmentExists("tencentcloud_tcm_prometheus_attachment.prometheus_attachment"), resource.TestCheckResourceAttrSet("tencentcloud_tcm_prometheus_attachment.prometheus_attachment", "id"), - resource.TestCheckResourceAttr("tencentcloud_tcm_prometheus_attachment.prometheus_attachment", "mesh_id", defaultMeshId), + resource.TestCheckResourceAttrSet("tencentcloud_tcm_prometheus_attachment.prometheus_attachment", "mesh_id"), resource.TestCheckResourceAttrSet("tencentcloud_tcm_prometheus_attachment.prometheus_attachment", "prometheus.#"), resource.TestCheckResourceAttrSet("tencentcloud_tcm_prometheus_attachment.prometheus_attachment", "prometheus.0.custom_prom.#"), resource.TestCheckResourceAttr("tencentcloud_tcm_prometheus_attachment.prometheus_attachment", "prometheus.0.custom_prom.0.auth_type", "basic"), @@ -87,9 +87,6 @@ func testAccCheckPrometheusAttachmentExists(r string) resource.TestCheckFunc { } const testAccTcmPrometheusAttachmentVar = ` -variable "mesh_id" { - default = "` + defaultMeshId + `" -} variable "vpc_id" { default = "` + defaultMeshVpcId + `" } @@ -97,8 +94,41 @@ variable "vpc_id" { const testAccTcmPrometheusAttachment = testAccTcmPrometheusAttachmentVar + ` +resource "tencentcloud_tcm_mesh" "basic" { + display_name = "test_mesh" + mesh_version = "1.12.5" + type = "HOSTED" + config { + istio { + outbound_traffic_policy = "ALLOW_ANY" + disable_policy_checks = true + enable_pilot_http = true + disable_http_retry = true + smart_dns { + istio_meta_dns_capture = true + istio_meta_dns_auto_allocate = true + } + } + tracing { + enable = true + sampling = 1 + apm { + enable = false + } + zipkin { + address = "10.0.0.1:1000" + } + } + } + tag_list { + key = "key" + value = "value" + passthrough = false + } + } + resource "tencentcloud_tcm_prometheus_attachment" "prometheus_attachment" { - mesh_id = var.mesh_id + mesh_id = tencentcloud_tcm_mesh.basic.id prometheus { # vpc_id = "vpc-pewdpxxx" # subnet_id = "subnet-driddxxx" diff --git a/tencentcloud/resource_tc_tcm_tracing_config.go b/tencentcloud/resource_tc_tcm_tracing_config.go index cb25f4271f..2dd6449138 100644 --- a/tencentcloud/resource_tc_tcm_tracing_config.go +++ b/tencentcloud/resource_tc_tcm_tracing_config.go @@ -1,6 +1,8 @@ /* Provides a resource to create a tcm tracing_config +~> **NOTE:** If you use the config attribute tracing in tencentcloud_tcm_mesh, do not use tencentcloud_tcm_tracing_config + Example Usage ```hcl diff --git a/tencentcloud/resource_tc_tcm_tracing_config_test.go b/tencentcloud/resource_tc_tcm_tracing_config_test.go index 05d4249110..8b8878011d 100644 --- a/tencentcloud/resource_tc_tcm_tracing_config_test.go +++ b/tencentcloud/resource_tc_tcm_tracing_config_test.go @@ -21,7 +21,7 @@ func TestAccTencentCloudTcmTracingConfigResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckTcmTracingConfigExists("tencentcloud_tcm_tracing_config.tracing_config"), resource.TestCheckResourceAttrSet("tencentcloud_tcm_tracing_config.tracing_config", "id"), - resource.TestCheckResourceAttr("tencentcloud_tcm_tracing_config.tracing_config", "mesh_id", defaultMeshId), + resource.TestCheckResourceAttrSet("tencentcloud_tcm_tracing_config.tracing_config", "mesh_id"), resource.TestCheckResourceAttr("tencentcloud_tcm_tracing_config.tracing_config", "sampling", "30"), resource.TestCheckResourceAttrSet("tencentcloud_tcm_tracing_config.tracing_config", "apm.#"), resource.TestCheckResourceAttr("tencentcloud_tcm_tracing_config.tracing_config", "apm.0.enable", "false"), @@ -61,16 +61,40 @@ func testAccCheckTcmTracingConfigExists(r string) resource.TestCheckFunc { } } -const testAccTcmTracingConfigVar = ` -variable "mesh_id" { - default = "` + defaultMeshId + `" -} -` +const testAccTcmTracingConfig = ` -const testAccTcmTracingConfig = testAccTcmTracingConfigVar + ` +resource "tencentcloud_tcm_mesh" "basic" { + display_name = "test_mesh" + mesh_version = "1.12.5" + type = "HOSTED" + config { + istio { + outbound_traffic_policy = "ALLOW_ANY" + disable_policy_checks = true + enable_pilot_http = true + disable_http_retry = true + smart_dns { + istio_meta_dns_capture = true + istio_meta_dns_auto_allocate = true + } + } + prometheus { + custom_prom { + url = "https://10.0.0.1:1000" + auth_type = "none" + vpc_id = "vpc-j9yhbzpn" + } + } + } + tag_list { + key = "key" + value = "value" + passthrough = false + } + } resource "tencentcloud_tcm_tracing_config" "tracing_config" { - mesh_id = var.mesh_id + mesh_id = tencentcloud_tcm_mesh.basic.id enable = true apm { enable = false diff --git a/website/docs/r/tcm_prometheus_attachment.html.markdown b/website/docs/r/tcm_prometheus_attachment.html.markdown index 44aaa29b42..70bc0a90d5 100644 --- a/website/docs/r/tcm_prometheus_attachment.html.markdown +++ b/website/docs/r/tcm_prometheus_attachment.html.markdown @@ -12,6 +12,7 @@ description: |- Provides a resource to create a tcm prometheus_attachment ~> **NOTE:** Instructions for use: 1. Use Tencent Cloud Prometheus to monitor TMP, please enter `vpc_id`, `subnet_id`, `region` or `instance_id`, it is recommended to use an existing tmp instance; 2. To use the third-party Prometheus service, please enter `custom_prom`; 3. `tencentcloud_tcm_prometheus_attachment` does not support modification; 4. If you use Tencent Cloud Prometheus to monitor TMP, enter `vpc_id`, `subnet_id`, `region` to create a new Prometheus monitoring instance, destroy will not destroy the Prometheus monitoring instance +~> **NOTE:** If you use the config attribute prometheus in tencentcloud_tcm_mesh, do not use tencentcloud_tcm_prometheus_attachment ## Example Usage diff --git a/website/docs/r/tcm_tracing_config.html.markdown b/website/docs/r/tcm_tracing_config.html.markdown index a78d408d31..003602d76e 100644 --- a/website/docs/r/tcm_tracing_config.html.markdown +++ b/website/docs/r/tcm_tracing_config.html.markdown @@ -11,6 +11,8 @@ description: |- Provides a resource to create a tcm tracing_config +~> **NOTE:** If you use the config attribute tracing in tencentcloud_tcm_mesh, do not use tencentcloud_tcm_tracing_config + ## Example Usage ```hcl