From 724e2667bfaff7016f44b4e847fa15f79d638337 Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Mon, 2 Sep 2024 15:47:51 +0800 Subject: [PATCH 1/7] refact(cdwdoris): regen cdwdoris provider --- tencentcloud/connectivity/client.go | 3 +- tencentcloud/provider.go | 2 +- .../cdwdoris/resource_tc_cdwdoris_instance.go | 943 +++++++++++------- ...resource_tc_cdwdoris_instance_extension.go | 1 + .../cdwdoris/resource_tc_cdwdoris_user.go | 134 +-- .../resource_tc_cdwdoris_user_extension.go | 1 + .../resource_tc_cdwdoris_workload_group.go | 264 ++--- ...ce_tc_cdwdoris_workload_group_extension.go | 1 + .../services/cdwdoris/resource_test.go | 11 + .../cdwdoris/service_tencentcloud_cdwdoris.go | 131 +-- 10 files changed, 803 insertions(+), 688 deletions(-) create mode 100644 tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance_extension.go create mode 100644 tencentcloud/services/cdwdoris/resource_tc_cdwdoris_user_extension.go create mode 100644 tencentcloud/services/cdwdoris/resource_tc_cdwdoris_workload_group_extension.go create mode 100644 tencentcloud/services/cdwdoris/resource_test.go diff --git a/tencentcloud/connectivity/client.go b/tencentcloud/connectivity/client.go index 23e3be58b1..880323d84c 100644 --- a/tencentcloud/connectivity/client.go +++ b/tencentcloud/connectivity/client.go @@ -214,7 +214,8 @@ type TencentCloudClient struct { cdcConn *cdc.Client cdwdorisConn *cdwdoris.Client //omit nil client - omitNilConn *common.Client + omitNilConn *common.Client + cdwdorisv20211228Conn *cdwdoris.Client } // NewClientProfile returns a new ClientProfile diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index f2b640e74d..ff54445991 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -2120,7 +2120,7 @@ func Provider() *schema.Provider { "tencentcloud_cdwdoris_instance": cdwdoris.ResourceTencentCloudCdwdorisInstance(), "tencentcloud_cdwdoris_workload_group": cdwdoris.ResourceTencentCloudCdwdorisWorkloadGroup(), //"tencentcloud_cdwdoris_user": cdwdoris.ResourceTencentCloudCdwdorisUser(), - }, + "tencentcloud_cdwdoris_user": cdwdoris.ResourceTencentCloudCdwdorisUser()}, ConfigureFunc: providerConfigure, } diff --git a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go index 710fbaa044..2ce18f087e 100644 --- a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go +++ b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go @@ -24,33 +24,35 @@ func ResourceTencentCloudCdwdorisInstance() *schema.Resource { "zone": { Type: schema.TypeString, Required: true, - Description: "Availability zone.", + Description: "Availability zone", }, + "fe_spec": { Type: schema.TypeList, Required: true, MaxItems: 1, - Description: "FE specifications.", + Description: "FE specifications", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "spec_name": { Type: schema.TypeString, Required: true, - Description: "Specification name.", + Description: "Specification name", }, "count": { Type: schema.TypeInt, Required: true, - Description: "Quantities.", + Description: "Quantities", }, "disk_size": { Type: schema.TypeInt, Required: true, - Description: "Cloud disk size.", + Description: "Cloud disk size", }, }, }, }, + "be_spec": { Type: schema.TypeList, Required: true, @@ -61,117 +63,127 @@ func ResourceTencentCloudCdwdorisInstance() *schema.Resource { "spec_name": { Type: schema.TypeString, Required: true, - Description: "Specification name.", + Description: "Specification name", }, "count": { Type: schema.TypeInt, Required: true, - Description: "Quantities.", + Description: "Quantities", }, "disk_size": { Type: schema.TypeInt, Required: true, - Description: "Cloud disk size.", + Description: "Cloud disk size", }, }, }, }, + "ha_flag": { Type: schema.TypeBool, Required: true, Description: "Whether it is highly available.", }, + "user_vpc_id": { Type: schema.TypeString, Required: true, - Description: "User VPCID.", + Description: "User VPCID", }, + "user_subnet_id": { Type: schema.TypeString, Required: true, - Description: "User subnet ID.", + Description: "User subnet ID", }, + "product_version": { Type: schema.TypeString, Required: true, - Description: "Product version number.", + Description: "Product version number", }, + "charge_properties": { Type: schema.TypeList, Required: true, MaxItems: 1, - Description: "Payment type.", + Description: "Payment type", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "charge_type": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: tccommon.ValidateAllowedStringValue(CHARGE_TYPE), - Description: "Billing type: `PREPAID` for prepayment, and `POSTPAID_BY_HOUR` for postpayment. Note: This field may return null, indicating that no valid values can be obtained.", + Type: schema.TypeString, + Optional: true, + Description: "Billing type: PREPAID for prepayment, and POSTPAID_BY_HOUR for postpayment.\nNote: This field may return null, indicating that no valid values can be obtained.", }, "renew_flag": { Type: schema.TypeInt, Optional: true, - Description: "Whether to automatically renew. 1 means automatic renewal is enabled. Note: This field may return null, indicating that no valid values can be obtained.", + Description: "Whether to automatically renew. 1 means automatic renewal is enabled.\nNote: This field may return null, indicating that no valid values can be obtained.", }, "time_span": { Type: schema.TypeInt, Optional: true, - Description: "Billing duration Note: This field may return null, indicating that no valid values can be obtained.", + Description: "Billing duration\nNote: This field may return null, indicating that no valid values can be obtained.", }, "time_unit": { Type: schema.TypeString, Optional: true, - Description: "Billing time unit, and `m` means month, etc. Note: This field may return null, indicating that no valid values can be obtained.", + Description: "Billing time unit, and \"m\" means month, etc.\nNote: This field may return null, indicating that no valid values can be obtained.", }, }, }, }, + "instance_name": { Type: schema.TypeString, Required: true, - Description: "Instance name.", + Description: "Instance name", }, + "doris_user_pwd": { Type: schema.TypeString, Required: true, - Sensitive: true, - Description: "Database password.", + Description: "Database password", }, + "tags": { Type: schema.TypeList, Optional: true, - Description: "Tag list.", + Description: "Tag list", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "tag_key": { Type: schema.TypeString, Required: true, - Description: "Tag key.", + Description: "Tag key", }, "tag_value": { Type: schema.TypeString, Required: true, - Description: "Tag value.", + Description: "Tag value", }, }, }, }, + "ha_type": { Type: schema.TypeInt, Optional: true, - Description: "High availability type: 0 indicates non-high availability (only one FE, FeSpec.CreateInstanceSpec.Count=1), 1 indicates read high availability (at least 3 FEs must be deployed, FeSpec.CreateInstanceSpec.Count>=3, and it must be an odd number), 2 indicates read and write high availability (at least 5 FEs must be deployed, FeSpec.CreateInstanceSpec.Count>=5, and it must be an odd number).", + Description: "High availability type:\n0 indicates non-high availability (only one FE, FeSpec.CreateInstanceSpec.Count=1),\n1 indicates read high availability (at least 3 FEs must be deployed, FeSpec.CreateInstanceSpec.Count>=3, and it must be an odd number),\n2 indicates read and write high availability (at least 5 FEs must be deployed, FeSpec.CreateInstanceSpec.Count>=5, and it must be an odd number).", }, + "case_sensitive": { Type: schema.TypeInt, Optional: true, Description: "Whether the table name is case sensitive, 0 refers to sensitive, 1 refers to insensitive, compared in lowercase; 2 refers to insensitive, and the table name is changed to lowercase for storage.", }, + "enable_multi_zones": { Type: schema.TypeBool, Optional: true, Description: "Whether to enable multi-availability zone.", }, + "user_multi_zone_infos": { Type: schema.TypeList, Optional: true, @@ -182,33 +194,21 @@ func ResourceTencentCloudCdwdorisInstance() *schema.Resource { "zone": { Type: schema.TypeString, Optional: true, - Description: "Availability zone Note: This field may return null, indicating that no valid values can be obtained.", + Description: "Availability zone\nNote: This field may return null, indicating that no valid values can be obtained.", }, "subnet_id": { Type: schema.TypeString, Optional: true, - Description: "Subnet ID Note: This field may return null, indicating that no valid values can be obtained.", + Description: "Subnet ID\nNote: This field may return null, indicating that no valid values can be obtained.", }, "subnet_ip_num": { Type: schema.TypeInt, Optional: true, - Description: "The number of available IP addresses in the current subnet Note: This field may return null, indicating that no valid values can be obtained.", + Description: "The number of available IP addresses in the current subnet\nNote: This field may return null, indicating that no valid values can be obtained.", }, }, }, }, - "security_group_ids": { - Type: schema.TypeList, - Optional: true, - Elem: &schema.Schema{Type: schema.TypeString}, - Description: "Security Group Id list.", - }, - "workload_group_status": { - Type: schema.TypeString, - Required: true, - ValidateFunc: tccommon.ValidateAllowedStringValue(WORKLOAD_GROUP_STATUS), - Description: "Whether to enable resource group. `open` - enable, `close` - disable.", - }, }, } } @@ -217,13 +217,16 @@ func resourceTencentCloudCdwdorisInstanceCreate(d *schema.ResourceData, meta int defer tccommon.LogElapsed("resource.tencentcloud_cdwdoris_instance.create")() defer tccommon.InconsistentCheck(d, meta)() + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + + var ( + instanceId string + ) var ( - logId = tccommon.GetLogId(tccommon.ContextNil) - ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - request = cdwdorisv20211228.NewCreateInstanceNewRequest() - response = cdwdorisv20211228.NewCreateInstanceNewResponse() - instanceId string - workloadGroupStatus string + request = cdwdorisv20211228.NewCreateInstanceNewRequest() + response = cdwdorisv20211228.NewCreateInstanceNewResponse() ) if v, ok := d.GetOk("zone"); ok { @@ -235,15 +238,12 @@ func resourceTencentCloudCdwdorisInstanceCreate(d *schema.ResourceData, meta int if v, ok := feSpecMap["spec_name"]; ok { createInstanceSpec.SpecName = helper.String(v.(string)) } - if v, ok := feSpecMap["count"]; ok { createInstanceSpec.Count = helper.IntUint64(v.(int)) } - if v, ok := feSpecMap["disk_size"]; ok { createInstanceSpec.DiskSize = helper.IntUint64(v.(int)) } - request.FeSpec = &createInstanceSpec } @@ -252,15 +252,12 @@ func resourceTencentCloudCdwdorisInstanceCreate(d *schema.ResourceData, meta int if v, ok := beSpecMap["spec_name"]; ok { createInstanceSpec2.SpecName = helper.String(v.(string)) } - if v, ok := beSpecMap["count"]; ok { createInstanceSpec2.Count = helper.IntUint64(v.(int)) } - if v, ok := beSpecMap["disk_size"]; ok { createInstanceSpec2.DiskSize = helper.IntUint64(v.(int)) } - request.BeSpec = &createInstanceSpec2 } @@ -285,19 +282,15 @@ func resourceTencentCloudCdwdorisInstanceCreate(d *schema.ResourceData, meta int if v, ok := chargePropertiesMap["charge_type"]; ok { chargeProperties.ChargeType = helper.String(v.(string)) } - if v, ok := chargePropertiesMap["renew_flag"]; ok { chargeProperties.RenewFlag = helper.IntInt64(v.(int)) } - if v, ok := chargePropertiesMap["time_span"]; ok { chargeProperties.TimeSpan = helper.IntInt64(v.(int)) } - if v, ok := chargePropertiesMap["time_unit"]; ok { chargeProperties.TimeUnit = helper.String(v.(string)) } - request.ChargeProperties = &chargeProperties } @@ -316,11 +309,9 @@ func resourceTencentCloudCdwdorisInstanceCreate(d *schema.ResourceData, meta int if v, ok := tagsMap["tag_key"]; ok { tag.TagKey = helper.String(v.(string)) } - if v, ok := tagsMap["tag_value"]; ok { tag.TagValue = helper.String(v.(string)) } - request.Tags = append(request.Tags, &tag) } } @@ -342,15 +333,12 @@ func resourceTencentCloudCdwdorisInstanceCreate(d *schema.ResourceData, meta int if v, ok := userMultiZoneInfosMap["zone"]; ok { networkInfo.Zone = helper.String(v.(string)) } - if v, ok := userMultiZoneInfosMap["subnet_id"]; ok { networkInfo.SubnetId = helper.String(v.(string)) } - if v, ok := userMultiZoneInfosMap["subnet_ip_num"]; ok { networkInfo.SubnetIpNum = helper.IntInt64(v.(int)) } - request.UserMultiZoneInfos = &networkInfo } @@ -359,117 +347,18 @@ func resourceTencentCloudCdwdorisInstanceCreate(d *schema.ResourceData, meta int if e != nil { return tccommon.RetryError(e) } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s] ", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } - response = result return nil }) - if err != nil { log.Printf("[CRITAL]%s create cdwdoris instance failed, reason:%+v", logId, err) return err } - instanceId = *response.Response.InstanceId d.SetId(instanceId) - // wait - waitRequest := cdwdorisv20211228.NewDescribeInstanceStateRequest() - waitRequest.InstanceId = &instanceId - err = resource.Retry(tccommon.ReadRetryTimeout*10, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().DescribeInstanceStateWithContext(ctx, waitRequest) - if e != nil { - return tccommon.RetryError(e) - } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s] ", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) - } - - if *result.Response.InstanceState != INSTANCE_STATE_SERVING { - return resource.RetryableError(fmt.Errorf("instance status is %s, retry...", *result.Response.InstanceState)) - } - - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create cdwdoris instance failed, reason:%+v", logId, err) - return err - } - - if v, ok := d.GetOk("security_group_ids"); ok { - securityGroupIds := v.([]interface{}) - tmpList := make([]*string, 0, len(securityGroupIds)) - for _, item := range securityGroupIds { - securityGroupId := item.(string) - tmpList = append(tmpList, &securityGroupId) - } - - sgRequest := cdwdorisv20211228.NewModifySecurityGroupsRequest() - sgRequest.InstanceId = &instanceId - sgRequest.ModifySecurityGroupIds = tmpList - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().ModifySecurityGroupsWithContext(ctx, sgRequest) - if e != nil { - return tccommon.RetryError(e) - } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s] ", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) - } - - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s modify cdwdoris Security Groups failed, reason:%+v", logId, err) - return err - } - } - - if v, ok := d.GetOk("workload_group_status"); ok { - workloadGroupStatus = v.(string) - if workloadGroupStatus == WORKLOAD_GROUP_STATUS_OPEN { - workloadGroupStatusRequest := cdwdorisv20211228.NewModifyWorkloadGroupStatusRequest() - workloadGroupStatusRequest.InstanceId = &instanceId - workloadGroupStatusRequest.OperationType = &workloadGroupStatus - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().ModifyWorkloadGroupStatusWithContext(ctx, workloadGroupStatusRequest) - if e != nil { - return tccommon.RetryError(e) - } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s] ", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) - } - - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s modify cdwdoris instance workload group status failed, reason:%+v", logId, err) - return err - } - - // wait - err = resource.Retry(tccommon.ReadRetryTimeout*10, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().DescribeInstanceStateWithContext(ctx, waitRequest) - if e != nil { - return tccommon.RetryError(e) - } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s] ", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) - } - - if *result.Response.InstanceState != INSTANCE_STATE_SERVING { - return resource.RetryableError(fmt.Errorf("instance status is %s, retry...", *result.Response.InstanceState)) - } - - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s modify cdwdoris instance workload group status failed, reason:%+v", logId, err) - return err - } - } - } - return resourceTencentCloudCdwdorisInstanceRead(d, meta) } @@ -477,12 +366,13 @@ func resourceTencentCloudCdwdorisInstanceRead(d *schema.ResourceData, meta inter defer tccommon.LogElapsed("resource.tencentcloud_cdwdoris_instance.read")() defer tccommon.InconsistentCheck(d, meta)() - var ( - logId = tccommon.GetLogId(tccommon.ContextNil) - ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - service = CdwdorisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - instanceId = d.Id() - ) + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + + service := CdwdorisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + instanceId := d.Id() respData, err := service.DescribeCdwdorisInstanceById(ctx, instanceId) if err != nil { @@ -491,16 +381,27 @@ func resourceTencentCloudCdwdorisInstanceRead(d *schema.ResourceData, meta inter if respData == nil { d.SetId("") - log.Printf("[WARN]%s resource `cdwdoris_instance` [%s] not found, please check if it has been deleted.", logId, d.Id()) + log.Printf("[WARN]%s resource `cdwdoris_instance` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) return nil } + if respData.InstanceId != nil { + _ = d.Set("instance_id", respData.InstanceId) + } if respData.InstanceName != nil { _ = d.Set("instance_name", respData.InstanceName) } + if respData.Status != nil { + _ = d.Set("status", respData.Status) + } + if respData.Version != nil { - _ = d.Set("product_version", respData.Version) + _ = d.Set("version", respData.Version) + } + + if respData.Region != nil { + _ = d.Set("region", respData.Region) } if respData.Zone != nil { @@ -508,63 +409,226 @@ func resourceTencentCloudCdwdorisInstanceRead(d *schema.ResourceData, meta inter } if respData.VpcId != nil { - _ = d.Set("user_vpc_id", respData.VpcId) + _ = d.Set("vpc_id", respData.VpcId) } if respData.SubnetId != nil { - _ = d.Set("user_subnet_id", respData.SubnetId) + _ = d.Set("subnet_id", respData.SubnetId) + } + + if respData.PayMode != nil { + _ = d.Set("pay_mode", respData.PayMode) + } + + if respData.CreateTime != nil { + _ = d.Set("create_time", respData.CreateTime) } + if respData.ExpireTime != nil { + _ = d.Set("expire_time", respData.ExpireTime) + } + + masterSummaryMap := map[string]interface{}{} + if respData.MasterSummary != nil { - masterSummaryMap := map[string]interface{}{} if respData.MasterSummary.Spec != nil { - masterSummaryMap["spec_name"] = respData.MasterSummary.Spec + masterSummaryMap["spec"] = respData.MasterSummary.Spec } if respData.MasterSummary.NodeSize != nil { - masterSummaryMap["count"] = respData.MasterSummary.NodeSize + masterSummaryMap["node_size"] = respData.MasterSummary.NodeSize + } + + if respData.MasterSummary.Core != nil { + masterSummaryMap["core"] = respData.MasterSummary.Core + } + + if respData.MasterSummary.Memory != nil { + masterSummaryMap["memory"] = respData.MasterSummary.Memory } if respData.MasterSummary.Disk != nil { - masterSummaryMap["disk_size"] = respData.MasterSummary.Disk + masterSummaryMap["disk"] = respData.MasterSummary.Disk + } + + if respData.MasterSummary.DiskType != nil { + masterSummaryMap["disk_type"] = respData.MasterSummary.DiskType + } + + if respData.MasterSummary.DiskDesc != nil { + masterSummaryMap["disk_desc"] = respData.MasterSummary.DiskDesc + } + + attachCBSSpecMap := map[string]interface{}{} + + if respData.MasterSummary.AttachCBSSpec != nil { + if respData.MasterSummary.AttachCBSSpec.DiskType != nil { + attachCBSSpecMap["disk_type"] = respData.MasterSummary.AttachCBSSpec.DiskType + } + + if respData.MasterSummary.AttachCBSSpec.DiskSize != nil { + attachCBSSpecMap["disk_size"] = respData.MasterSummary.AttachCBSSpec.DiskSize + } + + if respData.MasterSummary.AttachCBSSpec.DiskCount != nil { + attachCBSSpecMap["disk_count"] = respData.MasterSummary.AttachCBSSpec.DiskCount + } + + if respData.MasterSummary.AttachCBSSpec.DiskDesc != nil { + attachCBSSpecMap["disk_desc"] = respData.MasterSummary.AttachCBSSpec.DiskDesc + } + + masterSummaryMap["attach_cbs_spec"] = []interface{}{attachCBSSpecMap} + } + + if respData.MasterSummary.SubProductType != nil { + masterSummaryMap["sub_product_type"] = respData.MasterSummary.SubProductType + } + + if respData.MasterSummary.SpecCore != nil { + masterSummaryMap["spec_core"] = respData.MasterSummary.SpecCore + } + + if respData.MasterSummary.SpecMemory != nil { + masterSummaryMap["spec_memory"] = respData.MasterSummary.SpecMemory + } + + if respData.MasterSummary.DiskCount != nil { + masterSummaryMap["disk_count"] = respData.MasterSummary.DiskCount + } + + if respData.MasterSummary.Encrypt != nil { + masterSummaryMap["encrypt"] = respData.MasterSummary.Encrypt + } + + if respData.MasterSummary.MaxDiskSize != nil { + masterSummaryMap["max_disk_size"] = respData.MasterSummary.MaxDiskSize } - _ = d.Set("fe_spec", []interface{}{masterSummaryMap}) + _ = d.Set("master_summary", []interface{}{masterSummaryMap}) } + coreSummaryMap := map[string]interface{}{} + if respData.CoreSummary != nil { - coreSummaryMap := map[string]interface{}{} if respData.CoreSummary.Spec != nil { - coreSummaryMap["spec_name"] = respData.CoreSummary.Spec + coreSummaryMap["spec"] = respData.CoreSummary.Spec } if respData.CoreSummary.NodeSize != nil { - coreSummaryMap["count"] = respData.CoreSummary.NodeSize + coreSummaryMap["node_size"] = respData.CoreSummary.NodeSize + } + + if respData.CoreSummary.Core != nil { + coreSummaryMap["core"] = respData.CoreSummary.Core + } + + if respData.CoreSummary.Memory != nil { + coreSummaryMap["memory"] = respData.CoreSummary.Memory } if respData.CoreSummary.Disk != nil { - coreSummaryMap["disk_size"] = respData.CoreSummary.Disk + coreSummaryMap["disk"] = respData.CoreSummary.Disk } - _ = d.Set("be_spec", []interface{}{coreSummaryMap}) + if respData.CoreSummary.DiskType != nil { + coreSummaryMap["disk_type"] = respData.CoreSummary.DiskType + } + + if respData.CoreSummary.DiskDesc != nil { + coreSummaryMap["disk_desc"] = respData.CoreSummary.DiskDesc + } + + attachCBSSpecMap := map[string]interface{}{} + + if respData.CoreSummary.AttachCBSSpec != nil { + if respData.CoreSummary.AttachCBSSpec.DiskType != nil { + attachCBSSpecMap["disk_type"] = respData.CoreSummary.AttachCBSSpec.DiskType + } + + if respData.CoreSummary.AttachCBSSpec.DiskSize != nil { + attachCBSSpecMap["disk_size"] = respData.CoreSummary.AttachCBSSpec.DiskSize + } + + if respData.CoreSummary.AttachCBSSpec.DiskCount != nil { + attachCBSSpecMap["disk_count"] = respData.CoreSummary.AttachCBSSpec.DiskCount + } + + if respData.CoreSummary.AttachCBSSpec.DiskDesc != nil { + attachCBSSpecMap["disk_desc"] = respData.CoreSummary.AttachCBSSpec.DiskDesc + } + + coreSummaryMap["attach_cbs_spec"] = []interface{}{attachCBSSpecMap} + } + + if respData.CoreSummary.SubProductType != nil { + coreSummaryMap["sub_product_type"] = respData.CoreSummary.SubProductType + } + + if respData.CoreSummary.SpecCore != nil { + coreSummaryMap["spec_core"] = respData.CoreSummary.SpecCore + } + + if respData.CoreSummary.SpecMemory != nil { + coreSummaryMap["spec_memory"] = respData.CoreSummary.SpecMemory + } + + if respData.CoreSummary.DiskCount != nil { + coreSummaryMap["disk_count"] = respData.CoreSummary.DiskCount + } + + if respData.CoreSummary.Encrypt != nil { + coreSummaryMap["encrypt"] = respData.CoreSummary.Encrypt + } + + if respData.CoreSummary.MaxDiskSize != nil { + coreSummaryMap["max_disk_size"] = respData.CoreSummary.MaxDiskSize + } + + _ = d.Set("core_summary", []interface{}{coreSummaryMap}) } if respData.HA != nil { - if *respData.HA == "true" { - _ = d.Set("ha_flag", true) - } else { - _ = d.Set("ha_flag", false) - } + _ = d.Set("ha", respData.HA) } if respData.HaType != nil { _ = d.Set("ha_type", respData.HaType) } + if respData.AccessInfo != nil { + _ = d.Set("access_info", respData.AccessInfo) + } + + if respData.Id != nil { + _ = d.Set("id", respData.Id) + } + + if respData.RegionId != nil { + _ = d.Set("region_id", respData.RegionId) + } + + if respData.ZoneDesc != nil { + _ = d.Set("zone_desc", respData.ZoneDesc) + } + + if respData.FlowMsg != nil { + _ = d.Set("flow_msg", respData.FlowMsg) + } + + if respData.StatusDesc != nil { + _ = d.Set("status_desc", respData.StatusDesc) + } + + if respData.RenewFlag != nil { + _ = d.Set("renew_flag", respData.RenewFlag) + } + + tagsList := make([]map[string]interface{}, 0, len(respData.Tags)) if respData.Tags != nil { - tagsList := make([]map[string]interface{}, 0, len(respData.Tags)) for _, tags := range respData.Tags { tagsMap := map[string]interface{}{} + if tags.TagKey != nil { tagsMap["tag_key"] = tags.TagKey } @@ -579,28 +643,195 @@ func resourceTencentCloudCdwdorisInstanceRead(d *schema.ResourceData, meta inter _ = d.Set("tags", tagsList) } + if respData.Monitor != nil { + _ = d.Set("monitor", respData.Monitor) + } + + if respData.HasClsTopic != nil { + _ = d.Set("has_cls_topic", respData.HasClsTopic) + } + + if respData.ClsTopicId != nil { + _ = d.Set("cls_topic_id", respData.ClsTopicId) + } + + if respData.ClsLogSetId != nil { + _ = d.Set("cls_log_set_id", respData.ClsLogSetId) + } + + if respData.EnableXMLConfig != nil { + _ = d.Set("enable_xml_config", respData.EnableXMLConfig) + } + + if respData.RegionDesc != nil { + _ = d.Set("region_desc", respData.RegionDesc) + } + + if respData.Eip != nil { + _ = d.Set("eip", respData.Eip) + } + + if respData.CosMoveFactor != nil { + _ = d.Set("cos_move_factor", respData.CosMoveFactor) + } + + if respData.Kind != nil { + _ = d.Set("kind", respData.Kind) + } + + if respData.CosBucketName != nil { + _ = d.Set("cos_bucket_name", respData.CosBucketName) + } + + if respData.CanAttachCbs != nil { + _ = d.Set("can_attach_cbs", respData.CanAttachCbs) + } + + if respData.BuildVersion != nil { + _ = d.Set("build_version", respData.BuildVersion) + } + + if respData.Components != nil { + _ = d.Set("components", respData.Components) + } + + if respData.Characteristic != nil { + _ = d.Set("characteristic", respData.Characteristic) + } + + if respData.RestartTimeout != nil { + _ = d.Set("restart_timeout", respData.RestartTimeout) + } + + if respData.GraceShutdownWaitSeconds != nil { + _ = d.Set("grace_shutdown_wait_seconds", respData.GraceShutdownWaitSeconds) + } + + if respData.CaseSensitive != nil { + _ = d.Set("case_sensitive", respData.CaseSensitive) + } + + if respData.IsWhiteSGs != nil { + _ = d.Set("is_white_s_gs", respData.IsWhiteSGs) + } + if respData.BindSGs != nil { - tmpList := make([]string, 0, len(respData.BindSGs)) - for _, item := range respData.BindSGs { - tmpList = append(tmpList, *item) - } + _ = d.Set("bind_s_gs", respData.BindSGs) + } + + if respData.EnableMultiZones != nil { + _ = d.Set("enable_multi_zones", respData.EnableMultiZones) + } + + if respData.UserNetworkInfos != nil { + _ = d.Set("user_network_infos", respData.UserNetworkInfos) + } - _ = d.Set("security_group_ids", tmpList) + if respData.EnableCoolDown != nil { + _ = d.Set("enable_cool_down", respData.EnableCoolDown) } - respData1, err := service.DescribeCdwdorisWorkloadGroupsById(ctx, instanceId) + if respData.CoolDownBucket != nil { + _ = d.Set("cool_down_bucket", respData.CoolDownBucket) + } + + respData1, err := service.DescribeCdwdorisInstanceById1(ctx) if err != nil { return err } if respData1 == nil { d.SetId("") - log.Printf("[WARN]%s resource `cdwdoris_workload_group` [%s] not found, please check if it has been deleted.", logId, d.Id()) + log.Printf("[WARN]%s resource `cdwdoris_instance` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) return nil } + if respData1.InstanceState != nil { + _ = d.Set("instance_state", respData1.InstanceState) + } + + if respData1.FlowCreateTime != nil { + _ = d.Set("flow_create_time", respData1.FlowCreateTime) + } + + if respData1.FlowName != nil { + _ = d.Set("flow_name", respData1.FlowName) + } + + if respData1.FlowProgress != nil { + _ = d.Set("flow_progress", respData1.FlowProgress) + } - if respData1.Status != nil { - _ = d.Set("workload_group_status", respData1.Status) + if respData1.InstanceStateDesc != nil { + _ = d.Set("instance_state_desc", respData1.InstanceStateDesc) + } + + if respData1.FlowMsg != nil { + _ = d.Set("flow_msg", respData1.FlowMsg) + } + + respData2, err := service.DescribeCdwdorisInstanceById2(ctx) + if err != nil { + return err + } + + if respData2 == nil { + d.SetId("") + log.Printf("[WARN]%s resource `cdwdoris_instance` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + operationsList := make([]map[string]interface{}, 0, len(respData2.Operations)) + if respData2.Operations != nil { + for _, operations := range respData2.Operations { + operationsMap := map[string]interface{}{} + + if operations.Name != nil { + operationsMap["name"] = operations.Name + } + + if operations.Result != nil { + operationsMap["result"] = operations.Result + } + + if operations.Desc != nil { + operationsMap["desc"] = operations.Desc + } + + if operations.Level != nil { + operationsMap["level"] = operations.Level + } + + if operations.LevelDesc != nil { + operationsMap["level_desc"] = operations.LevelDesc + } + + if operations.StartTime != nil { + operationsMap["start_time"] = operations.StartTime + } + + if operations.EndTime != nil { + operationsMap["end_time"] = operations.EndTime + } + + if operations.ResultDesc != nil { + operationsMap["result_desc"] = operations.ResultDesc + } + + if operations.OperateUin != nil { + operationsMap["operate_uin"] = operations.OperateUin + } + + if operations.JobId != nil { + operationsMap["job_id"] = operations.JobId + } + + if operations.OperationDetail != nil { + operationsMap["operation_detail"] = operations.OperationDetail + } + + operationsList = append(operationsList, operationsMap) + } + + _ = d.Set("operations", operationsList) } return nil @@ -610,22 +841,34 @@ func resourceTencentCloudCdwdorisInstanceUpdate(d *schema.ResourceData, meta int defer tccommon.LogElapsed("resource.tencentcloud_cdwdoris_instance.update")() defer tccommon.InconsistentCheck(d, meta)() - var ( - logId = tccommon.GetLogId(tccommon.ContextNil) - ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - instanceId = d.Id() - ) + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - immutableArgs := []string{"zone", "fe_spec", "be_spec", "ha_flag", "user_vpc_id", "user_subnet_id", "product_version", "charge_type", "charge_properties", "doris_user_pwd", "tags", "case_sensitive", "enable_multi_zones", "user_multi_zone_infos"} + immutableArgs := []string{"zone", "fe_spec", "be_spec", "ha_flag", "user_vpc_id", "user_subnet_id", "product_version", "charge_properties", "doris_user_pwd", "tags", "case_sensitive", "enable_multi_zones", "user_multi_zone_infos"} for _, v := range immutableArgs { if d.HasChange(v) { return fmt.Errorf("argument `%s` cannot be changed", v) } } + instanceId := d.Id() + + needChange := false + mutableArgs := []string{"instance_id", "instance_name"} + for _, v := range mutableArgs { + if d.HasChange(v) { + needChange = true + break + } + } - if d.HasChange("instance_name") { + if needChange { request := cdwdorisv20211228.NewModifyInstanceRequest() - request.InstanceId = &instanceId + + if v, ok := d.GetOk("instance_id"); ok { + request.InstanceId = helper.String(v.(string)) + } + if v, ok := d.GetOk("instance_name"); ok { request.InstanceName = helper.String(v.(string)) } @@ -635,100 +878,185 @@ func resourceTencentCloudCdwdorisInstanceUpdate(d *schema.ResourceData, meta int if e != nil { return tccommon.RetryError(e) } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s] ", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } - return nil }) - if err != nil { - log.Printf("[CRITAL]%s update cdwdoris instance instance_name failed, reason:%+v", logId, err) + log.Printf("[CRITAL]%s update cdwdoris instance failed, reason:%+v", logId, err) return err } } - if d.HasChange("security_group_ids") { - oldValue, newValue := d.GetChange("security_group_ids") - oldSecurityGroupIds := oldValue.([]interface{}) - newSecurityGroupIds := newValue.([]interface{}) - tmpOld := make([]*string, 0, len(oldSecurityGroupIds)) - tmpNew := make([]*string, 0, len(newSecurityGroupIds)) - for _, item := range oldSecurityGroupIds { - securityGroupId := item.(string) - tmpOld = append(tmpOld, &securityGroupId) + needChange1 := false + mutableArgs1 := []string{"instance_id", "type", "node_count", "ha_type"} + for _, v := range mutableArgs1 { + if d.HasChange(v) { + needChange1 = true + break + } + } + + if needChange1 { + request1 := cdwdorisv20211228.NewScaleOutInstanceRequest() + + if v, ok := d.GetOk("instance_id"); ok { + request1.InstanceId = helper.String(v.(string)) } - for _, item := range newSecurityGroupIds { - securityGroupId := item.(string) - tmpNew = append(tmpNew, &securityGroupId) + if v, ok := d.GetOk("type"); ok { + request1.Type = helper.String(v.(string)) + } + + if v, ok := d.GetOkExists("node_count"); ok { + request1.NodeCount = helper.IntUint64(v.(int)) + } + + if v, ok := d.GetOkExists("ha_type"); ok { + request1.HaType = helper.IntInt64(v.(int)) } - request := cdwdorisv20211228.NewModifySecurityGroupsRequest() - request.InstanceId = &instanceId - request.OldSecurityGroupIds = tmpOld - request.ModifySecurityGroupIds = tmpNew err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().ModifySecurityGroupsWithContext(ctx, request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().ScaleOutInstanceWithContext(ctx, request1) if e != nil { return tccommon.RetryError(e) } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s] ", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request1.GetAction(), request1.ToJsonString(), result.ToJsonString()) } - return nil }) - if err != nil { - log.Printf("[CRITAL]%s modify cdwdoris Security Groups failed, reason:%+v", logId, err) + log.Printf("[CRITAL]%s update cdwdoris instance failed, reason:%+v", logId, err) return err } } - if d.HasChange("workload_group_status") { - workloadGroupStatus := d.Get("workload_group_status").(string) - request := cdwdorisv20211228.NewModifyWorkloadGroupStatusRequest() - request.InstanceId = &instanceId - request.OperationType = &workloadGroupStatus + needChange2 := false + mutableArgs2 := []string{"instance_id", "spec_name", "type"} + for _, v := range mutableArgs2 { + if d.HasChange(v) { + needChange2 = true + break + } + } + + if needChange2 { + request2 := cdwdorisv20211228.NewScaleUpInstanceRequest() + + if v, ok := d.GetOk("instance_id"); ok { + request2.InstanceId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("spec_name"); ok { + request2.SpecName = helper.String(v.(string)) + } + + if v, ok := d.GetOk("type"); ok { + request2.Type = helper.String(v.(string)) + } + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().ModifyWorkloadGroupStatusWithContext(ctx, request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().ScaleUpInstanceWithContext(ctx, request2) if e != nil { return tccommon.RetryError(e) } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s] ", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request2.GetAction(), request2.ToJsonString(), result.ToJsonString()) } - return nil }) - if err != nil { - log.Printf("[CRITAL]%s modify cdwdoris instance workload group status failed, reason:%+v", logId, err) + log.Printf("[CRITAL]%s update cdwdoris instance failed, reason:%+v", logId, err) return err } + } + + needChange3 := false + mutableArgs3 := []string{"instance_id", "del_hosts", "type", "ha_type"} + for _, v := range mutableArgs3 { + if d.HasChange(v) { + needChange3 = true + break + } + } + + if needChange3 { + request3 := cdwdorisv20211228.NewReduceInstanceRequest() + + if v, ok := d.GetOk("instance_id"); ok { + request3.InstanceId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("del_hosts"); ok { + delHostsSet := v.([]interface{}) + for i := range delHostsSet { + delHosts := delHostsSet[i].(string) + request3.DelHosts = append(request3.DelHosts, helper.String(delHosts)) + } + } - // wait - waitRequest := cdwdorisv20211228.NewDescribeInstanceStateRequest() - waitRequest.InstanceId = &instanceId - err = resource.Retry(tccommon.ReadRetryTimeout*10, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().DescribeInstanceStateWithContext(ctx, waitRequest) + if v, ok := d.GetOk("type"); ok { + request3.Type = helper.String(v.(string)) + } + + if v, ok := d.GetOkExists("ha_type"); ok { + request3.HaType = helper.IntInt64(v.(int)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().ReduceInstanceWithContext(ctx, request3) if e != nil { return tccommon.RetryError(e) } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s] ", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request3.GetAction(), request3.ToJsonString(), result.ToJsonString()) } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update cdwdoris instance failed, reason:%+v", logId, err) + return err + } + } - if *result.Response.InstanceState != INSTANCE_STATE_SERVING { - return resource.RetryableError(fmt.Errorf("instance status is %s, retry...", *result.Response.InstanceState)) - } + needChange4 := false + mutableArgs4 := []string{"instance_id", "type", "disk_size"} + for _, v := range mutableArgs4 { + if d.HasChange(v) { + needChange4 = true + break + } + } + + if needChange4 { + request4 := cdwdorisv20211228.NewResizeDiskRequest() + + if v, ok := d.GetOk("instance_id"); ok { + request4.InstanceId = helper.String(v.(string)) + } + if v, ok := d.GetOk("type"); ok { + request4.Type = helper.String(v.(string)) + } + + if v, ok := d.GetOkExists("disk_size"); ok { + request4.DiskSize = helper.IntUint64(v.(int)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().ResizeDiskWithContext(ctx, request4) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request4.GetAction(), request4.ToJsonString(), result.ToJsonString()) + } return nil }) - if err != nil { - log.Printf("[CRITAL]%s modify cdwdoris instance workload group status failed, reason:%+v", logId, err) + log.Printf("[CRITAL]%s update cdwdoris instance failed, reason:%+v", logId, err) return err } } + _ = instanceId return resourceTencentCloudCdwdorisInstanceRead(d, meta) } @@ -736,124 +1064,35 @@ func resourceTencentCloudCdwdorisInstanceDelete(d *schema.ResourceData, meta int defer tccommon.LogElapsed("resource.tencentcloud_cdwdoris_instance.delete")() defer tccommon.InconsistentCheck(d, meta)() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + + instanceId := d.Id() + var ( - logId = tccommon.GetLogId(tccommon.ContextNil) - ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - request = cdwdorisv20211228.NewDestroyInstanceRequest() - instanceId = d.Id() - chargeType string + request = cdwdorisv20211228.NewDestroyInstanceRequest() + response = cdwdorisv20211228.NewDestroyInstanceResponse() ) - if chargePropertiesMap, ok := helper.InterfacesHeadMap(d, "charge_properties"); ok { - if v, ok := chargePropertiesMap["charge_type"]; ok { - chargeType = v.(string) - } + if v, ok := d.GetOk("instance_id"); ok { + request.InstanceId = helper.String(v.(string)) } - request.InstanceId = &instanceId err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().DestroyInstanceWithContext(ctx, request) if e != nil { return tccommon.RetryError(e) } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s] ", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } - + response = result return nil }) - if err != nil { log.Printf("[CRITAL]%s delete cdwdoris instance failed, reason:%+v", logId, err) return err } - // wait - describeRequest := cdwdorisv20211228.NewDescribeInstancesRequest() - describeRequest.SearchInstanceId = helper.String(instanceId) - if chargeType == CHARGE_TYPE_POSTPAID_BY_HOUR { - err = resource.Retry(tccommon.ReadRetryTimeout*5, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().DescribeInstancesWithContext(ctx, describeRequest) - if e != nil { - return tccommon.RetryError(e) - } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s] ", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) - } - - if len(result.Response.InstancesList) != 0 { - instanceState := result.Response.InstancesList[0].Status - return resource.RetryableError(fmt.Errorf("instance status is %s, retry...", *instanceState)) - } - - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s delete cdwdoris instance failed, reason:%+v", logId, err) - return err - } - } else { - waitRequest := cdwdorisv20211228.NewDescribeInstanceStateRequest() - waitRequest.InstanceId = &instanceId - err = resource.Retry(tccommon.ReadRetryTimeout*5, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().DescribeInstanceStateWithContext(ctx, waitRequest) - if e != nil { - return tccommon.RetryError(e) - } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s] ", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) - } - - if *result.Response.InstanceState != INSTANCE_STATE_ISOLATED { - return resource.RetryableError(fmt.Errorf("instance status is %s, retry...", *result.Response.InstanceState)) - } - - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s delete cdwdoris instance failed, reason:%+v", logId, err) - return err - } - - // prepaid need delete again - if chargeType == CHARGE_TYPE_PREPAID { - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().DestroyInstanceWithContext(ctx, request) - if e != nil { - return tccommon.RetryError(e) - } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s] ", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) - } - - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s delete cdwdoris instance failed, reason:%+v", logId, err) - return err - } - - err = resource.Retry(tccommon.ReadRetryTimeout*5, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().DescribeInstancesWithContext(ctx, describeRequest) - if e != nil { - return tccommon.RetryError(e) - } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s] ", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) - } - - if len(result.Response.InstancesList) != 0 { - instanceState := result.Response.InstancesList[0].Status - return resource.RetryableError(fmt.Errorf("instance status is %s, retry...", *instanceState)) - } - - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s delete cdwdoris instance failed, reason:%+v", logId, err) - return err - } - } - } - + _ = instanceId return nil } diff --git a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance_extension.go b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance_extension.go new file mode 100644 index 0000000000..6543707fab --- /dev/null +++ b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance_extension.go @@ -0,0 +1 @@ +package cdwdoris diff --git a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_user.go b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_user.go index 7442787a4c..8d8e4fa456 100644 --- a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_user.go +++ b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_user.go @@ -3,9 +3,7 @@ package cdwdoris import ( "context" - "fmt" "log" - "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -19,67 +17,67 @@ func ResourceTencentCloudCdwdorisUser() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCdwdorisUserCreate, Read: resourceTencentCloudCdwdorisUserRead, - Update: resourceTencentCloudCdwdorisUserUpdate, Delete: resourceTencentCloudCdwdorisUserDelete, Schema: map[string]*schema.Schema{ "user_info": { Type: schema.TypeList, Required: true, + ForceNew: true, MaxItems: 1, - Description: "User info.", + Description: "User info", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "instance_id": { Type: schema.TypeString, Required: true, - Description: "Instance ID.", + Description: "Instance ID", }, - "username": { + "user_name": { Type: schema.TypeString, Required: true, - Description: "User name.", + Description: "User name", }, - "password": { + "pass_word": { Type: schema.TypeString, Required: true, - Sensitive: true, - Description: "Password.", + Description: "Password", }, "white_host": { Type: schema.TypeString, Optional: true, - Description: "The IP the user linked from.", + Description: "The IP the user linked from", }, - "describe": { + "old_white_host": { Type: schema.TypeString, Optional: true, - Description: "Describe.", + Description: "The IP from which the user link came before modification", }, - "cam_uin": { + "describe": { Type: schema.TypeString, Optional: true, - Description: "The bound sub user uin.", + Description: "Describe", }, - "cam_ranger_group_ids": { - Type: schema.TypeList, + "old_pwd": { + Type: schema.TypeString, Optional: true, - Elem: &schema.Schema{Type: schema.TypeInt}, - Description: "Ranger group id list.", + Description: "Old password", }, }, }, }, + "api_type": { Type: schema.TypeString, Required: true, ForceNew: true, - Description: "Api type.", + Description: "api type", }, + "user_privilege": { Type: schema.TypeInt, Optional: true, ForceNew: true, - Description: "User permission type. 0: Ordinary user; 1: Administrator.", + Description: "User permission type\n0: Ordinary user\n1: Administrator", }, }, } @@ -89,42 +87,41 @@ func resourceTencentCloudCdwdorisUserCreate(d *schema.ResourceData, meta interfa defer tccommon.LogElapsed("resource.tencentcloud_cdwdoris_user.create")() defer tccommon.InconsistentCheck(d, meta)() + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + var ( - logId = tccommon.GetLogId(tccommon.ContextNil) - ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - request = cdwdorisv20211228.NewActionAlterUserRequest() instanceId string - userName string + ) + var ( + request = cdwdorisv20211228.NewActionAlterUserRequest() + response = cdwdorisv20211228.NewActionAlterUserResponse() ) if userInfoMap, ok := helper.InterfacesHeadMap(d, "user_info"); ok { userInfo := cdwdorisv20211228.UserInfo{} if v, ok := userInfoMap["instance_id"]; ok { userInfo.InstanceId = helper.String(v.(string)) - instanceId = v.(string) } - - if v, ok := userInfoMap["username"]; ok { + if v, ok := userInfoMap["user_name"]; ok { userInfo.UserName = helper.String(v.(string)) - userName = v.(string) } - - if v, ok := userInfoMap["password"]; ok { + if v, ok := userInfoMap["pass_word"]; ok { userInfo.PassWord = helper.String(v.(string)) } - if v, ok := userInfoMap["white_host"]; ok { userInfo.WhiteHost = helper.String(v.(string)) } - + if v, ok := userInfoMap["old_white_host"]; ok { + userInfo.OldWhiteHost = helper.String(v.(string)) + } if v, ok := userInfoMap["describe"]; ok { userInfo.Describe = helper.String(v.(string)) } - - if v, ok := userInfoMap["cam_uin"]; ok { - userInfo.CamUin = helper.String(v.(string)) + if v, ok := userInfoMap["old_pwd"]; ok { + userInfo.OldPwd = helper.String(v.(string)) } - request.UserInfo = &userInfo } @@ -143,16 +140,15 @@ func resourceTencentCloudCdwdorisUserCreate(d *schema.ResourceData, meta interfa } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } - + response = result return nil }) - if err != nil { log.Printf("[CRITAL]%s create cdwdoris user failed, reason:%+v", logId, err) return err } - d.SetId(strings.Join([]string{instanceId, userName}, tccommon.FILED_SP)) + d.SetId(instanceId) return resourceTencentCloudCdwdorisUserRead(d, meta) } @@ -161,64 +157,6 @@ func resourceTencentCloudCdwdorisUserRead(d *schema.ResourceData, meta interface defer tccommon.LogElapsed("resource.tencentcloud_cdwdoris_user.read")() defer tccommon.InconsistentCheck(d, meta)() - var ( - logId = tccommon.GetLogId(tccommon.ContextNil) - ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - service = CdwdorisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - ) - - idSplit := strings.Split(d.Id(), tccommon.FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - - instanceId := idSplit[0] - userName := idSplit[1] - - respData, err := service.DescribeCdwdorisSqlApiById(ctx, instanceId, userName) - if err != nil { - return err - } - - if respData == nil { - d.SetId("") - log.Printf("[WARN]%s resource `cdwdoris_workload_group` [%s] not found, please check if it has been deleted.. ", logId, d.Id()) - return nil - } - - _ = d.Set("instance_id", instanceId) - workloadGroupsList := make([]map[string]interface{}, 0) - workloadGroupsMap := map[string]interface{}{} - if respData.WorkloadGroupName != nil { - workloadGroupsMap["workload_group_name"] = respData.WorkloadGroupName - } - - if respData.CpuShare != nil { - workloadGroupsMap["cpu_share"] = respData.CpuShare - } - - if respData.MemoryLimit != nil { - workloadGroupsMap["memory_limit"] = respData.MemoryLimit - } - - if respData.EnableMemoryOverCommit != nil { - workloadGroupsMap["enable_memory_over_commit"] = respData.EnableMemoryOverCommit - } - - if respData.CpuHardLimit != nil { - workloadGroupsMap["cpu_hard_limit"] = respData.CpuHardLimit - } - - workloadGroupsList = append(workloadGroupsList, workloadGroupsMap) - _ = d.Set("workload_group", workloadGroupsList) - - return nil -} - -func resourceTencentCloudCdwdorisUserUpdate(d *schema.ResourceData, meta interface{}) error { - defer tccommon.LogElapsed("resource.tencentcloud_cdwdoris_user.update")() - defer tccommon.InconsistentCheck(d, meta)() - return nil } diff --git a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_user_extension.go b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_user_extension.go new file mode 100644 index 0000000000..6543707fab --- /dev/null +++ b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_user_extension.go @@ -0,0 +1 @@ +package cdwdoris diff --git a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_workload_group.go b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_workload_group.go index f8175a1135..d9981f33e7 100644 --- a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_workload_group.go +++ b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_workload_group.go @@ -5,7 +5,6 @@ import ( "context" "fmt" "log" - "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -21,48 +20,44 @@ func ResourceTencentCloudCdwdorisWorkloadGroup() *schema.Resource { Read: resourceTencentCloudCdwdorisWorkloadGroupRead, Update: resourceTencentCloudCdwdorisWorkloadGroupUpdate, Delete: resourceTencentCloudCdwdorisWorkloadGroupDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, Schema: map[string]*schema.Schema{ "instance_id": { Type: schema.TypeString, Required: true, - ForceNew: true, - Description: "Instance id.", + Description: "Instance id", }, + "workload_group": { Type: schema.TypeList, Optional: true, MaxItems: 1, - Description: "Resource group configuration.", + Description: "Resource group configuration", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "workload_group_name": { Type: schema.TypeString, Optional: true, - ForceNew: true, - Description: "Workload group name. Note: This field may return null, indicating that no valid value can be obtained.", + Description: "Workload group name\nNote: This field may return null, indicating that no valid value can be obtained.", }, "cpu_share": { Type: schema.TypeInt, Optional: true, - Description: "CPU weight. Note: This field may return null, indicating that no valid value can be obtained.", + Description: "CPU weight\nNote: This field may return null, indicating that no valid value can be obtained.", }, "memory_limit": { Type: schema.TypeInt, Optional: true, - Description: "Memory limit, the sum of the memory limit values of all resource groups should be less than or equal to 100. Note: This field may return null, indicating that no valid value can be obtained.", + Description: "Memory limit, the sum of the memory limit values of all resource groups should be less than or equal to 100\nNote: This field may return null, indicating that no valid value can be obtained.", }, "enable_memory_over_commit": { Type: schema.TypeBool, Optional: true, - Description: "Whether to allow over-allocation. Note: This field may return null, indicating that no valid value can be obtained.", + Description: "Whether to allow over-allocation\nNote: This field may return null, indicating that no valid value can be obtained.", }, "cpu_hard_limit": { Type: schema.TypeString, Optional: true, - Description: "Cpu hard limit. Note: This field may return null, indicating that no valid value can be obtained.", + Description: "Cpu hard limit\nNote: This field may return null, indicating that no valid value can be obtained.", }, }, }, @@ -75,42 +70,39 @@ func resourceTencentCloudCdwdorisWorkloadGroupCreate(d *schema.ResourceData, met defer tccommon.LogElapsed("resource.tencentcloud_cdwdoris_workload_group.create")() defer tccommon.InconsistentCheck(d, meta)() + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + + var ( + instanceId string + ) var ( - logId = tccommon.GetLogId(tccommon.ContextNil) - ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - request = cdwdorisv20211228.NewCreateWorkloadGroupRequest() - instanceId string - workloadGroupName string + request = cdwdorisv20211228.NewCreateWorkloadGroupRequest() + response = cdwdorisv20211228.NewCreateWorkloadGroupResponse() ) if v, ok := d.GetOk("instance_id"); ok { request.InstanceId = helper.String(v.(string)) - instanceId = v.(string) } if workloadGroupMap, ok := helper.InterfacesHeadMap(d, "workload_group"); ok { workloadGroupConfig := cdwdorisv20211228.WorkloadGroupConfig{} if v, ok := workloadGroupMap["workload_group_name"]; ok { workloadGroupConfig.WorkloadGroupName = helper.String(v.(string)) - workloadGroupName = v.(string) } - if v, ok := workloadGroupMap["cpu_share"]; ok { workloadGroupConfig.CpuShare = helper.IntInt64(v.(int)) } - if v, ok := workloadGroupMap["memory_limit"]; ok { workloadGroupConfig.MemoryLimit = helper.IntInt64(v.(int)) } - if v, ok := workloadGroupMap["enable_memory_over_commit"]; ok { workloadGroupConfig.EnableMemoryOverCommit = helper.Bool(v.(bool)) } - if v, ok := workloadGroupMap["cpu_hard_limit"]; ok { workloadGroupConfig.CpuHardLimit = helper.String(v.(string)) } - request.WorkloadGroup = &workloadGroupConfig } @@ -119,18 +111,19 @@ func resourceTencentCloudCdwdorisWorkloadGroupCreate(d *schema.ResourceData, met if e != nil { return tccommon.RetryError(e) } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]. ", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } - + response = result return nil }) - if err != nil { log.Printf("[CRITAL]%s create cdwdoris workload group failed, reason:%+v", logId, err) return err } - d.SetId(strings.Join([]string{instanceId, workloadGroupName}, tccommon.FILED_SP)) + instanceId = *response.Response.InstanceId + + d.SetId(instanceId) return resourceTencentCloudCdwdorisWorkloadGroupRead(d, meta) } @@ -139,56 +132,95 @@ func resourceTencentCloudCdwdorisWorkloadGroupRead(d *schema.ResourceData, meta defer tccommon.LogElapsed("resource.tencentcloud_cdwdoris_workload_group.read")() defer tccommon.InconsistentCheck(d, meta)() - var ( - logId = tccommon.GetLogId(tccommon.ContextNil) - ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - service = CdwdorisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - ) + logId := tccommon.GetLogId(tccommon.ContextNil) - idSplit := strings.Split(d.Id(), tccommon.FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - instanceId := idSplit[0] - workloadGroupName := idSplit[1] + service := CdwdorisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - respData, err := service.DescribeCdwdorisWorkloadGroupById(ctx, instanceId, workloadGroupName) + instanceId := d.Id() + + respData, err := service.DescribeCdwdorisWorkloadGroupById(ctx, instanceId) if err != nil { return err } if respData == nil { d.SetId("") - log.Printf("[WARN]%s resource `cdwdoris_workload_group` [%s] not found, please check if it has been deleted.. ", logId, d.Id()) + log.Printf("[WARN]%s resource `cdwdoris_workload_group` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) return nil } + workloadGroupsList := make([]map[string]interface{}, 0, len(respData.WorkloadGroups)) + if respData.WorkloadGroups != nil { + for _, workloadGroups := range respData.WorkloadGroups { + workloadGroupsMap := map[string]interface{}{} + + if workloadGroups.WorkloadGroupName != nil { + workloadGroupsMap["workload_group_name"] = workloadGroups.WorkloadGroupName + } - _ = d.Set("instance_id", instanceId) - workloadGroupsList := make([]map[string]interface{}, 0) - workloadGroupsMap := map[string]interface{}{} - if respData.WorkloadGroupName != nil { - workloadGroupsMap["workload_group_name"] = respData.WorkloadGroupName + if workloadGroups.CpuShare != nil { + workloadGroupsMap["cpu_share"] = workloadGroups.CpuShare + } + + if workloadGroups.MemoryLimit != nil { + workloadGroupsMap["memory_limit"] = workloadGroups.MemoryLimit + } + + if workloadGroups.EnableMemoryOverCommit != nil { + workloadGroupsMap["enable_memory_over_commit"] = workloadGroups.EnableMemoryOverCommit + } + + if workloadGroups.CpuHardLimit != nil { + workloadGroupsMap["cpu_hard_limit"] = workloadGroups.CpuHardLimit + } + + workloadGroupsList = append(workloadGroupsList, workloadGroupsMap) + } + + _ = d.Set("workload_groups", workloadGroupsList) + } + + if respData.Status != nil { + _ = d.Set("status", respData.Status) } - if respData.CpuShare != nil { - workloadGroupsMap["cpu_share"] = respData.CpuShare + if respData.ErrorMsg != nil { + _ = d.Set("error_msg", respData.ErrorMsg) } - if respData.MemoryLimit != nil { - workloadGroupsMap["memory_limit"] = respData.MemoryLimit + respData1, err := service.DescribeCdwdorisWorkloadGroupById1(ctx, instanceId) + if err != nil { + return err } - if respData.EnableMemoryOverCommit != nil { - workloadGroupsMap["enable_memory_over_commit"] = respData.EnableMemoryOverCommit + if respData1 == nil { + d.SetId("") + log.Printf("[WARN]%s resource `cdwdoris_workload_group` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil } + userBindInfosList := make([]map[string]interface{}, 0, len(respData1.UserBindInfos)) + if respData1.UserBindInfos != nil { + for _, userBindInfos := range respData1.UserBindInfos { + userBindInfosMap := map[string]interface{}{} + + if userBindInfos.UserName != nil { + userBindInfosMap["user_name"] = userBindInfos.UserName + } + + if userBindInfos.WorkloadGroupName != nil { + userBindInfosMap["workload_group_name"] = userBindInfos.WorkloadGroupName + } - if respData.CpuHardLimit != nil { - workloadGroupsMap["cpu_hard_limit"] = respData.CpuHardLimit + userBindInfosList = append(userBindInfosList, userBindInfosMap) + } + + _ = d.Set("user_bind_infos", userBindInfosList) } - workloadGroupsList = append(workloadGroupsList, workloadGroupsMap) - _ = d.Set("workload_group", workloadGroupsList) + if respData1.ErrorMsg != nil { + _ = d.Set("error_msg", respData1.ErrorMsg) + } return nil } @@ -197,56 +229,65 @@ func resourceTencentCloudCdwdorisWorkloadGroupUpdate(d *schema.ResourceData, met defer tccommon.LogElapsed("resource.tencentcloud_cdwdoris_workload_group.update")() defer tccommon.InconsistentCheck(d, meta)() - var ( - logId = tccommon.GetLogId(tccommon.ContextNil) - ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - request = cdwdorisv20211228.NewModifyWorkloadGroupRequest() - ) - - idSplit := strings.Split(d.Id(), tccommon.FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } + logId := tccommon.GetLogId(tccommon.ContextNil) - instanceId := idSplit[0] - workloadGroupName := idSplit[1] - request.InstanceId = &instanceId - if workloadGroupMap, ok := helper.InterfacesHeadMap(d, "workload_group"); ok { - workloadGroupConfig := cdwdorisv20211228.WorkloadGroupConfig{} - workloadGroupConfig.WorkloadGroupName = helper.String(workloadGroupName) - if v, ok := workloadGroupMap["cpu_share"]; ok { - workloadGroupConfig.CpuShare = helper.IntInt64(v.(int)) - } + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - if v, ok := workloadGroupMap["memory_limit"]; ok { - workloadGroupConfig.MemoryLimit = helper.IntInt64(v.(int)) + immutableArgs := []string{"instance_id"} + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) } - - if v, ok := workloadGroupMap["enable_memory_over_commit"]; ok { - workloadGroupConfig.EnableMemoryOverCommit = helper.Bool(v.(bool)) - } - - if v, ok := workloadGroupMap["cpu_hard_limit"]; ok { - workloadGroupConfig.CpuHardLimit = helper.String(v.(string)) + } + instanceId := d.Id() + + needChange := false + mutableArgs := []string{"workload_group"} + for _, v := range mutableArgs { + if d.HasChange(v) { + needChange = true + break } - - request.WorkloadGroup = &workloadGroupConfig } - err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().ModifyWorkloadGroupWithContext(ctx, request) - if e != nil { - return tccommon.RetryError(e) - } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]. ", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + if needChange { + request := cdwdorisv20211228.NewModifyWorkloadGroupRequest() + + request.InstanceId = helper.String(instanceId) + + if workloadGroupMap, ok := helper.InterfacesHeadMap(d, "workload_group"); ok { + workloadGroupConfig := cdwdorisv20211228.WorkloadGroupConfig{} + if v, ok := workloadGroupMap["workload_group_name"]; ok { + workloadGroupConfig.WorkloadGroupName = helper.String(v.(string)) + } + if v, ok := workloadGroupMap["cpu_share"]; ok { + workloadGroupConfig.CpuShare = helper.IntInt64(v.(int)) + } + if v, ok := workloadGroupMap["memory_limit"]; ok { + workloadGroupConfig.MemoryLimit = helper.IntInt64(v.(int)) + } + if v, ok := workloadGroupMap["enable_memory_over_commit"]; ok { + workloadGroupConfig.EnableMemoryOverCommit = helper.Bool(v.(bool)) + } + if v, ok := workloadGroupMap["cpu_hard_limit"]; ok { + workloadGroupConfig.CpuHardLimit = helper.String(v.(string)) + } + request.WorkloadGroup = &workloadGroupConfig } - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s update cdwdoris workload group failed, reason:%+v", logId, err) - return err + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().ModifyWorkloadGroupWithContext(ctx, request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update cdwdoris workload group failed, reason:%+v", logId, err) + return err + } } return resourceTencentCloudCdwdorisWorkloadGroupRead(d, meta) @@ -256,36 +297,33 @@ func resourceTencentCloudCdwdorisWorkloadGroupDelete(d *schema.ResourceData, met defer tccommon.LogElapsed("resource.tencentcloud_cdwdoris_workload_group.delete")() defer tccommon.InconsistentCheck(d, meta)() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + + instanceId := d.Id() + var ( - logId = tccommon.GetLogId(tccommon.ContextNil) - ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - request = cdwdorisv20211228.NewDeleteWorkloadGroupRequest() + request = cdwdorisv20211228.NewDeleteWorkloadGroupRequest() + response = cdwdorisv20211228.NewDeleteWorkloadGroupResponse() ) - idSplit := strings.Split(d.Id(), tccommon.FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - - instanceId := idSplit[0] - workloadGroupName := idSplit[1] request.InstanceId = helper.String(instanceId) - request.WorkloadGroupName = helper.String(workloadGroupName) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().DeleteWorkloadGroupWithContext(ctx, request) if e != nil { return tccommon.RetryError(e) } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]. ", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } - + response = result return nil }) - if err != nil { log.Printf("[CRITAL]%s delete cdwdoris workload group failed, reason:%+v", logId, err) return err } + _ = response return nil } diff --git a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_workload_group_extension.go b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_workload_group_extension.go new file mode 100644 index 0000000000..6543707fab --- /dev/null +++ b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_workload_group_extension.go @@ -0,0 +1 @@ +package cdwdoris diff --git a/tencentcloud/services/cdwdoris/resource_test.go b/tencentcloud/services/cdwdoris/resource_test.go new file mode 100644 index 0000000000..4242cc8906 --- /dev/null +++ b/tencentcloud/services/cdwdoris/resource_test.go @@ -0,0 +1,11 @@ +package cdwdoris_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestMain(m *testing.M) { + resource.TestMain(m) +} diff --git a/tencentcloud/services/cdwdoris/service_tencentcloud_cdwdoris.go b/tencentcloud/services/cdwdoris/service_tencentcloud_cdwdoris.go index 137529bb4f..e334083dfe 100644 --- a/tencentcloud/services/cdwdoris/service_tencentcloud_cdwdoris.go +++ b/tencentcloud/services/cdwdoris/service_tencentcloud_cdwdoris.go @@ -5,12 +5,11 @@ import ( "context" "log" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" - cdwdorisv20211228 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwdoris/v20211228" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) @@ -26,7 +25,7 @@ func (me *CdwdorisService) DescribeCdwdorisInstanceById(ctx context.Context, ins logId := tccommon.GetLogId(ctx) request := cdwdorisv20211228.NewDescribeInstanceRequest() - request.InstanceId = &instanceId + request.InstanceId = helper.String(instanceId) defer func() { if errRet != nil { @@ -41,7 +40,6 @@ func (me *CdwdorisService) DescribeCdwdorisInstanceById(ctx context.Context, ins errRet = err return } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) if response.Response == nil { @@ -100,7 +98,7 @@ func (me *CdwdorisService) DescribeCdwdorisInstanceById2(ctx context.Context) (r return } -func (me *CdwdorisService) DescribeCdwdorisWorkloadGroupById(ctx context.Context, instanceId, workloadGroupName string) (workloadGroupConfig *cdwdorisv20211228.WorkloadGroupConfig, errRet error) { +func (me *CdwdorisService) DescribeCdwdorisWorkloadGroupById(ctx context.Context, instanceId string) (ret *cdwdorisv20211228.DescribeWorkloadGroupResponseParams, errRet error) { logId := tccommon.GetLogId(ctx) request := cdwdorisv20211228.NewDescribeWorkloadGroupRequest() @@ -119,27 +117,16 @@ func (me *CdwdorisService) DescribeCdwdorisWorkloadGroupById(ctx context.Context errRet = err return } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - if response == nil || len(response.Response.WorkloadGroups) == 0 { - return - } - - for _, item := range response.Response.WorkloadGroups { - if *item.WorkloadGroupName == workloadGroupName { - workloadGroupConfig = item - return - } - } - + ret = response.Response return } -func (me *CdwdorisService) DescribeCdwdorisWorkloadGroupsById(ctx context.Context, instanceId string) (workloadGroup *cdwdorisv20211228.DescribeWorkloadGroupResponseParams, errRet error) { +func (me *CdwdorisService) DescribeCdwdorisWorkloadGroupById1(ctx context.Context, instanceId string) (ret *cdwdorisv20211228.DescribeUserBindWorkloadGroupResponseParams, errRet error) { logId := tccommon.GetLogId(ctx) - request := cdwdorisv20211228.NewDescribeWorkloadGroupRequest() + request := cdwdorisv20211228.NewDescribeUserBindWorkloadGroupRequest() request.InstanceId = helper.String(instanceId) defer func() { @@ -150,115 +137,13 @@ func (me *CdwdorisService) DescribeCdwdorisWorkloadGroupsById(ctx context.Contex ratelimit.Check(request.GetAction()) - response, err := me.client.UseCdwdorisV20211228Client().DescribeWorkloadGroup(request) + response, err := me.client.UseCdwdorisV20211228Client().DescribeUserBindWorkloadGroup(request) if err != nil { errRet = err return } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - if response == nil { - return - } - - workloadGroup = response.Response - - return -} - -func (me *CdwdorisService) DescribeCdwdorisSqlApiById(ctx context.Context, instanceId, userName string) (workloadGroupConfig *cdwdorisv20211228.WorkloadGroupConfig, errRet error) { - //logId := tccommon.GetLogId(ctx) - - //request := cdwdorisv20211228.NewDescribeSqlApisRequest() - //request.InstanceId = helper.String(instanceId) - //request.ApiType = helper.String("GetUsers") - //request.UserName = helper.String(userName) - // - //defer func() { - // if errRet != nil { - // log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - // } - //}() - // - //ratelimit.Check(request.GetAction()) - // - //response, err := me.client.UseCdwdorisV20211228Client().DescribeSqlApis(request) - //if err != nil { - // errRet = err - // return - //} - // - //log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - // - //if response == nil || len(response.Response.) == 0 { - // return - //} - // - //for _, item := range response.Response.WorkloadGroups { - // if *item.WorkloadGroupName == workloadGroupName { - // workloadGroupConfig = item - // return - // } - //} - - return -} - -func (me *CdwdorisService) DescribeCdwdorisInstancesByFilter(ctx context.Context, param map[string]interface{}) (ret []*cdwdorisv20211228.InstanceInfo, errRet error) { - var ( - logId = tccommon.GetLogId(ctx) - request = cdwdorisv20211228.NewDescribeInstancesRequest() - ) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - for k, v := range param { - if k == "SearchInstanceId" { - request.SearchInstanceId = v.(*string) - } - - if k == "SearchInstanceName" { - request.SearchInstanceName = v.(*string) - } - - if k == "SearchTags" { - request.SearchTags = v.([]*cdwdorisv20211228.SearchTags) - } - } - - var ( - offset int64 = 0 - limit int64 = 10 - ) - - for { - request.Offset = &offset - request.Limit = &limit - ratelimit.Check(request.GetAction()) - response, err := me.client.UseCdwdorisV20211228Client().DescribeInstances(request) - if err != nil { - errRet = err - return - } - - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - if response == nil || len(response.Response.InstancesList) < 1 { - break - } - - ret = append(ret, response.Response.InstancesList...) - if len(response.Response.InstancesList) < int(limit) { - break - } - - offset += limit - } - + ret = response.Response return } From d338b546514c0278eebea5a913f2fe0891005fda Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Mon, 2 Sep 2024 17:17:56 +0800 Subject: [PATCH 2/7] refact(cdwdoris): regen provider --- .../cdwdoris/resource_tc_cdwdoris_instance.go | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go index 2ce18f087e..4ac9e3a9ab 100644 --- a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go +++ b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go @@ -209,6 +209,30 @@ func ResourceTencentCloudCdwdorisInstance() *schema.Resource { }, }, }, + + "instance_id": { + Type: schema.TypeString, + Computed: true, + Description: "Instance id", + }, + + "pay_mode": { + Type: schema.TypeString, + Computed: true, + Description: "pad mod", + }, + + "create_time": { + Type: schema.TypeString, + Computed: true, + Description: "create time", + }, + + "expire_time": { + Type: schema.TypeString, + Computed: true, + Description: "expire time", + }, }, } } @@ -397,7 +421,7 @@ func resourceTencentCloudCdwdorisInstanceRead(d *schema.ResourceData, meta inter } if respData.Version != nil { - _ = d.Set("version", respData.Version) + _ = d.Set("product_version", respData.Version) } if respData.Region != nil { @@ -409,11 +433,11 @@ func resourceTencentCloudCdwdorisInstanceRead(d *schema.ResourceData, meta inter } if respData.VpcId != nil { - _ = d.Set("vpc_id", respData.VpcId) + _ = d.Set("user_vpc_id", respData.VpcId) } if respData.SubnetId != nil { - _ = d.Set("subnet_id", respData.SubnetId) + _ = d.Set("user_subnet_id", respData.SubnetId) } if respData.PayMode != nil { From 8ac34de502f5db8fa3c591b335283fcf6fc2a7eb Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Mon, 2 Sep 2024 19:01:05 +0800 Subject: [PATCH 3/7] refact(cdwdoris): regen provider --- .../cdwdoris/resource_tc_cdwdoris_instance.go | 51 ++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go index 4ac9e3a9ab..b92a15867d 100644 --- a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go +++ b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go @@ -210,6 +210,14 @@ func ResourceTencentCloudCdwdorisInstance() *schema.Resource { }, }, + "security_group_ids": { + Type: schema.TypeList, + Description: "security group ids", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "instance_id": { Type: schema.TypeString, Computed: true, @@ -253,6 +261,10 @@ func resourceTencentCloudCdwdorisInstanceCreate(d *schema.ResourceData, meta int response = cdwdorisv20211228.NewCreateInstanceNewResponse() ) + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + if v, ok := d.GetOk("zone"); ok { request.Zone = helper.String(v.(string)) } @@ -398,6 +410,8 @@ func resourceTencentCloudCdwdorisInstanceRead(d *schema.ResourceData, meta inter instanceId := d.Id() + _ = d.Set("instance_id", instanceId) + respData, err := service.DescribeCdwdorisInstanceById(ctx, instanceId) if err != nil { return err @@ -869,7 +883,7 @@ func resourceTencentCloudCdwdorisInstanceUpdate(d *schema.ResourceData, meta int ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - immutableArgs := []string{"zone", "fe_spec", "be_spec", "ha_flag", "user_vpc_id", "user_subnet_id", "product_version", "charge_properties", "doris_user_pwd", "tags", "case_sensitive", "enable_multi_zones", "user_multi_zone_infos"} + immutableArgs := []string{"zone", "fe_spec", "be_spec", "ha_flag", "user_vpc_id", "user_subnet_id", "product_version", "charge_properties", "doris_user_pwd", "tags", "case_sensitive", "enable_multi_zones", "user_multi_zone_infos", "instance_id"} for _, v := range immutableArgs { if d.HasChange(v) { return fmt.Errorf("argument `%s` cannot be changed", v) @@ -1080,6 +1094,41 @@ func resourceTencentCloudCdwdorisInstanceUpdate(d *schema.ResourceData, meta int } } + needChange5 := false + mutableArgs5 := []string{"security_group_ids"} + for _, v := range mutableArgs5 { + if d.HasChange(v) { + needChange5 = true + break + } + } + + if needChange5 { + request5 := cdwdorisv20211228.NewModifySecurityGroupsRequest() + + if v, ok := d.GetOk("security_group_ids"); ok { + securityGroupIdsSet := v.([]interface{}) + for i := range securityGroupIdsSet { + securityGroupIds := securityGroupIdsSet[i].(string) + request5.SecurityGroupIds = append(request5.SecurityGroupIds, helper.String(securityGroupIds)) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().ModifySecurityGroupsWithContext(ctx, request5) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request5.GetAction(), request5.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update cdwdoris instance failed, reason:%+v", logId, err) + return err + } + } + _ = instanceId return resourceTencentCloudCdwdorisInstanceRead(d, meta) } From 67cd2f17a392abc362f2508afbfbc948b274d3df Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Mon, 2 Sep 2024 21:31:13 +0800 Subject: [PATCH 4/7] refact(cdwdoris): update provider --- .../cdwdoris/resource_tc_cdwdoris_instance.go | 117 +++++++++++++++++- 1 file changed, 115 insertions(+), 2 deletions(-) diff --git a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go index b92a15867d..f850edc015 100644 --- a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go +++ b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go @@ -212,12 +212,19 @@ func ResourceTencentCloudCdwdorisInstance() *schema.Resource { "security_group_ids": { Type: schema.TypeList, - Description: "security group ids", + Description: "Security Group Id list", Elem: &schema.Schema{ Type: schema.TypeString, }, }, + "workload_group_status": { + Type: schema.TypeString, + Required: true, + Description: "Whether to enable resource group. `open` - enable, `close` - disable", + ValidateFunc: tccommon.ValidateAllowedStringValue(WORKLOAD_GROUP_STATUS), + }, + "instance_id": { Type: schema.TypeString, Computed: true, @@ -241,6 +248,11 @@ func ResourceTencentCloudCdwdorisInstance() *schema.Resource { Computed: true, Description: "expire time", }, + + "operation_type": { + Type: schema.TypeString, + Description: "Operation Type", + }, }, } } @@ -393,6 +405,72 @@ func resourceTencentCloudCdwdorisInstanceCreate(d *schema.ResourceData, meta int return err } + var ( + request1 = cdwdorisv20211228.NewModifySecurityGroupsRequest() + response1 = cdwdorisv20211228.NewModifySecurityGroupsResponse() + ) + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + if v, ok := d.GetOk("security_group_ids"); ok { + securityGroupIdsSet := v.([]interface{}) + for i := range securityGroupIdsSet { + securityGroupIds := securityGroupIdsSet[i].(string) + request1.SecurityGroupIds = append(request1.SecurityGroupIds, helper.String(securityGroupIds)) + } + } + + err1 := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().ModifySecurityGroupsWithContext(ctx, request1) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request1.GetAction(), request1.ToJsonString(), result.ToJsonString()) + } + response1 = result + return nil + }) + if err1 != nil { + log.Printf("[CRITAL]%s create cdwdoris instance failed, reason:%+v", logId, err1) + return err1 + } + + var ( + request2 = cdwdorisv20211228.NewModifyWorkloadGroupStatusRequest() + response2 = cdwdorisv20211228.NewModifyWorkloadGroupStatusResponse() + ) + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + if v, ok := d.GetOk("instance_id"); ok { + request2.InstanceId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("operation_type"); ok { + request2.OperationType = helper.String(v.(string)) + } + + err2 := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().ModifyWorkloadGroupStatusWithContext(ctx, request2) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request2.GetAction(), request2.ToJsonString(), result.ToJsonString()) + } + response2 = result + return nil + }) + if err2 != nil { + log.Printf("[CRITAL]%s create cdwdoris instance failed, reason:%+v", logId, err2) + return err2 + } + + _ = response2 + d.SetId(instanceId) return resourceTencentCloudCdwdorisInstanceRead(d, meta) @@ -883,7 +961,7 @@ func resourceTencentCloudCdwdorisInstanceUpdate(d *schema.ResourceData, meta int ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - immutableArgs := []string{"zone", "fe_spec", "be_spec", "ha_flag", "user_vpc_id", "user_subnet_id", "product_version", "charge_properties", "doris_user_pwd", "tags", "case_sensitive", "enable_multi_zones", "user_multi_zone_infos", "instance_id"} + immutableArgs := []string{"zone", "fe_spec", "be_spec", "ha_flag", "user_vpc_id", "user_subnet_id", "product_version", "charge_properties", "doris_user_pwd", "tags", "case_sensitive", "enable_multi_zones", "user_multi_zone_infos", "workload_group_status", "instance_id"} for _, v := range immutableArgs { if d.HasChange(v) { return fmt.Errorf("argument `%s` cannot be changed", v) @@ -1129,6 +1207,41 @@ func resourceTencentCloudCdwdorisInstanceUpdate(d *schema.ResourceData, meta int } } + needChange6 := false + mutableArgs6 := []string{"instance_id", "operation_type"} + for _, v := range mutableArgs6 { + if d.HasChange(v) { + needChange6 = true + break + } + } + + if needChange6 { + request6 := cdwdorisv20211228.NewModifyWorkloadGroupStatusRequest() + + if v, ok := d.GetOk("instance_id"); ok { + request6.InstanceId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("operation_type"); ok { + request6.OperationType = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().ModifyWorkloadGroupStatusWithContext(ctx, request6) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request6.GetAction(), request6.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update cdwdoris instance failed, reason:%+v", logId, err) + return err + } + } + _ = instanceId return resourceTencentCloudCdwdorisInstanceRead(d, meta) } From af8ba74200a98863e07d2706ec65d0965f22f55d Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Fri, 6 Sep 2024 19:19:15 +0800 Subject: [PATCH 5/7] refactor(cdwdoris): provider regen --- .../cdwdoris/resource_tc_cdwdoris_instance.go | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go index f850edc015..c1fd546f93 100644 --- a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go +++ b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go @@ -140,6 +140,18 @@ func ResourceTencentCloudCdwdorisInstance() *schema.Resource { Description: "Instance name", }, + "status": { + Type: schema.TypeString, + Computed: true, + Description: "Status", + }, + + "region": { + Type: schema.TypeString, + Computed: true, + Description: "Region", + }, + "doris_user_pwd": { Type: schema.TypeString, Required: true, @@ -225,33 +237,33 @@ func ResourceTencentCloudCdwdorisInstance() *schema.Resource { ValidateFunc: tccommon.ValidateAllowedStringValue(WORKLOAD_GROUP_STATUS), }, + "operation_type": { + Type: schema.TypeString, + Description: "Operation Type", + }, + "instance_id": { Type: schema.TypeString, Computed: true, - Description: "Instance id", + Description: "Instance ID", }, "pay_mode": { Type: schema.TypeString, Computed: true, - Description: "pad mod", + Description: "Pay Mode", }, "create_time": { Type: schema.TypeString, Computed: true, - Description: "create time", + Description: "Create Time", }, "expire_time": { Type: schema.TypeString, Computed: true, - Description: "expire time", - }, - - "operation_type": { - Type: schema.TypeString, - Description: "Operation Type", + Description: "Expire Time", }, }, } From c30f46b2408db97a73b7319817515eb8f74a9bbf Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Fri, 6 Sep 2024 19:42:10 +0800 Subject: [PATCH 6/7] refactor(cdwdoris): provider regen --- .../cdwdoris/resource_tc_cdwdoris_instance.go | 48 ++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go index c1fd546f93..8b9691ead4 100644 --- a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go +++ b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go @@ -5,6 +5,8 @@ import ( "context" "fmt" "log" + "text/template" + "time" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -155,7 +157,8 @@ func ResourceTencentCloudCdwdorisInstance() *schema.Resource { "doris_user_pwd": { Type: schema.TypeString, Required: true, - Description: "Database password", + Sensitive: true, + Description: "Database Password", }, "tags": { @@ -224,6 +227,7 @@ func ResourceTencentCloudCdwdorisInstance() *schema.Resource { "security_group_ids": { Type: schema.TypeList, + Optional: true, Description: "Security Group Id list", Elem: &schema.Schema{ Type: schema.TypeString, @@ -239,6 +243,7 @@ func ResourceTencentCloudCdwdorisInstance() *schema.Resource { "operation_type": { Type: schema.TypeString, + Optional: true, Description: "Operation Type", }, @@ -1252,6 +1257,16 @@ func resourceTencentCloudCdwdorisInstanceUpdate(d *schema.ResourceData, meta int log.Printf("[CRITAL]%s update cdwdoris instance failed, reason:%+v", logId, err) return err } + if _, err := (&resource.StateChangeConf{ + Delay: 10 * time.Second, + MinTimeout: 3 * time.Second, + Pending: []string{}, + Refresh: resourceCdwdorisInstanceUpdateStateRefreshFunc_6_0(ctx, instanceId), + Target: []string{"Serving"}, + Timeout: 600 * time.Second, + }).WaitForStateContext(ctx); err != nil { + return err + } } _ = instanceId @@ -1294,3 +1309,34 @@ func resourceTencentCloudCdwdorisInstanceDelete(d *schema.ResourceData, meta int _ = instanceId return nil } + +func resourceCdwdorisInstanceUpdateStateRefreshFunc_6_0(ctx context.Context, instanceId string) resource.StateRefreshFunc { + var req *cdwdorisv20211228.DescribeInstanceStateRequest + t := template.New("gotpl") + var tplObj *template.Template + return func() (interface{}, string, error) { + meta := tccommon.ProviderMetaFromContext(ctx) + if meta == nil { + return nil, "", fmt.Errorf("resource data can not be nil") + } + if req == nil { + d := tccommon.ResourceDataFromContext(ctx) + if d == nil { + return nil, "", fmt.Errorf("resource data can not be nil") + } + _ = d + req = cdwdorisv20211228.NewDescribeInstanceStateRequest() + req.InstanceId = helper.String(instanceId) + + } + resp, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().DescribeInstanceStateWithContext(ctx, req) + if err != nil { + return nil, "", err + } + if resp == nil || resp.Response == nil { + return nil, "", nil + } + state := "" + return resp.Response, state, nil + } +} From b57d2d36c9ff27944d45065bc300b6c490d80db5 Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Fri, 6 Sep 2024 19:56:09 +0800 Subject: [PATCH 7/7] refactor(cdwdoris): provider regen --- .../cdwdoris/resource_tc_cdwdoris_instance.go | 57 ++++++++++++++++--- 1 file changed, 49 insertions(+), 8 deletions(-) diff --git a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go index 8b9691ead4..502898e157 100644 --- a/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go +++ b/tencentcloud/services/cdwdoris/resource_tc_cdwdoris_instance.go @@ -113,9 +113,10 @@ func ResourceTencentCloudCdwdorisInstance() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "charge_type": { - Type: schema.TypeString, - Optional: true, - Description: "Billing type: PREPAID for prepayment, and POSTPAID_BY_HOUR for postpayment.\nNote: This field may return null, indicating that no valid values can be obtained.", + Type: schema.TypeString, + Optional: true, + Description: "Billing type: PREPAID for prepayment, and POSTPAID_BY_HOUR for postpayment.\nNote: This field may return null, indicating that no valid values can be obtained.", + ValidateFunc: tccommon.ValidateAllowedStringValue(CHARGE_TYPE), }, "renew_flag": { Type: schema.TypeInt, @@ -454,6 +455,8 @@ func resourceTencentCloudCdwdorisInstanceCreate(d *schema.ResourceData, meta int return err1 } + _ = response1 + var ( request2 = cdwdorisv20211228.NewModifyWorkloadGroupStatusRequest() response2 = cdwdorisv20211228.NewModifyWorkloadGroupStatusResponse() @@ -488,6 +491,16 @@ func resourceTencentCloudCdwdorisInstanceCreate(d *schema.ResourceData, meta int _ = response2 + if _, err := (&resource.StateChangeConf{ + Delay: 10 * time.Second, + MinTimeout: 3 * time.Second, + Pending: []string{}, + Refresh: resourceCdwdorisInstanceCreateStateRefreshFunc_2_0(ctx, instanceId), + Target: []string{"Serving"}, + Timeout: 600 * time.Second, + }).WaitForStateContext(ctx); err != nil { + return err + } d.SetId(instanceId) return resourceTencentCloudCdwdorisInstanceRead(d, meta) @@ -1225,7 +1238,7 @@ func resourceTencentCloudCdwdorisInstanceUpdate(d *schema.ResourceData, meta int } needChange6 := false - mutableArgs6 := []string{"instance_id", "operation_type"} + mutableArgs6 := []string{"operation_type"} for _, v := range mutableArgs6 { if d.HasChange(v) { needChange6 = true @@ -1236,9 +1249,7 @@ func resourceTencentCloudCdwdorisInstanceUpdate(d *schema.ResourceData, meta int if needChange6 { request6 := cdwdorisv20211228.NewModifyWorkloadGroupStatusRequest() - if v, ok := d.GetOk("instance_id"); ok { - request6.InstanceId = helper.String(v.(string)) - } + request6.InstanceId = helper.String(instanceId) if v, ok := d.GetOk("operation_type"); ok { request6.OperationType = helper.String(v.(string)) @@ -1269,7 +1280,6 @@ func resourceTencentCloudCdwdorisInstanceUpdate(d *schema.ResourceData, meta int } } - _ = instanceId return resourceTencentCloudCdwdorisInstanceRead(d, meta) } @@ -1310,6 +1320,37 @@ func resourceTencentCloudCdwdorisInstanceDelete(d *schema.ResourceData, meta int return nil } +func resourceCdwdorisInstanceCreateStateRefreshFunc_2_0(ctx context.Context, instanceId string) resource.StateRefreshFunc { + var req *cdwdorisv20211228.DescribeInstanceStateRequest + t := template.New("gotpl") + var tplObj *template.Template + return func() (interface{}, string, error) { + meta := tccommon.ProviderMetaFromContext(ctx) + if meta == nil { + return nil, "", fmt.Errorf("resource data can not be nil") + } + if req == nil { + d := tccommon.ResourceDataFromContext(ctx) + if d == nil { + return nil, "", fmt.Errorf("resource data can not be nil") + } + _ = d + req = cdwdorisv20211228.NewDescribeInstanceStateRequest() + req.InstanceId = helper.String(instanceId) + + } + resp, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwdorisV20211228Client().DescribeInstanceStateWithContext(ctx, req) + if err != nil { + return nil, "", err + } + if resp == nil || resp.Response == nil { + return nil, "", nil + } + state := "" + return resp.Response, state, nil + } +} + func resourceCdwdorisInstanceUpdateStateRefreshFunc_6_0(ctx context.Context, instanceId string) resource.StateRefreshFunc { var req *cdwdorisv20211228.DescribeInstanceStateRequest t := template.New("gotpl")