diff --git a/tencentcloud/services/cvm/data_source_tc_cvm_instance_vnc_url.go b/tencentcloud/services/cvm/data_source_tc_cvm_instance_vnc_url.go index 9e4954611c..00a9f2310d 100644 --- a/tencentcloud/services/cvm/data_source_tc_cvm_instance_vnc_url.go +++ b/tencentcloud/services/cvm/data_source_tc_cvm_instance_vnc_url.go @@ -1,14 +1,14 @@ +// Code generated by iacg; DO NOT EDIT. package cvm import ( - "fmt" - - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "context" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -17,14 +17,14 @@ func DataSourceTencentCloudCvmInstanceVncUrl() *schema.Resource { Read: dataSourceTencentCloudCvmInstanceVncUrlRead, Schema: map[string]*schema.Schema{ "instance_id": { - Required: true, Type: schema.TypeString, + Required: true, Description: "Instance ID. To obtain the instance IDs, you can call `DescribeInstances` and look for `InstanceId` in the response.", }, "instance_vnc_url": { - Computed: true, Type: schema.TypeString, + Computed: true, Description: "Instance VNC URL.", }, @@ -41,38 +41,47 @@ func dataSourceTencentCloudCvmInstanceVncUrlRead(d *schema.ResourceData, meta in defer tccommon.LogElapsed("data_source.tencentcloud_cvm_instance_vnc_url.read")() defer tccommon.InconsistentCheck(d, meta)() - var response *cvm.DescribeInstanceVncUrlResponse - request := cvm.NewDescribeInstanceVncUrlRequest() - instanceId := d.Get("instance_id").(string) - request.InstanceId = helper.String(instanceId) - err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + logId := tccommon.GetLogId(nil) + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().DescribeInstanceVncUrl(request) + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + var ( + instanceId string + ) + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + paramMap := make(map[string]interface{}) + if v, ok := d.GetOk("instance_id"); ok { + paramMap["InstanceId"] = helper.String(v.(string)) + } + + var respData *cvm.DescribeInstanceVncUrlResponseParams + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := service.DescribeCvmInstanceVncUrlByFilter(ctx, paramMap) if e != nil { return tccommon.RetryError(e) } - response = result + respData = result return nil }) if err != nil { return err } - if response == nil || response.Response == nil { - d.SetId("") - return fmt.Errorf("Response is nil") - + if respData.InstanceVncUrl != nil { + _ = d.Set("instance_vnc_url", respData.InstanceVncUrl) } + d.SetId(instanceId) - _ = d.Set("instance_vnc_url", *response.Response.InstanceVncUrl) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := tccommon.WriteToFile(output.(string), map[string]interface{}{ - "instance_vnc_url": *response.Response.InstanceVncUrl, - }); e != nil { + if e := tccommon.WriteToFile(output.(string), dataSourceTencentCloudCvmInstanceVncUrlReadOutputContent(ctx)); e != nil { return e } } + return nil } diff --git a/tencentcloud/services/cvm/data_source_tc_cvm_instance_vnc_url_extension.go b/tencentcloud/services/cvm/data_source_tc_cvm_instance_vnc_url_extension.go new file mode 100644 index 0000000000..e6285f813f --- /dev/null +++ b/tencentcloud/services/cvm/data_source_tc_cvm_instance_vnc_url_extension.go @@ -0,0 +1,18 @@ +package cvm + +import ( + "context" + "fmt" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" +) + +func dataSourceTencentCloudCvmInstanceVncUrlReadOutputContent(ctx context.Context) interface{} { + d := tccommon.ResourceDataFromContext(ctx) + if d == nil { + return fmt.Errorf("resource data can not be nil") + } + return map[string]interface{}{ + "instance_vnc_url": d.Get("instance_vnc_url"), + } +} diff --git a/tencentcloud/services/cvm/data_source_tc_cvm_instance_vnc_url_test.go b/tencentcloud/services/cvm/data_source_tc_cvm_instance_vnc_url_test.go index 4edc19b686..914bf7906a 100644 --- a/tencentcloud/services/cvm/data_source_tc_cvm_instance_vnc_url_test.go +++ b/tencentcloud/services/cvm/data_source_tc_cvm_instance_vnc_url_test.go @@ -1,6 +1,7 @@ package cvm_test import ( + "fmt" "testing" tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" @@ -18,15 +19,48 @@ func TestAccTencentCloudCvmInstanceVncUrlDataSource_basic(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccCvmInstanceVncUrlDataSource, - Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cvm_instance_vnc_url.instance_vnc_url")), + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cvm_instance_vnc_url.instance_vnc_url"), + resource.TestCheckResourceAttrWith("data.tencentcloud_cvm_instance_vnc_url.instance_vnc_url", "instance_vnc_url", func(value string) error { + if value == "" { + return fmt.Errorf("vnc url is empty") + } + return nil + }), + ), }, }, }) } -const testAccCvmInstanceVncUrlDataSource = tcacctest.DefaultCvmModificationVariable + ` +const testAccCvmInstanceVncUrlDataSource = ` +data "tencentcloud_images" "default" { + image_type = ["PUBLIC_IMAGE"] + image_name_regex = "Final" +} +data "tencentcloud_instance_types" "default" { + memory_size = 2 + exclude_sold_out = true + filter { + name = "instance-family" + values = ["SA2","SA3","SA4","SA5","S2","S3"] + } + filter { + name = "zone" + values = ["ap-guangzhou-7"] + } + cpu_core_count = 2 +} + +resource "tencentcloud_instance" "test_cvm" { + image_id = data.tencentcloud_images.default.images.0.image_id + availability_zone = "ap-guangzhou-7" + instance_type = data.tencentcloud_instance_types.default.instance_types.0.instance_type + orderly_security_groups = ["sg-5275dorp"] + instance_charge_type = "POSTPAID_BY_HOUR" +} data "tencentcloud_cvm_instance_vnc_url" "instance_vnc_url" { - instance_id = var.cvm_id + instance_id = tencentcloud_instance.test_cvm.id } ` diff --git a/tencentcloud/services/cvm/data_source_tc_cvm_instances_modification.go b/tencentcloud/services/cvm/data_source_tc_cvm_instances_modification.go index c8cff821c4..098101ea6b 100644 --- a/tencentcloud/services/cvm/data_source_tc_cvm_instances_modification.go +++ b/tencentcloud/services/cvm/data_source_tc_cvm_instances_modification.go @@ -1,33 +1,33 @@ +// Code generated by iacg; DO NOT EDIT. package cvm import ( - "log" - - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "context" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) func DataSourceTencentCloudCvmInstancesModification() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCvmInstancesModificationRead, - Schema: map[string]*schema.Schema{ "instance_ids": { - Optional: true, - Type: schema.TypeSet, + Type: schema.TypeSet, + Optional: true, + Description: "One or more instance ID to be queried. It can be obtained from the InstanceId in the returned value of API DescribeInstances. The maximum number of instances in batch for each request is 20.", Elem: &schema.Schema{ Type: schema.TypeString, }, - Description: "One or more instance ID to be queried. It can be obtained from the InstanceId in the returned value of API DescribeInstances. The maximum number of instances in batch for each request is 20.", }, + "filters": { - Optional: true, Type: schema.TypeList, + Optional: true, Description: "The upper limit of Filters for each request is 10 and the upper limit for Filter.Values is 2.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ @@ -37,26 +37,20 @@ func DataSourceTencentCloudCvmInstancesModification() *schema.Resource { Description: "Fields to be filtered.", }, "values": { - Type: schema.TypeSet, + Type: schema.TypeSet, + Required: true, + Description: "Value of the field.", Elem: &schema.Schema{ Type: schema.TypeString, }, - Required: true, - Description: "Value of the field.", }, }, }, }, - "result_output_file": { - Type: schema.TypeString, - Optional: true, - Description: "Used to save results.", - }, - "instance_type_config_status_list": { - Computed: true, Type: schema.TypeList, + Computed: true, Description: "The list of model configurations that can be adjusted by the instance.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ @@ -117,85 +111,135 @@ func DataSourceTencentCloudCvmInstancesModification() *schema.Resource { }, }, }, + + "result_output_file": { + Type: schema.TypeString, + Optional: true, + Description: "Used to save results.", + }, }, } } func dataSourceTencentCloudCvmInstancesModificationRead(d *schema.ResourceData, meta interface{}) error { defer tccommon.LogElapsed("data_source.tencentcloud_cvm_instances_modification.read")() - logId := tccommon.GetLogId(tccommon.ContextNil) + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(nil) + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - var ( - request = cvm.NewDescribeInstancesModificationRequest() - response = cvm.NewDescribeInstancesModificationResponse() - ) + paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_ids"); ok { - request.InstanceIds = helper.InterfacesStringsPoint(v.(*schema.Set).List()) + instanceIdsList := []*string{} + instanceIdsSet := v.(*schema.Set).List() + for i := range instanceIdsSet { + instanceIds := instanceIdsSet[i].(string) + instanceIdsList = append(instanceIdsList, helper.String(instanceIds)) + } + paramMap["InstanceIds"] = instanceIdsList } if v, ok := d.GetOk("filters"); ok { - filters := make([]*cvm.Filter, 0) - for _, item := range v.(*schema.Set).List() { - filter := item.(map[string]interface{}) - name := filter["name"].(string) - filters = append(filters, &cvm.Filter{ - Name: &name, - Values: helper.StringsStringsPoint(filter["values"].([]string)), - }) + filtersSet := v.([]interface{}) + tmpSet := make([]*cvm.Filter, 0, len(filtersSet)) + for _, item := range filtersSet { + filtersMap := item.(map[string]interface{}) + filter := cvm.Filter{} + if v, ok := filtersMap["name"]; ok { + filter.Name = helper.String(v.(string)) + } + if v, ok := filtersMap["values"]; ok { + valuesSet := v.(*schema.Set).List() + for i := range valuesSet { + values := valuesSet[i].(string) + filter.Values = append(filter.Values, helper.String(values)) + } + } + tmpSet = append(tmpSet, &filter) } - request.Filters = filters + paramMap["Filters"] = tmpSet } - instanceTypeConfigStatusList := make([]map[string]interface{}, 0) - - var innerErr error + var respData []*cvm.InstanceTypeConfigStatus err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { - response, innerErr = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().DescribeInstancesModification(request) - if innerErr != nil { - return tccommon.RetryError(innerErr) + result, e := service.DescribeCvmInstancesModificationByFilter(ctx, paramMap) + if e != nil { + return tccommon.RetryError(e) } + respData = result return nil }) if err != nil { return err } - ids := make([]string, 0) - for _, instanceTypeConfigStatusSetItem := range response.Response.InstanceTypeConfigStatusSet { - instanceTypeConfigStatus := make(map[string]interface{}) - instanceTypeConfigStatus["status"] = instanceTypeConfigStatusSetItem.Status - instanceTypeConfigStatus["message"] = instanceTypeConfigStatusSetItem.Message - - instanceTypeConfigMaps := make([]map[string]interface{}, 0) - instanceTypeConfigMap := make(map[string]interface{}) - instanceTypeConfig := instanceTypeConfigStatusSetItem.InstanceTypeConfig - instanceTypeConfigMap["zone"] = instanceTypeConfig.Zone - ids = append(ids, *instanceTypeConfig.InstanceType) - instanceTypeConfigMap["instance_type"] = instanceTypeConfig.InstanceType - instanceTypeConfigMap["instance_family"] = instanceTypeConfig.InstanceFamily - instanceTypeConfigMap["gpu"] = instanceTypeConfig.GPU - instanceTypeConfigMap["cpu"] = instanceTypeConfig.CPU - instanceTypeConfigMap["memory"] = instanceTypeConfig.Memory - instanceTypeConfigMap["fpga"] = instanceTypeConfig.FPGA - instanceTypeConfigMaps = append(instanceTypeConfigMaps, instanceTypeConfigMap) - instanceTypeConfigStatus["instance_type_config"] = instanceTypeConfigMaps - - instanceTypeConfigStatusList = append(instanceTypeConfigStatusList, instanceTypeConfigStatus) + var ids []string + instanceTypeConfigStatusSetList := make([]map[string]interface{}, 0, len(respData)) + if respData != nil { + for _, instanceTypeConfigStatusSet := range respData { + instanceTypeConfigStatusSetMap := map[string]interface{}{} + + var instanceType string + if instanceTypeConfigStatusSet.Status != nil { + instanceTypeConfigStatusSetMap["status"] = instanceTypeConfigStatusSet.Status + } + + if instanceTypeConfigStatusSet.Message != nil { + instanceTypeConfigStatusSetMap["message"] = instanceTypeConfigStatusSet.Message + } + + instanceTypeConfigMap := map[string]interface{}{} + + if instanceTypeConfigStatusSet.InstanceTypeConfig != nil { + if instanceTypeConfigStatusSet.InstanceTypeConfig.Zone != nil { + instanceTypeConfigMap["zone"] = instanceTypeConfigStatusSet.InstanceTypeConfig.Zone + } + + if instanceTypeConfigStatusSet.InstanceTypeConfig.InstanceType != nil { + instanceTypeConfigMap["instance_type"] = instanceTypeConfigStatusSet.InstanceTypeConfig.InstanceType + instanceType = *instanceTypeConfigStatusSet.InstanceTypeConfig.InstanceType + } + + if instanceTypeConfigStatusSet.InstanceTypeConfig.InstanceFamily != nil { + instanceTypeConfigMap["instance_family"] = instanceTypeConfigStatusSet.InstanceTypeConfig.InstanceFamily + } + + if instanceTypeConfigStatusSet.InstanceTypeConfig.GPU != nil { + instanceTypeConfigMap["gpu"] = instanceTypeConfigStatusSet.InstanceTypeConfig.GPU + } + + if instanceTypeConfigStatusSet.InstanceTypeConfig.CPU != nil { + instanceTypeConfigMap["cpu"] = instanceTypeConfigStatusSet.InstanceTypeConfig.CPU + } + + if instanceTypeConfigStatusSet.InstanceTypeConfig.Memory != nil { + instanceTypeConfigMap["memory"] = instanceTypeConfigStatusSet.InstanceTypeConfig.Memory + } + + if instanceTypeConfigStatusSet.InstanceTypeConfig.FPGA != nil { + instanceTypeConfigMap["fpga"] = instanceTypeConfigStatusSet.InstanceTypeConfig.FPGA + } + + instanceTypeConfigStatusSetMap["instance_type_config"] = []interface{}{instanceTypeConfigMap} + } + + ids = append(ids, instanceType) + instanceTypeConfigStatusSetList = append(instanceTypeConfigStatusSetList, instanceTypeConfigStatusSetMap) + } + + _ = d.Set("instance_type_config_status_list", instanceTypeConfigStatusSetList) } d.SetId(helper.DataResourceIdsHash(ids)) - err = d.Set("instance_type_config_status_list", instanceTypeConfigStatusList) - if err != nil { - log.Printf("[CRITAL]%s provider set instance list fail, reason:%s\n ", logId, err.Error()) - return err - } output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := tccommon.WriteToFile(output.(string), instanceTypeConfigStatusList); err != nil { - return err + if e := tccommon.WriteToFile(output.(string), instanceTypeConfigStatusSetList); e != nil { + return e } } - return nil + return nil } diff --git a/tencentcloud/services/cvm/data_source_tc_cvm_instances_modification_extension.go b/tencentcloud/services/cvm/data_source_tc_cvm_instances_modification_extension.go new file mode 100644 index 0000000000..b417cc5d9f --- /dev/null +++ b/tencentcloud/services/cvm/data_source_tc_cvm_instances_modification_extension.go @@ -0,0 +1 @@ +package cvm diff --git a/tencentcloud/services/cvm/data_source_tc_cvm_instances_modification_test.go b/tencentcloud/services/cvm/data_source_tc_cvm_instances_modification_test.go index 820993fecf..cbffa587f1 100644 --- a/tencentcloud/services/cvm/data_source_tc_cvm_instances_modification_test.go +++ b/tencentcloud/services/cvm/data_source_tc_cvm_instances_modification_test.go @@ -27,8 +27,34 @@ func TestAccTencentCloudCvmInstancesModificationDataSource_basic(t *testing.T) { }) } -const testAccCvmInstancesModificationDataSource = tcacctest.DefaultCvmModificationVariable + ` +const testAccCvmInstancesModificationDataSource = ` +data "tencentcloud_images" "default" { + image_type = ["PUBLIC_IMAGE"] + image_name_regex = "Final" +} +data "tencentcloud_instance_types" "default" { + memory_size = 2 + exclude_sold_out = true + filter { + name = "instance-family" + values = ["SA2","SA3","SA4","SA5","S2","S3"] + } + filter { + name = "zone" + values = ["ap-guangzhou-7"] + } + cpu_core_count = 2 +} + +resource "tencentcloud_instance" "test_cvm" { + image_id = data.tencentcloud_images.default.images.0.image_id + availability_zone = "ap-guangzhou-7" + instance_type = data.tencentcloud_instance_types.default.instance_types.0.instance_type + orderly_security_groups = ["sg-5275dorp"] + instance_charge_type = "POSTPAID_BY_HOUR" +} + data "tencentcloud_cvm_instances_modification" "foo" { - instance_ids = [var.cvm_id] + instance_ids = [tencentcloud_instance.test_cvm.id] } ` diff --git a/tencentcloud/services/cvm/data_source_tc_eip_address_quota.go b/tencentcloud/services/cvm/data_source_tc_eip_address_quota.go index 1533b2abe7..ef8d23cacc 100644 --- a/tencentcloud/services/cvm/data_source_tc_eip_address_quota.go +++ b/tencentcloud/services/cvm/data_source_tc_eip_address_quota.go @@ -1,15 +1,14 @@ +// Code generated by iacg; DO NOT EDIT. package cvm import ( "context" - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" - svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -18,8 +17,8 @@ func DataSourceTencentCloudEipAddressQuota() *schema.Resource { Read: dataSourceTencentCloudEipAddressQuotaRead, Schema: map[string]*schema.Schema{ "quota_set": { - Computed: true, Type: schema.TypeList, + Computed: true, Description: "The specified account EIP quota information.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ @@ -52,61 +51,63 @@ func DataSourceTencentCloudEipAddressQuota() *schema.Resource { } func dataSourceTencentCloudEipAddressQuotaRead(d *schema.ResourceData, meta interface{}) error { - defer tccommon.LogElapsed("data_source.tencentcloud_vpc_address_quota.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_eip_address_quota.read")() defer tccommon.InconsistentCheck(d, meta)() - logId := tccommon.GetLogId(tccommon.ContextNil) + logId := tccommon.GetLogId(nil) + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - - service := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) - - var quotaSet []*vpc.Quota + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + paramMap := make(map[string]interface{}) + var respData []*vpc.Quota err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { - result, e := service.DescribeEipAddressQuota(ctx) + result, e := service.DescribeEipAddressQuotaByFilter(ctx, paramMap) if e != nil { return tccommon.RetryError(e) } - quotaSet = result + respData = result return nil }) if err != nil { return err } - ids := make([]string, 0, len(quotaSet)) - tmpList := make([]map[string]interface{}, 0, len(quotaSet)) - - if quotaSet != nil { - for _, quota := range quotaSet { - quotaMap := map[string]interface{}{} + var ids []string + quotaSetList := make([]map[string]interface{}, 0, len(respData)) + if respData != nil { + for _, quotaSet := range respData { + quotaSetMap := map[string]interface{}{} - if quota.QuotaId != nil { - quotaMap["quota_id"] = quota.QuotaId + var quotaId string + if quotaSet.QuotaId != nil { + quotaSetMap["quota_id"] = quotaSet.QuotaId + quotaId = *quotaSet.QuotaId } - if quota.QuotaCurrent != nil { - quotaMap["quota_current"] = quota.QuotaCurrent + if quotaSet.QuotaCurrent != nil { + quotaSetMap["quota_current"] = quotaSet.QuotaCurrent } - if quota.QuotaLimit != nil { - quotaMap["quota_limit"] = quota.QuotaLimit + if quotaSet.QuotaLimit != nil { + quotaSetMap["quota_limit"] = quotaSet.QuotaLimit } - ids = append(ids, *quota.QuotaId) - tmpList = append(tmpList, quotaMap) + ids = append(ids, quotaId) + quotaSetList = append(quotaSetList, quotaSetMap) } - _ = d.Set("quota_set", tmpList) + _ = d.Set("quota_set", quotaSetList) } d.SetId(helper.DataResourceIdsHash(ids)) + output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), quotaSetList); e != nil { return e } } + return nil } diff --git a/tencentcloud/services/cvm/data_source_tc_eip_address_quota_extension.go b/tencentcloud/services/cvm/data_source_tc_eip_address_quota_extension.go new file mode 100644 index 0000000000..b417cc5d9f --- /dev/null +++ b/tencentcloud/services/cvm/data_source_tc_eip_address_quota_extension.go @@ -0,0 +1 @@ +package cvm diff --git a/tencentcloud/services/cvm/data_source_tc_eip_address_quota_test.go b/tencentcloud/services/cvm/data_source_tc_eip_address_quota_test.go index f8a6d50aad..aefadb3610 100644 --- a/tencentcloud/services/cvm/data_source_tc_eip_address_quota_test.go +++ b/tencentcloud/services/cvm/data_source_tc_eip_address_quota_test.go @@ -18,7 +18,10 @@ func TestAccTencentCloudEipAddressQuotaDataSource_basic(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccEipAddressQuotaDataSource, - Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_eip_address_quota.address_quota")), + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_eip_address_quota.address_quota"), + resource.TestCheckResourceAttrSet("data.tencentcloud_eip_address_quota.address_quota", "quota_set.#"), + ), }, }, }) diff --git a/tencentcloud/services/cvm/data_source_tc_eip_network_account_type.go b/tencentcloud/services/cvm/data_source_tc_eip_network_account_type.go index 88551782c7..5dd73f70f2 100644 --- a/tencentcloud/services/cvm/data_source_tc_eip_network_account_type.go +++ b/tencentcloud/services/cvm/data_source_tc_eip_network_account_type.go @@ -1,13 +1,14 @@ +// Code generated by iacg; DO NOT EDIT. package cvm import ( "context" - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" - svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" ) func DataSourceTencentCloudEipNetworkAccountType() *schema.Resource { @@ -15,8 +16,8 @@ func DataSourceTencentCloudEipNetworkAccountType() *schema.Resource { Read: dataSourceTencentCloudEipNetworkAccountTypeRead, Schema: map[string]*schema.Schema{ "network_account_type": { - Computed: true, Type: schema.TypeString, + Computed: true, Description: "The network type of the user account, STANDARD is a standard user, LEGACY is a traditional user.", }, @@ -33,35 +34,39 @@ func dataSourceTencentCloudEipNetworkAccountTypeRead(d *schema.ResourceData, met defer tccommon.LogElapsed("data_source.tencentcloud_eip_network_account_type.read")() defer tccommon.InconsistentCheck(d, meta)() - var networkAccountType *string - logId := tccommon.GetLogId(tccommon.ContextNil) - - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + logId := tccommon.GetLogId(nil) + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - service := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + paramMap := make(map[string]interface{}) + var respData *vpc.DescribeNetworkAccountTypeResponseParams err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { - result, e := service.DescribeEipNetworkAccountType(ctx) + result, e := service.DescribeEipNetworkAccountTypeByFilter(ctx, paramMap) if e != nil { return tccommon.RetryError(e) } - networkAccountType = result + respData = result return nil }) if err != nil { return err } - if networkAccountType != nil { - _ = d.Set("network_account_type", networkAccountType) + var networkAccountType string + if respData.NetworkAccountType != nil { + _ = d.Set("network_account_type", respData.NetworkAccountType) + networkAccountType = *respData.NetworkAccountType } - d.SetId(*networkAccountType) + d.SetId(networkAccountType) + output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := tccommon.WriteToFile(output.(string), *networkAccountType); e != nil { + if e := tccommon.WriteToFile(output.(string), dataSourceTencentCloudEipNetworkAccountTypeReadOutputContent(ctx)); e != nil { return e } } + return nil } diff --git a/tencentcloud/services/cvm/data_source_tc_eip_network_account_type_extension.go b/tencentcloud/services/cvm/data_source_tc_eip_network_account_type_extension.go new file mode 100644 index 0000000000..1a43a2863e --- /dev/null +++ b/tencentcloud/services/cvm/data_source_tc_eip_network_account_type_extension.go @@ -0,0 +1,16 @@ +package cvm + +import ( + "context" + "fmt" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" +) + +func dataSourceTencentCloudEipNetworkAccountTypeReadOutputContent(ctx context.Context) interface{} { + d := tccommon.ResourceDataFromContext(ctx) + if d == nil { + return fmt.Errorf("resource data can not be nil") + } + return d.Get("network_account_type") +} diff --git a/tencentcloud/services/cvm/data_source_tc_eip_network_account_type_test.go b/tencentcloud/services/cvm/data_source_tc_eip_network_account_type_test.go index a4f469f11a..b210d67ce2 100644 --- a/tencentcloud/services/cvm/data_source_tc_eip_network_account_type_test.go +++ b/tencentcloud/services/cvm/data_source_tc_eip_network_account_type_test.go @@ -1,6 +1,7 @@ package cvm_test import ( + "fmt" "testing" tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" @@ -18,7 +19,17 @@ func TestAccTencentCloudEipNetworkAccountTypeDataSource_basic(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccEipNetworkAccountTypeDataSource, - Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_eip_network_account_type.network_account_type")), + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_eip_network_account_type.network_account_type"), + resource.TestCheckResourceAttrWith("data.tencentcloud_eip_network_account_type.network_account_type", "network_account_type", func(value string) error { + switch value { + case "STANDARD", "LEGACY": + default: + return fmt.Errorf("invalid network type: %q", value) + } + return nil + }), + ), }, }, }) diff --git a/tencentcloud/services/cvm/resource_tc_cvm_launch_template_default_version.go b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_default_version.go index a63ecaa7be..1baadfd38f 100644 --- a/tencentcloud/services/cvm/resource_tc_cvm_launch_template_default_version.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_default_version.go @@ -1,13 +1,16 @@ +// Code generated by iacg; DO NOT EDIT. package cvm import ( "context" "log" - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) func ResourceTencentCloudCvmLaunchTemplateDefaultVersion() *schema.Resource { @@ -21,15 +24,15 @@ func ResourceTencentCloudCvmLaunchTemplateDefaultVersion() *schema.Resource { }, Schema: map[string]*schema.Schema{ "launch_template_id": { + Type: schema.TypeString, Required: true, ForceNew: true, - Type: schema.TypeString, Description: "Instance launch template ID.", }, "default_version": { - Required: true, Type: schema.TypeInt, + Required: true, Description: "The number of the version that you want to set as the default version.", }, }, @@ -40,25 +43,16 @@ func resourceTencentCloudCvmLaunchTemplateDefaultVersionCreate(d *schema.Resourc defer tccommon.LogElapsed("resource.tencentcloud_cvm_launch_template_default_version.create")() defer tccommon.InconsistentCheck(d, meta)() - logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - launchTemplateId := d.Get("launch_template_id").(string) - defaultVersion := d.Get("default_version").(int) - err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - e := service.ModifyLaunchTemplateDefaultVersion(ctx, launchTemplateId, defaultVersion) - if e != nil { - return tccommon.RetryError(e) - } - return nil - }) - if err != nil { - return err + var ( + launchTemplateId string + ) + if v, ok := d.GetOk("launch_template_id"); ok { + launchTemplateId = v.(string) } d.SetId(launchTemplateId) - return resourceTencentCloudCvmLaunchTemplateDefaultVersionRead(d, meta) + return resourceTencentCloudCvmLaunchTemplateDefaultVersionUpdate(d, meta) } func resourceTencentCloudCvmLaunchTemplateDefaultVersionRead(d *schema.ResourceData, meta interface{}) error { @@ -66,29 +60,28 @@ func resourceTencentCloudCvmLaunchTemplateDefaultVersionRead(d *schema.ResourceD defer tccommon.InconsistentCheck(d, meta)() logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} launchTemplateId := d.Id() - launchTemplateVersions, err := service.DescribeLaunchTemplateVersions(ctx, launchTemplateId) + + _ = d.Set("launch_template_id", launchTemplateId) + + respData, err := service.DescribeCvmLaunchTemplateDefaultVersionById(ctx, launchTemplateId) if err != nil { return err } - if len(launchTemplateVersions) == 0 { + if respData == nil { d.SetId("") - log.Printf("[WARN]%s resource `CvmLaunchTemplateDefaultVersion` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + log.Printf("[WARN]%s resource `cvm_launch_template_default_version` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) return nil } - - for _, launchTemplateVersion := range launchTemplateVersions { - if *launchTemplateVersion.IsDefaultVersion { - _ = d.Set("default_version", launchTemplateVersion.LaunchTemplateVersion) - break - } + if respData.LaunchTemplateVersion != nil { + _ = d.Set("default_version", respData.LaunchTemplateVersion) } - _ = d.Set("launch_template_id", d.Id()) return nil } @@ -98,18 +91,40 @@ func resourceTencentCloudCvmLaunchTemplateDefaultVersionUpdate(d *schema.Resourc defer tccommon.InconsistentCheck(d, meta)() logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - if d.HasChange("default_version") { + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + + launchTemplateId := d.Id() + + needChange := false + mutableArgs := []string{"default_version"} + for _, v := range mutableArgs { + if d.HasChange(v) { + needChange = true + break + } + } + + if needChange { + request := cvm.NewModifyLaunchTemplateDefaultVersionRequest() + + request.LaunchTemplateId = helper.String(launchTemplateId) + + if v, ok := d.GetOkExists("default_version"); ok { + request.DefaultVersion = helper.IntInt64(v.(int)) + } + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - e := service.ModifyLaunchTemplateDefaultVersion(ctx, d.Id(), d.Get("default_version").(int)) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().ModifyLaunchTemplateDefaultVersionWithContext(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 cvm launch template default version failed, reason:%+v", logId, err) return err } } diff --git a/tencentcloud/services/cvm/resource_tc_cvm_launch_template_default_version_extension.go b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_default_version_extension.go new file mode 100644 index 0000000000..b417cc5d9f --- /dev/null +++ b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_default_version_extension.go @@ -0,0 +1 @@ +package cvm diff --git a/tencentcloud/services/cvm/resource_tc_cvm_launch_template_default_version_test.go b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_default_version_test.go index 7223f7a3d5..8f70f7fe9e 100644 --- a/tencentcloud/services/cvm/resource_tc_cvm_launch_template_default_version_test.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_default_version_test.go @@ -17,23 +17,52 @@ func TestAccTencentCloudCvmLaunchTemplateDefaultVersionResource_basic(t *testing Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { - Config: testAccCvmLaunchTemplateDefaultVersion, - Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_cvm_launch_template_default_version.launch_template_default_version", "id")), + Config: testAccCvmLaunchTemplateDefaultVersionBase + testAccCvmLaunchTemplateDefaultVersion1, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("tencentcloud_cvm_launch_template_default_version.test_launch_tpl_default", "default_version", "2"), + ), }, { - ResourceName: "tencentcloud_cvm_launch_template_default_version.launch_template_default_version", - ImportState: true, - ImportStateVerify: true, + Config: testAccCvmLaunchTemplateDefaultVersionBase + testAccCvmLaunchTemplateDefaultVersion2, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("tencentcloud_cvm_launch_template_default_version.test_launch_tpl_default", "default_version", "1"), + ), }, }, }) } -const testAccCvmLaunchTemplateDefaultVersion = ` +const testAccCvmLaunchTemplateDefaultVersionBase = ` +data "tencentcloud_images" "default" { + image_type = ["PUBLIC_IMAGE"] + image_name_regex = "Final" +} +resource "tencentcloud_cvm_launch_template" "test_launch_tpl" { + launch_template_name = "test" + image_id = data.tencentcloud_images.default.images.0.image_id + placement { + zone = "ap-guangzhou-7" + } + instance_name = "v1" +} +resource "tencentcloud_cvm_launch_template_version" "test_launch_tpl_v2" { + launch_template_id = tencentcloud_cvm_launch_template.test_launch_tpl.id + placement { + zone = "ap-guangzhou-7" + } + instance_name = "v2" +}` -resource "tencentcloud_cvm_launch_template_default_version" "launch_template_default_version" { - launch_template_id = "lt-9e1znnsa" - default_version = 4 +const testAccCvmLaunchTemplateDefaultVersion1 = ` +resource "tencentcloud_cvm_launch_template_default_version" "test_launch_tpl_default" { + launch_template_id = tencentcloud_cvm_launch_template.test_launch_tpl.id + default_version = tencentcloud_cvm_launch_template_version.test_launch_tpl_v2.launch_template_version } +` +const testAccCvmLaunchTemplateDefaultVersion2 = ` +resource "tencentcloud_cvm_launch_template_default_version" "test_launch_tpl_default" { + launch_template_id = tencentcloud_cvm_launch_template.test_launch_tpl.id + default_version = 1 +} ` diff --git a/tencentcloud/services/cvm/resource_tc_cvm_launch_template_version.go b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_version.go index 9406748c71..1728650dee 100644 --- a/tencentcloud/services/cvm/resource_tc_cvm_launch_template_version.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_version.go @@ -1,18 +1,17 @@ +// Code generated by iacg; DO NOT EDIT. package cvm import ( "context" "fmt" "log" - "strconv" "strings" - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -26,9 +25,9 @@ func ResourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { }, Schema: map[string]*schema.Schema{ "placement": { + Type: schema.TypeList, Required: true, ForceNew: true, - Type: schema.TypeList, MaxItems: 1, Description: "Location of the instance. You can use this parameter to specify the attributes of the instance, such as its availability zone, project, and CDH (for dedicated CVMs).", Elem: &schema.Resource{ @@ -47,73 +46,73 @@ func ResourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { Description: "ID of the project to which the instance belongs. This parameter can be obtained from the projectId returned by DescribeProject. If this is left empty, the default project is used.", }, "host_ids": { - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, + Type: schema.TypeSet, Optional: true, Computed: true, ForceNew: true, Description: "ID list of CDHs from which the instance can be created. If you have purchased CDHs and specify this parameter, the instances you purchase will be randomly deployed on the CDHs.", - }, - "host_ips": { - Type: schema.TypeSet, Elem: &schema.Schema{ Type: schema.TypeString, }, + }, + "host_ips": { + Type: schema.TypeSet, Optional: true, Computed: true, ForceNew: true, Description: "IPs of the hosts to create CVMs.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, }, }, }, }, "launch_template_id": { + Type: schema.TypeString, Required: true, ForceNew: true, - Type: schema.TypeString, Description: "Instance launch template ID. This parameter is used as a basis for creating new template versions.", }, "launch_template_version": { + Type: schema.TypeInt, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeInt, Description: "This parameter, when specified, is used to create instance launch templates. If this parameter is not specified, the default version will be used.", }, "launch_template_version_description": { + Type: schema.TypeString, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeString, Description: "Description of instance launch template versions. This parameter can contain 2-256 characters.", }, "instance_type": { + Type: schema.TypeString, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeString, Description: "The type of the instance. If this parameter is not specified, the system will dynamically specify the default model according to the resource sales in the current region.", }, "image_id": { + Type: schema.TypeString, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeString, Description: "Image ID.", }, "system_disk": { + Type: schema.TypeList, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeList, MaxItems: 1, Description: "System disk configuration information of the instance. If this parameter is not specified, it is assigned according to the system default.", Elem: &schema.Resource{ @@ -151,10 +150,10 @@ func ResourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { }, "data_disks": { + Type: schema.TypeList, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeList, Description: "The configuration information of instance data disks. If this parameter is not specified, no data disk will be purchased by default.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ @@ -225,10 +224,10 @@ func ResourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { }, "virtual_private_cloud": { + Type: schema.TypeList, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeList, MaxItems: 1, Description: "Describes information on VPC, including subnets, IP addresses, etc.", Elem: &schema.Resource{ @@ -253,14 +252,14 @@ func ResourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { Description: "Whether to use a CVM instance as a public gateway. The public gateway is only available when the instance has a public IP and resides in a VPC.", }, "private_ip_addresses": { - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, + Type: schema.TypeSet, Optional: true, Computed: true, ForceNew: true, Description: "Array of VPC subnet IPs. You can use this parameter when creating instances or modifying VPC attributes of instances. Currently you can specify multiple IPs in one subnet only when creating multiple instances at the same time.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, }, "ipv6_address_count": { Type: schema.TypeInt, @@ -274,10 +273,10 @@ func ResourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { }, "internet_accessible": { + Type: schema.TypeList, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeList, MaxItems: 1, Description: "Describes the accessibility of an instance in the public network, including its network billing method, maximum bandwidth, etc.", Elem: &schema.Resource{ @@ -315,26 +314,26 @@ func ResourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { }, "instance_count": { + Type: schema.TypeInt, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeInt, Description: "The number of instances to be purchased.", }, "instance_name": { + Type: schema.TypeString, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeString, Description: "Instance name to be displayed.", }, "login_settings": { + Type: schema.TypeList, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeList, MaxItems: 1, Description: "Describes login settings of an instance.", Elem: &schema.Resource{ @@ -347,14 +346,14 @@ func ResourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { Description: "Login password of the instance.", }, "key_ids": { - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, + Type: schema.TypeSet, Optional: true, Computed: true, ForceNew: true, Description: "List of key IDs. After an instance is associated with a key, you can access the instance with the private key in the key pair.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, }, "keep_image_login": { Type: schema.TypeString, @@ -368,31 +367,31 @@ func ResourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { }, "security_group_ids": { - Optional: true, - Computed: true, - ForceNew: true, - Type: schema.TypeSet, + Type: schema.TypeSet, + Optional: true, + Computed: true, + ForceNew: true, + Description: "Security groups to which the instance belongs. If this parameter is not specified, the instance will be associated with default security groups.", Elem: &schema.Schema{ Type: schema.TypeString, }, - Description: "Security groups to which the instance belongs. If this parameter is not specified, the instance will be associated with default security groups.", }, "enhanced_service": { + Type: schema.TypeList, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeList, MaxItems: 1, Description: "Enhanced service. You can use this parameter to specify whether to enable services such as Anti-DDoS and Cloud Monitor. If this parameter is not specified, Cloud Monitor and Anti-DDoS are enabled for public images by default.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "security_service": { Type: schema.TypeList, - MaxItems: 1, Optional: true, Computed: true, ForceNew: true, + MaxItems: 1, Description: "Enables cloud security service. If this parameter is not specified, the cloud security service will be enabled by default.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ @@ -407,10 +406,10 @@ func ResourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { }, "monitor_service": { Type: schema.TypeList, - MaxItems: 1, Optional: true, Computed: true, ForceNew: true, + MaxItems: 1, Description: "Enables cloud monitor service. If this parameter is not specified, the cloud monitor service will be enabled by default.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ @@ -426,10 +425,10 @@ func ResourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { }, "automation_service": { Type: schema.TypeList, - MaxItems: 1, Optional: true, Computed: true, ForceNew: true, + MaxItems: 1, Description: "Whether to enable the TAT service. If this parameter is not specified, the TAT service is enabled for public images and disabled for other images by default.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ @@ -448,26 +447,26 @@ func ResourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { }, "client_token": { + Type: schema.TypeString, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeString, Description: "A unique string supplied by the client to ensure that the request is idempotent. Its maximum length is 64 ASCII characters. If this parameter is not specified, the idem-potency of the request cannot be guaranteed.", }, "host_name": { + Type: schema.TypeString, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeString, Description: "Hostname of a CVM.", }, "action_timer": { + Type: schema.TypeList, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeList, MaxItems: 1, Description: "Scheduled tasks.", Elem: &schema.Resource{ @@ -488,10 +487,10 @@ func ResourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { }, "externals": { Type: schema.TypeList, - MaxItems: 1, Optional: true, Computed: true, ForceNew: true, + MaxItems: 1, Description: "Additional data.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ @@ -503,21 +502,21 @@ func ResourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { Description: "Release address.", }, "unsupport_networks": { - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, + Type: schema.TypeSet, Optional: true, Computed: true, ForceNew: true, Description: "Not supported network.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, }, "storage_block_attr": { Type: schema.TypeList, - MaxItems: 1, Optional: true, Computed: true, ForceNew: true, + MaxItems: 1, Description: "Information on local HDD storage.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ @@ -550,20 +549,20 @@ func ResourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { }, "disaster_recover_group_ids": { - Optional: true, - ForceNew: true, - Type: schema.TypeSet, + Type: schema.TypeSet, + Optional: true, + ForceNew: true, + Description: "Placement group ID. You can only specify one.", Elem: &schema.Schema{ Type: schema.TypeString, }, - Description: "Placement group ID. You can only specify one.", }, "tag_specification": { + Type: schema.TypeList, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeList, Description: "Description of tags associated with resource instances during instance creation.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ @@ -599,19 +598,19 @@ func ResourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { }, "instance_market_options": { + Type: schema.TypeList, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeList, MaxItems: 1, Description: "Options related to bidding requests.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "spot_options": { Type: schema.TypeList, - MaxItems: 1, Required: true, ForceNew: true, + MaxItems: 1, Description: "Options related to bidding.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ @@ -643,50 +642,50 @@ func ResourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { }, "user_data": { + Type: schema.TypeString, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeString, Description: "User data provided to the instance. This parameter needs to be encoded in base64 format with the maximum size of 16 KB.", }, "dry_run": { + Type: schema.TypeBool, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeBool, Description: "Whether the request is a dry run only.", }, "cam_role_name": { + Type: schema.TypeString, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeString, Description: "The role name of CAM.", }, "hpc_cluster_id": { + Type: schema.TypeString, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeString, Description: "HPC cluster ID. The HPC cluster must and can only be specified for a high-performance computing instance.", }, "instance_charge_type": { + Type: schema.TypeString, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeString, Description: "The charge type of instance.", }, "instance_charge_prepaid": { + Type: schema.TypeList, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeList, MaxItems: 1, Description: "Describes the billing method of an instance.", Elem: &schema.Resource{ @@ -709,10 +708,10 @@ func ResourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { }, "disable_api_termination": { + Type: schema.TypeBool, Optional: true, Computed: true, ForceNew: true, - Type: schema.TypeBool, Description: "Whether the termination protection is enabled. `TRUE`: Enable instance protection, which means that this instance can not be deleted by an API action.`FALSE`: Do not enable the instance protection. Default value: `FALSE`.", }, }, @@ -725,39 +724,48 @@ func resourceTencentCloudCvmLaunchTemplateVersionCreate(d *schema.ResourceData, logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + var ( - request = cvm.NewCreateLaunchTemplateVersionRequest() - response = cvm.NewCreateLaunchTemplateVersionResponse() - launchTemplateId string + launchTemplateId string + launchTemplateVersionNumber int64 ) - if dMap, ok := helper.InterfacesHeadMap(d, "placement"); ok { + var ( + request = cvm.NewCreateLaunchTemplateVersionRequest() + response = cvm.NewCreateLaunchTemplateVersionResponse() + ) + + if v, ok := d.GetOk("launch_template_id"); ok { + launchTemplateId = v.(string) + } + + if placementMap, ok := helper.InterfacesHeadMap(d, "placement"); ok { placement := cvm.Placement{} - if v, ok := dMap["zone"]; ok { + if v, ok := placementMap["zone"]; ok { placement.Zone = helper.String(v.(string)) } - if v, ok := dMap["project_id"]; ok { + if v, ok := placementMap["project_id"]; ok { placement.ProjectId = helper.IntInt64(v.(int)) } - if v, ok := dMap["host_ids"]; ok { + if v, ok := placementMap["host_ids"]; ok { hostIdsSet := v.(*schema.Set).List() for i := range hostIdsSet { hostIds := hostIdsSet[i].(string) - placement.HostIds = append(placement.HostIds, &hostIds) + placement.HostIds = append(placement.HostIds, helper.String(hostIds)) } } - if v, ok := dMap["host_ips"]; ok { + if v, ok := placementMap["host_ips"]; ok { hostIpsSet := v.(*schema.Set).List() for i := range hostIpsSet { hostIps := hostIpsSet[i].(string) - placement.HostIps = append(placement.HostIps, &hostIps) + placement.HostIps = append(placement.HostIps, helper.String(hostIps)) } } request.Placement = &placement } if v, ok := d.GetOk("launch_template_id"); ok { - launchTemplateId = v.(string) - request.LaunchTemplateId = helper.String(launchTemplateId) + request.LaunchTemplateId = helper.String(v.(string)) } if v, ok := d.GetOkExists("launch_template_version"); ok { @@ -776,18 +784,18 @@ func resourceTencentCloudCvmLaunchTemplateVersionCreate(d *schema.ResourceData, request.ImageId = helper.String(v.(string)) } - if dMap, ok := helper.InterfacesHeadMap(d, "system_disk"); ok { + if systemDiskMap, ok := helper.InterfacesHeadMap(d, "system_disk"); ok { systemDisk := cvm.SystemDisk{} - if v, ok := dMap["disk_type"]; ok { + if v, ok := systemDiskMap["disk_type"]; ok { systemDisk.DiskType = helper.String(v.(string)) } - if v, ok := dMap["disk_id"]; ok { + if v, ok := systemDiskMap["disk_id"]; ok { systemDisk.DiskId = helper.String(v.(string)) } - if v, ok := dMap["disk_size"]; ok { + if v, ok := systemDiskMap["disk_size"]; ok { systemDisk.DiskSize = helper.IntInt64(v.(int)) } - if v, ok := dMap["cdc_id"]; ok { + if v, ok := systemDiskMap["cdc_id"]; ok { systemDisk.CdcId = helper.String(v.(string)) } request.SystemDisk = &systemDisk @@ -795,75 +803,75 @@ func resourceTencentCloudCvmLaunchTemplateVersionCreate(d *schema.ResourceData, if v, ok := d.GetOk("data_disks"); ok { for _, item := range v.([]interface{}) { - dMap := item.(map[string]interface{}) + dataDisksMap := item.(map[string]interface{}) dataDisk := cvm.DataDisk{} - if v, ok := dMap["disk_size"]; ok { + if v, ok := dataDisksMap["disk_size"]; ok { dataDisk.DiskSize = helper.IntInt64(v.(int)) } - if v, ok := dMap["disk_type"]; ok { + if v, ok := dataDisksMap["disk_type"]; ok { dataDisk.DiskType = helper.String(v.(string)) } - if v, ok := dMap["disk_id"]; ok { + if v, ok := dataDisksMap["disk_id"]; ok { dataDisk.DiskId = helper.String(v.(string)) } - if v, ok := dMap["delete_with_instance"]; ok { + if v, ok := dataDisksMap["delete_with_instance"]; ok { dataDisk.DeleteWithInstance = helper.Bool(v.(bool)) } - if v, ok := dMap["snapshot_id"]; ok { + if v, ok := dataDisksMap["snapshot_id"]; ok { dataDisk.SnapshotId = helper.String(v.(string)) } - if v, ok := dMap["encrypt"]; ok { + if v, ok := dataDisksMap["encrypt"]; ok { dataDisk.Encrypt = helper.Bool(v.(bool)) } - if v, ok := dMap["kms_key_id"]; ok { + if v, ok := dataDisksMap["kms_key_id"]; ok { dataDisk.KmsKeyId = helper.String(v.(string)) } - if v, ok := dMap["throughput_performance"]; ok { + if v, ok := dataDisksMap["throughput_performance"]; ok { dataDisk.ThroughputPerformance = helper.IntInt64(v.(int)) } - if v, ok := dMap["cdc_id"]; ok { + if v, ok := dataDisksMap["cdc_id"]; ok { dataDisk.CdcId = helper.String(v.(string)) } request.DataDisks = append(request.DataDisks, &dataDisk) } } - if dMap, ok := helper.InterfacesHeadMap(d, "virtual_private_cloud"); ok { + if virtualPrivateCloudMap, ok := helper.InterfacesHeadMap(d, "virtual_private_cloud"); ok { virtualPrivateCloud := cvm.VirtualPrivateCloud{} - if v, ok := dMap["vpc_id"]; ok { + if v, ok := virtualPrivateCloudMap["vpc_id"]; ok { virtualPrivateCloud.VpcId = helper.String(v.(string)) } - if v, ok := dMap["subnet_id"]; ok { + if v, ok := virtualPrivateCloudMap["subnet_id"]; ok { virtualPrivateCloud.SubnetId = helper.String(v.(string)) } - if v, ok := dMap["as_vpc_gateway"]; ok { + if v, ok := virtualPrivateCloudMap["as_vpc_gateway"]; ok { virtualPrivateCloud.AsVpcGateway = helper.Bool(v.(bool)) } - if v, ok := dMap["private_ip_addresses"]; ok { + if v, ok := virtualPrivateCloudMap["private_ip_addresses"]; ok { privateIpAddressesSet := v.(*schema.Set).List() for i := range privateIpAddressesSet { privateIpAddresses := privateIpAddressesSet[i].(string) - virtualPrivateCloud.PrivateIpAddresses = append(virtualPrivateCloud.PrivateIpAddresses, &privateIpAddresses) + virtualPrivateCloud.PrivateIpAddresses = append(virtualPrivateCloud.PrivateIpAddresses, helper.String(privateIpAddresses)) } } - if v, ok := dMap["ipv6_address_count"]; ok { + if v, ok := virtualPrivateCloudMap["ipv6_address_count"]; ok { virtualPrivateCloud.Ipv6AddressCount = helper.IntUint64(v.(int)) } request.VirtualPrivateCloud = &virtualPrivateCloud } - if dMap, ok := helper.InterfacesHeadMap(d, "internet_accessible"); ok { + if internetAccessibleMap, ok := helper.InterfacesHeadMap(d, "internet_accessible"); ok { internetAccessible := cvm.InternetAccessible{} - if v, ok := dMap["internet_charge_type"]; ok { + if v, ok := internetAccessibleMap["internet_charge_type"]; ok { internetAccessible.InternetChargeType = helper.String(v.(string)) } - if v, ok := dMap["internet_max_bandwidth_out"]; ok { + if v, ok := internetAccessibleMap["internet_max_bandwidth_out"]; ok { internetAccessible.InternetMaxBandwidthOut = helper.IntInt64(v.(int)) } - if v, ok := dMap["public_ip_assigned"]; ok { + if v, ok := internetAccessibleMap["public_ip_assigned"]; ok { internetAccessible.PublicIpAssigned = helper.Bool(v.(bool)) } - if v, ok := dMap["bandwidth_package_id"]; ok { + if v, ok := internetAccessibleMap["bandwidth_package_id"]; ok { internetAccessible.BandwidthPackageId = helper.String(v.(string)) } request.InternetAccessible = &internetAccessible @@ -877,19 +885,19 @@ func resourceTencentCloudCvmLaunchTemplateVersionCreate(d *schema.ResourceData, request.InstanceName = helper.String(v.(string)) } - if dMap, ok := helper.InterfacesHeadMap(d, "login_settings"); ok { + if loginSettingsMap, ok := helper.InterfacesHeadMap(d, "login_settings"); ok { loginSettings := cvm.LoginSettings{} - if v, ok := dMap["password"]; ok { + if v, ok := loginSettingsMap["password"]; ok { loginSettings.Password = helper.String(v.(string)) } - if v, ok := dMap["key_ids"]; ok { + if v, ok := loginSettingsMap["key_ids"]; ok { keyIdsSet := v.(*schema.Set).List() for i := range keyIdsSet { keyIds := keyIdsSet[i].(string) - loginSettings.KeyIds = append(loginSettings.KeyIds, &keyIds) + loginSettings.KeyIds = append(loginSettings.KeyIds, helper.String(keyIds)) } } - if v, ok := dMap["keep_image_login"]; ok { + if v, ok := loginSettingsMap["keep_image_login"]; ok { loginSettings.KeepImageLogin = helper.String(v.(string)) } request.LoginSettings = &loginSettings @@ -899,27 +907,27 @@ func resourceTencentCloudCvmLaunchTemplateVersionCreate(d *schema.ResourceData, securityGroupIdsSet := v.(*schema.Set).List() for i := range securityGroupIdsSet { securityGroupIds := securityGroupIdsSet[i].(string) - request.SecurityGroupIds = append(request.SecurityGroupIds, &securityGroupIds) + request.SecurityGroupIds = append(request.SecurityGroupIds, helper.String(securityGroupIds)) } } - if dMap, ok := helper.InterfacesHeadMap(d, "enhanced_service"); ok { + if enhancedServiceMap, ok := helper.InterfacesHeadMap(d, "enhanced_service"); ok { enhancedService := cvm.EnhancedService{} - if securityServiceMap, ok := helper.InterfaceToMap(dMap, "security_service"); ok { + if securityServiceMap, ok := helper.ConvertInterfacesHeadToMap(enhancedServiceMap["security_service"]); ok { runSecurityServiceEnabled := cvm.RunSecurityServiceEnabled{} if v, ok := securityServiceMap["enabled"]; ok { runSecurityServiceEnabled.Enabled = helper.Bool(v.(bool)) } enhancedService.SecurityService = &runSecurityServiceEnabled } - if monitorServiceMap, ok := helper.InterfaceToMap(dMap, "monitor_service"); ok { + if monitorServiceMap, ok := helper.ConvertInterfacesHeadToMap(enhancedServiceMap["monitor_service"]); ok { runMonitorServiceEnabled := cvm.RunMonitorServiceEnabled{} if v, ok := monitorServiceMap["enabled"]; ok { runMonitorServiceEnabled.Enabled = helper.Bool(v.(bool)) } enhancedService.MonitorService = &runMonitorServiceEnabled } - if automationServiceMap, ok := helper.InterfaceToMap(dMap, "automation_service"); ok { + if automationServiceMap, ok := helper.ConvertInterfacesHeadToMap(enhancedServiceMap["automation_service"]); ok { runAutomationServiceEnabled := cvm.RunAutomationServiceEnabled{} if v, ok := automationServiceMap["enabled"]; ok { runAutomationServiceEnabled.Enabled = helper.Bool(v.(bool)) @@ -937,15 +945,15 @@ func resourceTencentCloudCvmLaunchTemplateVersionCreate(d *schema.ResourceData, request.HostName = helper.String(v.(string)) } - if dMap, ok := helper.InterfacesHeadMap(d, "action_timer"); ok { + if actionTimerMap, ok := helper.InterfacesHeadMap(d, "action_timer"); ok { actionTimer := cvm.ActionTimer{} - if v, ok := dMap["timer_action"]; ok { + if v, ok := actionTimerMap["timer_action"]; ok { actionTimer.TimerAction = helper.String(v.(string)) } - if v, ok := dMap["action_time"]; ok { + if v, ok := actionTimerMap["action_time"]; ok { actionTimer.ActionTime = helper.String(v.(string)) } - if externalsMap, ok := helper.InterfaceToMap(dMap, "externals"); ok { + if externalsMap, ok := helper.ConvertInterfacesHeadToMap(actionTimerMap["externals"]); ok { externals := cvm.Externals{} if v, ok := externalsMap["release_address"]; ok { externals.ReleaseAddress = helper.Bool(v.(bool)) @@ -954,10 +962,10 @@ func resourceTencentCloudCvmLaunchTemplateVersionCreate(d *schema.ResourceData, unsupportNetworksSet := v.(*schema.Set).List() for i := range unsupportNetworksSet { unsupportNetworks := unsupportNetworksSet[i].(string) - externals.UnsupportNetworks = append(externals.UnsupportNetworks, &unsupportNetworks) + externals.UnsupportNetworks = append(externals.UnsupportNetworks, helper.String(unsupportNetworks)) } } - if storageBlockAttrMap, ok := helper.InterfaceToMap(externalsMap, "storage_block_attr"); ok { + if storageBlockAttrMap, ok := helper.ConvertInterfacesHeadToMap(externalsMap["storage_block_attr"]); ok { storageBlock := cvm.StorageBlock{} if v, ok := storageBlockAttrMap["type"]; ok { storageBlock.Type = helper.String(v.(string)) @@ -979,18 +987,18 @@ func resourceTencentCloudCvmLaunchTemplateVersionCreate(d *schema.ResourceData, disasterRecoverGroupIdsSet := v.(*schema.Set).List() for i := range disasterRecoverGroupIdsSet { disasterRecoverGroupIds := disasterRecoverGroupIdsSet[i].(string) - request.DisasterRecoverGroupIds = append(request.DisasterRecoverGroupIds, &disasterRecoverGroupIds) + request.DisasterRecoverGroupIds = append(request.DisasterRecoverGroupIds, helper.String(disasterRecoverGroupIds)) } } if v, ok := d.GetOk("tag_specification"); ok { for _, item := range v.([]interface{}) { - dMap := item.(map[string]interface{}) + tagSpecificationMap := item.(map[string]interface{}) tagSpecification := cvm.TagSpecification{} - if v, ok := dMap["resource_type"]; ok { + if v, ok := tagSpecificationMap["resource_type"]; ok { tagSpecification.ResourceType = helper.String(v.(string)) } - if v, ok := dMap["tags"]; ok { + if v, ok := tagSpecificationMap["tags"]; ok { for _, item := range v.([]interface{}) { tagsMap := item.(map[string]interface{}) tag := cvm.Tag{} @@ -1007,9 +1015,9 @@ func resourceTencentCloudCvmLaunchTemplateVersionCreate(d *schema.ResourceData, } } - if dMap, ok := helper.InterfacesHeadMap(d, "instance_market_options"); ok { + if instanceMarketOptionsMap, ok := helper.InterfacesHeadMap(d, "instance_market_options"); ok { instanceMarketOptionsRequest := cvm.InstanceMarketOptionsRequest{} - if spotOptionsMap, ok := helper.InterfaceToMap(dMap, "spot_options"); ok { + if spotOptionsMap, ok := helper.ConvertInterfacesHeadToMap(instanceMarketOptionsMap["spot_options"]); ok { spotMarketOptions := cvm.SpotMarketOptions{} if v, ok := spotOptionsMap["max_price"]; ok { spotMarketOptions.MaxPrice = helper.String(v.(string)) @@ -1019,7 +1027,7 @@ func resourceTencentCloudCvmLaunchTemplateVersionCreate(d *schema.ResourceData, } instanceMarketOptionsRequest.SpotOptions = &spotMarketOptions } - if v, ok := dMap["market_type"]; ok { + if v, ok := instanceMarketOptionsMap["market_type"]; ok { instanceMarketOptionsRequest.MarketType = helper.String(v.(string)) } request.InstanceMarketOptions = &instanceMarketOptionsRequest @@ -1045,12 +1053,12 @@ func resourceTencentCloudCvmLaunchTemplateVersionCreate(d *schema.ResourceData, request.InstanceChargeType = helper.String(v.(string)) } - if dMap, ok := helper.InterfacesHeadMap(d, "instance_charge_prepaid"); ok { + if instanceChargePrepaidMap, ok := helper.InterfacesHeadMap(d, "instance_charge_prepaid"); ok { instanceChargePrepaid := cvm.InstanceChargePrepaid{} - if v, ok := dMap["period"]; ok { + if v, ok := instanceChargePrepaidMap["period"]; ok { instanceChargePrepaid.Period = helper.IntInt64(v.(int)) } - if v, ok := dMap["renew_flag"]; ok { + if v, ok := instanceChargePrepaidMap["renew_flag"]; ok { instanceChargePrepaid.RenewFlag = helper.String(v.(string)) } request.InstanceChargePrepaid = &instanceChargePrepaid @@ -1061,7 +1069,7 @@ func resourceTencentCloudCvmLaunchTemplateVersionCreate(d *schema.ResourceData, } err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().CreateLaunchTemplateVersion(request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().CreateLaunchTemplateVersionWithContext(ctx, request) if e != nil { return tccommon.RetryError(e) } else { @@ -1071,13 +1079,13 @@ func resourceTencentCloudCvmLaunchTemplateVersionCreate(d *schema.ResourceData, return nil }) if err != nil { - log.Printf("[CRITAL]%s create cvm launchTemplateVersion failed, reason:%+v", logId, err) + log.Printf("[CRITAL]%s create cvm launch template version failed, reason:%+v", logId, err) return err } - launchTemplateVersionNumber := *response.Response.LaunchTemplateVersionNumber - launchTemplateVersionNumberString := strconv.FormatInt(launchTemplateVersionNumber, 10) - d.SetId(launchTemplateId + tccommon.FILED_SP + launchTemplateVersionNumberString) + launchTemplateVersionNumber = *response.Response.LaunchTemplateVersionNumber + + d.SetId(strings.Join([]string{launchTemplateId, helper.Int64ToStr(launchTemplateVersionNumber)}, tccommon.FILED_SP)) return resourceTencentCloudCvmLaunchTemplateVersionRead(d, meta) } @@ -1088,7 +1096,7 @@ func resourceTencentCloudCvmLaunchTemplateVersionRead(d *schema.ResourceData, me logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} @@ -1099,236 +1107,235 @@ func resourceTencentCloudCvmLaunchTemplateVersionRead(d *schema.ResourceData, me launchTemplateId := idSplit[0] launchTemplateVersionNumber := idSplit[1] - launchTemplateVersion, err := service.DescribeCvmLaunchTemplateVersionById(ctx, launchTemplateId, launchTemplateVersionNumber) + _ = d.Set("launch_template_id", launchTemplateId) + + respData, err := service.DescribeCvmLaunchTemplateVersionById(ctx, launchTemplateId, launchTemplateVersionNumber) if err != nil { return err } - if launchTemplateVersion == nil { + if respData == nil { d.SetId("") - log.Printf("[WARN]%s resource `CvmLaunchTemplateVersion` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + log.Printf("[WARN]%s resource `cvm_launch_template_version` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) return nil } - - if launchTemplateVersion.LaunchTemplateId != nil { - _ = d.Set("launch_template_id", launchTemplateVersion.LaunchTemplateId) + if respData.LaunchTemplateId != nil { + _ = d.Set("launch_template_id", respData.LaunchTemplateId) } - if launchTemplateVersion.LaunchTemplateVersion != nil { - _ = d.Set("launch_template_version", launchTemplateVersion.LaunchTemplateVersion) + if respData.LaunchTemplateVersion != nil { + _ = d.Set("launch_template_version", respData.LaunchTemplateVersion) } - if launchTemplateVersion.LaunchTemplateVersionDescription != nil { - _ = d.Set("launch_template_version_description", launchTemplateVersion.LaunchTemplateVersionDescription) + if respData.LaunchTemplateVersionDescription != nil { + _ = d.Set("launch_template_version_description", respData.LaunchTemplateVersionDescription) } - if launchTemplateVersion.LaunchTemplateVersionData != nil { - if launchTemplateVersion.LaunchTemplateVersionData.InstanceType != nil { - _ = d.Set("instance_type", launchTemplateVersion.LaunchTemplateVersionData.InstanceType) + if respData.LaunchTemplateVersionData != nil { + if respData.LaunchTemplateVersionData.InstanceType != nil { + _ = d.Set("instance_type", respData.LaunchTemplateVersionData.InstanceType) } - if launchTemplateVersion.LaunchTemplateVersionData.ImageId != nil { - _ = d.Set("image_id", launchTemplateVersion.LaunchTemplateVersionData.ImageId) + if respData.LaunchTemplateVersionData.ImageId != nil { + _ = d.Set("image_id", respData.LaunchTemplateVersionData.ImageId) } - if launchTemplateVersion.LaunchTemplateVersionData.Placement != nil { - placementMap := map[string]interface{}{} + placementMap := map[string]interface{}{} - if launchTemplateVersion.LaunchTemplateVersionData.Placement.Zone != nil { - placementMap["zone"] = launchTemplateVersion.LaunchTemplateVersionData.Placement.Zone + if respData.LaunchTemplateVersionData.Placement != nil { + if respData.LaunchTemplateVersionData.Placement.Zone != nil { + placementMap["zone"] = respData.LaunchTemplateVersionData.Placement.Zone } - if launchTemplateVersion.LaunchTemplateVersionData.Placement.ProjectId != nil { - placementMap["project_id"] = launchTemplateVersion.LaunchTemplateVersionData.Placement.ProjectId + if respData.LaunchTemplateVersionData.Placement.ProjectId != nil { + placementMap["project_id"] = respData.LaunchTemplateVersionData.Placement.ProjectId } - if launchTemplateVersion.LaunchTemplateVersionData.Placement.HostIds != nil { - placementMap["host_ids"] = launchTemplateVersion.LaunchTemplateVersionData.Placement.HostIds + if respData.LaunchTemplateVersionData.Placement.HostIds != nil { + placementMap["host_ids"] = respData.LaunchTemplateVersionData.Placement.HostIds } - if launchTemplateVersion.LaunchTemplateVersionData.Placement.HostIps != nil { - placementMap["host_ips"] = launchTemplateVersion.LaunchTemplateVersionData.Placement.HostIps + if respData.LaunchTemplateVersionData.Placement.HostIps != nil { + placementMap["host_ips"] = respData.LaunchTemplateVersionData.Placement.HostIps } _ = d.Set("placement", []interface{}{placementMap}) } - if launchTemplateVersion.LaunchTemplateVersionData.SystemDisk != nil { - systemDiskMap := map[string]interface{}{} + systemDiskMap := map[string]interface{}{} - if launchTemplateVersion.LaunchTemplateVersionData.SystemDisk.DiskType != nil { - systemDiskMap["disk_type"] = launchTemplateVersion.LaunchTemplateVersionData.SystemDisk.DiskType + if respData.LaunchTemplateVersionData.SystemDisk != nil { + if respData.LaunchTemplateVersionData.SystemDisk.DiskType != nil { + systemDiskMap["disk_type"] = respData.LaunchTemplateVersionData.SystemDisk.DiskType } - if launchTemplateVersion.LaunchTemplateVersionData.SystemDisk.DiskId != nil { - systemDiskMap["disk_id"] = launchTemplateVersion.LaunchTemplateVersionData.SystemDisk.DiskId + if respData.LaunchTemplateVersionData.SystemDisk.DiskId != nil { + systemDiskMap["disk_id"] = respData.LaunchTemplateVersionData.SystemDisk.DiskId } - if launchTemplateVersion.LaunchTemplateVersionData.SystemDisk.DiskSize != nil { - systemDiskMap["disk_size"] = launchTemplateVersion.LaunchTemplateVersionData.SystemDisk.DiskSize + if respData.LaunchTemplateVersionData.SystemDisk.DiskSize != nil { + systemDiskMap["disk_size"] = respData.LaunchTemplateVersionData.SystemDisk.DiskSize } - if launchTemplateVersion.LaunchTemplateVersionData.SystemDisk.CdcId != nil { - systemDiskMap["cdc_id"] = launchTemplateVersion.LaunchTemplateVersionData.SystemDisk.CdcId + if respData.LaunchTemplateVersionData.SystemDisk.CdcId != nil { + systemDiskMap["cdc_id"] = respData.LaunchTemplateVersionData.SystemDisk.CdcId } _ = d.Set("system_disk", []interface{}{systemDiskMap}) } - if launchTemplateVersion.LaunchTemplateVersionData.DataDisks != nil { - dataDisksList := []interface{}{} - for _, dataDisk := range launchTemplateVersion.LaunchTemplateVersionData.DataDisks { + dataDisksList := make([]map[string]interface{}, 0, len(respData.LaunchTemplateVersionData.DataDisks)) + if respData.LaunchTemplateVersionData.DataDisks != nil { + for _, dataDisks := range respData.LaunchTemplateVersionData.DataDisks { dataDisksMap := map[string]interface{}{} - if dataDisk.DiskSize != nil { - dataDisksMap["disk_size"] = dataDisk.DiskSize + if dataDisks.DiskSize != nil { + dataDisksMap["disk_size"] = dataDisks.DiskSize } - if dataDisk.DiskType != nil { - dataDisksMap["disk_type"] = dataDisk.DiskType + if dataDisks.DiskType != nil { + dataDisksMap["disk_type"] = dataDisks.DiskType } - if dataDisk.DiskId != nil { - dataDisksMap["disk_id"] = dataDisk.DiskId + if dataDisks.DiskId != nil { + dataDisksMap["disk_id"] = dataDisks.DiskId } - if dataDisk.DeleteWithInstance != nil { - dataDisksMap["delete_with_instance"] = dataDisk.DeleteWithInstance + if dataDisks.DeleteWithInstance != nil { + dataDisksMap["delete_with_instance"] = dataDisks.DeleteWithInstance } - if dataDisk.SnapshotId != nil { - dataDisksMap["snapshot_id"] = dataDisk.SnapshotId + if dataDisks.SnapshotId != nil { + dataDisksMap["snapshot_id"] = dataDisks.SnapshotId } - if dataDisk.Encrypt != nil { - dataDisksMap["encrypt"] = dataDisk.Encrypt + if dataDisks.Encrypt != nil { + dataDisksMap["encrypt"] = dataDisks.Encrypt } - if dataDisk.KmsKeyId != nil { - dataDisksMap["kms_key_id"] = dataDisk.KmsKeyId + if dataDisks.KmsKeyId != nil { + dataDisksMap["kms_key_id"] = dataDisks.KmsKeyId } - if dataDisk.ThroughputPerformance != nil { - dataDisksMap["throughput_performance"] = dataDisk.ThroughputPerformance + if dataDisks.ThroughputPerformance != nil { + dataDisksMap["throughput_performance"] = dataDisks.ThroughputPerformance } - if dataDisk.CdcId != nil { - dataDisksMap["cdc_id"] = dataDisk.CdcId + if dataDisks.CdcId != nil { + dataDisksMap["cdc_id"] = dataDisks.CdcId } dataDisksList = append(dataDisksList, dataDisksMap) } _ = d.Set("data_disks", dataDisksList) - } + virtualPrivateCloudMap := map[string]interface{}{} - if launchTemplateVersion.LaunchTemplateVersionData.VirtualPrivateCloud != nil { - virtualPrivateCloudMap := map[string]interface{}{} - - if launchTemplateVersion.LaunchTemplateVersionData.VirtualPrivateCloud.VpcId != nil { - virtualPrivateCloudMap["vpc_id"] = launchTemplateVersion.LaunchTemplateVersionData.VirtualPrivateCloud.VpcId + if respData.LaunchTemplateVersionData.VirtualPrivateCloud != nil { + if respData.LaunchTemplateVersionData.VirtualPrivateCloud.VpcId != nil { + virtualPrivateCloudMap["vpc_id"] = respData.LaunchTemplateVersionData.VirtualPrivateCloud.VpcId } - if launchTemplateVersion.LaunchTemplateVersionData.VirtualPrivateCloud.SubnetId != nil { - virtualPrivateCloudMap["subnet_id"] = launchTemplateVersion.LaunchTemplateVersionData.VirtualPrivateCloud.SubnetId + if respData.LaunchTemplateVersionData.VirtualPrivateCloud.SubnetId != nil { + virtualPrivateCloudMap["subnet_id"] = respData.LaunchTemplateVersionData.VirtualPrivateCloud.SubnetId } - if launchTemplateVersion.LaunchTemplateVersionData.VirtualPrivateCloud.AsVpcGateway != nil { - virtualPrivateCloudMap["as_vpc_gateway"] = launchTemplateVersion.LaunchTemplateVersionData.VirtualPrivateCloud.AsVpcGateway + if respData.LaunchTemplateVersionData.VirtualPrivateCloud.AsVpcGateway != nil { + virtualPrivateCloudMap["as_vpc_gateway"] = respData.LaunchTemplateVersionData.VirtualPrivateCloud.AsVpcGateway } - if launchTemplateVersion.LaunchTemplateVersionData.VirtualPrivateCloud.PrivateIpAddresses != nil { - virtualPrivateCloudMap["private_ip_addresses"] = launchTemplateVersion.LaunchTemplateVersionData.VirtualPrivateCloud.PrivateIpAddresses + if respData.LaunchTemplateVersionData.VirtualPrivateCloud.PrivateIpAddresses != nil { + virtualPrivateCloudMap["private_ip_addresses"] = respData.LaunchTemplateVersionData.VirtualPrivateCloud.PrivateIpAddresses } - if launchTemplateVersion.LaunchTemplateVersionData.VirtualPrivateCloud.Ipv6AddressCount != nil { - virtualPrivateCloudMap["ipv6_address_count"] = launchTemplateVersion.LaunchTemplateVersionData.VirtualPrivateCloud.Ipv6AddressCount + if respData.LaunchTemplateVersionData.VirtualPrivateCloud.Ipv6AddressCount != nil { + virtualPrivateCloudMap["ipv6_address_count"] = respData.LaunchTemplateVersionData.VirtualPrivateCloud.Ipv6AddressCount } _ = d.Set("virtual_private_cloud", []interface{}{virtualPrivateCloudMap}) } - if launchTemplateVersion.LaunchTemplateVersionData.InternetAccessible != nil { - internetAccessibleMap := map[string]interface{}{} + internetAccessibleMap := map[string]interface{}{} - if launchTemplateVersion.LaunchTemplateVersionData.InternetAccessible.InternetChargeType != nil { - internetAccessibleMap["internet_charge_type"] = launchTemplateVersion.LaunchTemplateVersionData.InternetAccessible.InternetChargeType + if respData.LaunchTemplateVersionData.InternetAccessible != nil { + if respData.LaunchTemplateVersionData.InternetAccessible.InternetChargeType != nil { + internetAccessibleMap["internet_charge_type"] = respData.LaunchTemplateVersionData.InternetAccessible.InternetChargeType } - if launchTemplateVersion.LaunchTemplateVersionData.InternetAccessible.InternetMaxBandwidthOut != nil { - internetAccessibleMap["internet_max_bandwidth_out"] = launchTemplateVersion.LaunchTemplateVersionData.InternetAccessible.InternetMaxBandwidthOut + if respData.LaunchTemplateVersionData.InternetAccessible.InternetMaxBandwidthOut != nil { + internetAccessibleMap["internet_max_bandwidth_out"] = respData.LaunchTemplateVersionData.InternetAccessible.InternetMaxBandwidthOut } - if launchTemplateVersion.LaunchTemplateVersionData.InternetAccessible.PublicIpAssigned != nil { - internetAccessibleMap["public_ip_assigned"] = launchTemplateVersion.LaunchTemplateVersionData.InternetAccessible.PublicIpAssigned + if respData.LaunchTemplateVersionData.InternetAccessible.PublicIpAssigned != nil { + internetAccessibleMap["public_ip_assigned"] = respData.LaunchTemplateVersionData.InternetAccessible.PublicIpAssigned } - if launchTemplateVersion.LaunchTemplateVersionData.InternetAccessible.BandwidthPackageId != nil { - internetAccessibleMap["bandwidth_package_id"] = launchTemplateVersion.LaunchTemplateVersionData.InternetAccessible.BandwidthPackageId + if respData.LaunchTemplateVersionData.InternetAccessible.BandwidthPackageId != nil { + internetAccessibleMap["bandwidth_package_id"] = respData.LaunchTemplateVersionData.InternetAccessible.BandwidthPackageId } _ = d.Set("internet_accessible", []interface{}{internetAccessibleMap}) } - if launchTemplateVersion.LaunchTemplateVersionData.InstanceCount != nil { - _ = d.Set("instance_count", launchTemplateVersion.LaunchTemplateVersionData.InstanceCount) + if respData.LaunchTemplateVersionData.InstanceCount != nil { + _ = d.Set("instance_count", respData.LaunchTemplateVersionData.InstanceCount) } - if launchTemplateVersion.LaunchTemplateVersionData.InstanceName != nil { - _ = d.Set("instance_name", launchTemplateVersion.LaunchTemplateVersionData.InstanceName) + if respData.LaunchTemplateVersionData.InstanceName != nil { + _ = d.Set("instance_name", respData.LaunchTemplateVersionData.InstanceName) } - if launchTemplateVersion.LaunchTemplateVersionData.LoginSettings != nil { - loginSettingsMap := map[string]interface{}{} + loginSettingsMap := map[string]interface{}{} - if launchTemplateVersion.LaunchTemplateVersionData.LoginSettings.Password != nil { - loginSettingsMap["password"] = launchTemplateVersion.LaunchTemplateVersionData.LoginSettings.Password + if respData.LaunchTemplateVersionData.LoginSettings != nil { + if respData.LaunchTemplateVersionData.LoginSettings.Password != nil { + loginSettingsMap["password"] = respData.LaunchTemplateVersionData.LoginSettings.Password } - if launchTemplateVersion.LaunchTemplateVersionData.LoginSettings.KeyIds != nil { - loginSettingsMap["key_ids"] = launchTemplateVersion.LaunchTemplateVersionData.LoginSettings.KeyIds + if respData.LaunchTemplateVersionData.LoginSettings.KeyIds != nil { + loginSettingsMap["key_ids"] = respData.LaunchTemplateVersionData.LoginSettings.KeyIds } - if launchTemplateVersion.LaunchTemplateVersionData.LoginSettings.KeepImageLogin != nil { - loginSettingsMap["keep_image_login"] = launchTemplateVersion.LaunchTemplateVersionData.LoginSettings.KeepImageLogin + if respData.LaunchTemplateVersionData.LoginSettings.KeepImageLogin != nil { + loginSettingsMap["keep_image_login"] = respData.LaunchTemplateVersionData.LoginSettings.KeepImageLogin } _ = d.Set("login_settings", []interface{}{loginSettingsMap}) } - if launchTemplateVersion.LaunchTemplateVersionData.SecurityGroupIds != nil { - _ = d.Set("security_group_ids", launchTemplateVersion.LaunchTemplateVersionData.SecurityGroupIds) + if respData.LaunchTemplateVersionData.SecurityGroupIds != nil { + _ = d.Set("security_group_ids", respData.LaunchTemplateVersionData.SecurityGroupIds) } - if launchTemplateVersion.LaunchTemplateVersionData.EnhancedService != nil { - enhancedServiceMap := map[string]interface{}{} + enhancedServiceMap := map[string]interface{}{} - if launchTemplateVersion.LaunchTemplateVersionData.EnhancedService.SecurityService != nil { - securityServiceMap := map[string]interface{}{} + if respData.LaunchTemplateVersionData.EnhancedService != nil { + securityServiceMap := map[string]interface{}{} - if launchTemplateVersion.LaunchTemplateVersionData.EnhancedService.SecurityService.Enabled != nil { - securityServiceMap["enabled"] = launchTemplateVersion.LaunchTemplateVersionData.EnhancedService.SecurityService.Enabled + if respData.LaunchTemplateVersionData.EnhancedService.SecurityService != nil { + if respData.LaunchTemplateVersionData.EnhancedService.SecurityService.Enabled != nil { + securityServiceMap["enabled"] = respData.LaunchTemplateVersionData.EnhancedService.SecurityService.Enabled } enhancedServiceMap["security_service"] = []interface{}{securityServiceMap} } - if launchTemplateVersion.LaunchTemplateVersionData.EnhancedService.MonitorService != nil { - monitorServiceMap := map[string]interface{}{} + monitorServiceMap := map[string]interface{}{} - if launchTemplateVersion.LaunchTemplateVersionData.EnhancedService.MonitorService.Enabled != nil { - monitorServiceMap["enabled"] = launchTemplateVersion.LaunchTemplateVersionData.EnhancedService.MonitorService.Enabled + if respData.LaunchTemplateVersionData.EnhancedService.MonitorService != nil { + if respData.LaunchTemplateVersionData.EnhancedService.MonitorService.Enabled != nil { + monitorServiceMap["enabled"] = respData.LaunchTemplateVersionData.EnhancedService.MonitorService.Enabled } enhancedServiceMap["monitor_service"] = []interface{}{monitorServiceMap} } - if launchTemplateVersion.LaunchTemplateVersionData.EnhancedService.AutomationService != nil { - automationServiceMap := map[string]interface{}{} + automationServiceMap := map[string]interface{}{} - if launchTemplateVersion.LaunchTemplateVersionData.EnhancedService.AutomationService.Enabled != nil { - automationServiceMap["enabled"] = launchTemplateVersion.LaunchTemplateVersionData.EnhancedService.AutomationService.Enabled + if respData.LaunchTemplateVersionData.EnhancedService.AutomationService != nil { + if respData.LaunchTemplateVersionData.EnhancedService.AutomationService.Enabled != nil { + automationServiceMap["enabled"] = respData.LaunchTemplateVersionData.EnhancedService.AutomationService.Enabled } enhancedServiceMap["automation_service"] = []interface{}{automationServiceMap} @@ -1337,49 +1344,49 @@ func resourceTencentCloudCvmLaunchTemplateVersionRead(d *schema.ResourceData, me _ = d.Set("enhanced_service", []interface{}{enhancedServiceMap}) } - if launchTemplateVersion.LaunchTemplateVersionData.ClientToken != nil { - _ = d.Set("client_token", launchTemplateVersion.LaunchTemplateVersionData.ClientToken) + if respData.LaunchTemplateVersionData.ClientToken != nil { + _ = d.Set("client_token", respData.LaunchTemplateVersionData.ClientToken) } - if launchTemplateVersion.LaunchTemplateVersionData.HostName != nil { - _ = d.Set("host_name", launchTemplateVersion.LaunchTemplateVersionData.HostName) + if respData.LaunchTemplateVersionData.HostName != nil { + _ = d.Set("host_name", respData.LaunchTemplateVersionData.HostName) } - if launchTemplateVersion.LaunchTemplateVersionData.ActionTimer != nil { - actionTimerMap := map[string]interface{}{} + actionTimerMap := map[string]interface{}{} - if launchTemplateVersion.LaunchTemplateVersionData.ActionTimer.TimerAction != nil { - actionTimerMap["timer_action"] = launchTemplateVersion.LaunchTemplateVersionData.ActionTimer.TimerAction + if respData.LaunchTemplateVersionData.ActionTimer != nil { + if respData.LaunchTemplateVersionData.ActionTimer.TimerAction != nil { + actionTimerMap["timer_action"] = respData.LaunchTemplateVersionData.ActionTimer.TimerAction } - if launchTemplateVersion.LaunchTemplateVersionData.ActionTimer.ActionTime != nil { - actionTimerMap["action_time"] = launchTemplateVersion.LaunchTemplateVersionData.ActionTimer.ActionTime + if respData.LaunchTemplateVersionData.ActionTimer.ActionTime != nil { + actionTimerMap["action_time"] = respData.LaunchTemplateVersionData.ActionTimer.ActionTime } - if launchTemplateVersion.LaunchTemplateVersionData.ActionTimer.Externals != nil { - externalsMap := map[string]interface{}{} + externalsMap := map[string]interface{}{} - if launchTemplateVersion.LaunchTemplateVersionData.ActionTimer.Externals.ReleaseAddress != nil { - externalsMap["release_address"] = launchTemplateVersion.LaunchTemplateVersionData.ActionTimer.Externals.ReleaseAddress + if respData.LaunchTemplateVersionData.ActionTimer.Externals != nil { + if respData.LaunchTemplateVersionData.ActionTimer.Externals.ReleaseAddress != nil { + externalsMap["release_address"] = respData.LaunchTemplateVersionData.ActionTimer.Externals.ReleaseAddress } - if launchTemplateVersion.LaunchTemplateVersionData.ActionTimer.Externals.UnsupportNetworks != nil { - externalsMap["unsupport_networks"] = launchTemplateVersion.LaunchTemplateVersionData.ActionTimer.Externals.UnsupportNetworks + if respData.LaunchTemplateVersionData.ActionTimer.Externals.UnsupportNetworks != nil { + externalsMap["unsupport_networks"] = respData.LaunchTemplateVersionData.ActionTimer.Externals.UnsupportNetworks } - if launchTemplateVersion.LaunchTemplateVersionData.ActionTimer.Externals.StorageBlockAttr != nil { - storageBlockAttrMap := map[string]interface{}{} + storageBlockAttrMap := map[string]interface{}{} - if launchTemplateVersion.LaunchTemplateVersionData.ActionTimer.Externals.StorageBlockAttr.Type != nil { - storageBlockAttrMap["type"] = launchTemplateVersion.LaunchTemplateVersionData.ActionTimer.Externals.StorageBlockAttr.Type + if respData.LaunchTemplateVersionData.ActionTimer.Externals.StorageBlockAttr != nil { + if respData.LaunchTemplateVersionData.ActionTimer.Externals.StorageBlockAttr.Type != nil { + storageBlockAttrMap["type"] = respData.LaunchTemplateVersionData.ActionTimer.Externals.StorageBlockAttr.Type } - if launchTemplateVersion.LaunchTemplateVersionData.ActionTimer.Externals.StorageBlockAttr.MinSize != nil { - storageBlockAttrMap["min_size"] = launchTemplateVersion.LaunchTemplateVersionData.ActionTimer.Externals.StorageBlockAttr.MinSize + if respData.LaunchTemplateVersionData.ActionTimer.Externals.StorageBlockAttr.MinSize != nil { + storageBlockAttrMap["min_size"] = respData.LaunchTemplateVersionData.ActionTimer.Externals.StorageBlockAttr.MinSize } - if launchTemplateVersion.LaunchTemplateVersionData.ActionTimer.Externals.StorageBlockAttr.MaxSize != nil { - storageBlockAttrMap["max_size"] = launchTemplateVersion.LaunchTemplateVersionData.ActionTimer.Externals.StorageBlockAttr.MaxSize + if respData.LaunchTemplateVersionData.ActionTimer.Externals.StorageBlockAttr.MaxSize != nil { + storageBlockAttrMap["max_size"] = respData.LaunchTemplateVersionData.ActionTimer.Externals.StorageBlockAttr.MaxSize } externalsMap["storage_block_attr"] = []interface{}{storageBlockAttrMap} @@ -1391,102 +1398,100 @@ func resourceTencentCloudCvmLaunchTemplateVersionRead(d *schema.ResourceData, me _ = d.Set("action_timer", []interface{}{actionTimerMap}) } - if launchTemplateVersion.LaunchTemplateVersionData.DisasterRecoverGroupIds != nil { - _ = d.Set("disaster_recover_group_ids", launchTemplateVersion.LaunchTemplateVersionData.DisasterRecoverGroupIds) + if respData.LaunchTemplateVersionData.DisasterRecoverGroupIds != nil { + _ = d.Set("disaster_recover_group_ids", respData.LaunchTemplateVersionData.DisasterRecoverGroupIds) } - if launchTemplateVersion.LaunchTemplateVersionData.TagSpecification != nil { - tagSpecificationList := []interface{}{} - for _, tagSpecification := range launchTemplateVersion.LaunchTemplateVersionData.TagSpecification { + tagSpecificationList := make([]map[string]interface{}, 0, len(respData.LaunchTemplateVersionData.TagSpecification)) + if respData.LaunchTemplateVersionData.TagSpecification != nil { + for _, tagSpecification := range respData.LaunchTemplateVersionData.TagSpecification { tagSpecificationMap := map[string]interface{}{} if tagSpecification.ResourceType != nil { tagSpecificationMap["resource_type"] = tagSpecification.ResourceType } + tagsList := make([]map[string]interface{}, 0, len(tagSpecification.Tags)) if tagSpecification.Tags != nil { - tagsList := []interface{}{} - for _, tag := range tagSpecification.Tags { + for _, tags := range tagSpecification.Tags { tagsMap := map[string]interface{}{} - if tag.Key != nil { - tagsMap["key"] = tag.Key + if tags.Key != nil { + tagsMap["key"] = tags.Key } - if tag.Value != nil { - tagsMap["value"] = tag.Value + if tags.Value != nil { + tagsMap["value"] = tags.Value } tagsList = append(tagsList, tagsMap) } - tagSpecificationMap["tags"] = []interface{}{tagsList} + tagSpecificationMap["tags"] = tagsList } - tagSpecificationList = append(tagSpecificationList, tagSpecificationMap) } _ = d.Set("tag_specification", tagSpecificationList) - } + instanceMarketOptionsMap := map[string]interface{}{} - if launchTemplateVersion.LaunchTemplateVersionData.InstanceMarketOptions != nil { - instanceMarketOptionsMap := map[string]interface{}{} + if respData.LaunchTemplateVersionData.InstanceMarketOptions != nil { + spotOptionsMap := map[string]interface{}{} - if launchTemplateVersion.LaunchTemplateVersionData.InstanceMarketOptions.SpotOptions != nil { - spotOptionsMap := map[string]interface{}{} - - if launchTemplateVersion.LaunchTemplateVersionData.InstanceMarketOptions.SpotOptions.MaxPrice != nil { - spotOptionsMap["max_price"] = launchTemplateVersion.LaunchTemplateVersionData.InstanceMarketOptions.SpotOptions.MaxPrice + if respData.LaunchTemplateVersionData.InstanceMarketOptions.SpotOptions != nil { + if respData.LaunchTemplateVersionData.InstanceMarketOptions.SpotOptions.MaxPrice != nil { + spotOptionsMap["max_price"] = respData.LaunchTemplateVersionData.InstanceMarketOptions.SpotOptions.MaxPrice } - if launchTemplateVersion.LaunchTemplateVersionData.InstanceMarketOptions.SpotOptions.SpotInstanceType != nil { - spotOptionsMap["spot_instance_type"] = launchTemplateVersion.LaunchTemplateVersionData.InstanceMarketOptions.SpotOptions.SpotInstanceType + if respData.LaunchTemplateVersionData.InstanceMarketOptions.SpotOptions.SpotInstanceType != nil { + spotOptionsMap["spot_instance_type"] = respData.LaunchTemplateVersionData.InstanceMarketOptions.SpotOptions.SpotInstanceType } instanceMarketOptionsMap["spot_options"] = []interface{}{spotOptionsMap} } - if launchTemplateVersion.LaunchTemplateVersionData.InstanceMarketOptions.MarketType != nil { - instanceMarketOptionsMap["market_type"] = launchTemplateVersion.LaunchTemplateVersionData.InstanceMarketOptions.MarketType + if respData.LaunchTemplateVersionData.InstanceMarketOptions.MarketType != nil { + instanceMarketOptionsMap["market_type"] = respData.LaunchTemplateVersionData.InstanceMarketOptions.MarketType } _ = d.Set("instance_market_options", []interface{}{instanceMarketOptionsMap}) } - if launchTemplateVersion.LaunchTemplateVersionData.UserData != nil { - _ = d.Set("user_data", launchTemplateVersion.LaunchTemplateVersionData.UserData) + if respData.LaunchTemplateVersionData.UserData != nil { + _ = d.Set("user_data", respData.LaunchTemplateVersionData.UserData) } - if launchTemplateVersion.LaunchTemplateVersionData.CamRoleName != nil { - _ = d.Set("cam_role_name", launchTemplateVersion.LaunchTemplateVersionData.CamRoleName) + if respData.LaunchTemplateVersionData.CamRoleName != nil { + _ = d.Set("cam_role_name", respData.LaunchTemplateVersionData.CamRoleName) } - if launchTemplateVersion.LaunchTemplateVersionData.HpcClusterId != nil { - _ = d.Set("hpc_cluster_id", launchTemplateVersion.LaunchTemplateVersionData.HpcClusterId) + if respData.LaunchTemplateVersionData.HpcClusterId != nil { + _ = d.Set("hpc_cluster_id", respData.LaunchTemplateVersionData.HpcClusterId) } - if launchTemplateVersion.LaunchTemplateVersionData.InstanceChargeType != nil { - _ = d.Set("instance_charge_type", launchTemplateVersion.LaunchTemplateVersionData.InstanceChargeType) + if respData.LaunchTemplateVersionData.InstanceChargeType != nil { + _ = d.Set("instance_charge_type", respData.LaunchTemplateVersionData.InstanceChargeType) } - if launchTemplateVersion.LaunchTemplateVersionData.InstanceChargePrepaid != nil { - instanceChargePrepaidMap := map[string]interface{}{} + instanceChargePrepaidMap := map[string]interface{}{} - if launchTemplateVersion.LaunchTemplateVersionData.InstanceChargePrepaid.Period != nil { - instanceChargePrepaidMap["period"] = launchTemplateVersion.LaunchTemplateVersionData.InstanceChargePrepaid.Period + if respData.LaunchTemplateVersionData.InstanceChargePrepaid != nil { + if respData.LaunchTemplateVersionData.InstanceChargePrepaid.Period != nil { + instanceChargePrepaidMap["period"] = respData.LaunchTemplateVersionData.InstanceChargePrepaid.Period } - if launchTemplateVersion.LaunchTemplateVersionData.InstanceChargePrepaid.RenewFlag != nil { - instanceChargePrepaidMap["renew_flag"] = launchTemplateVersion.LaunchTemplateVersionData.InstanceChargePrepaid.RenewFlag + if respData.LaunchTemplateVersionData.InstanceChargePrepaid.RenewFlag != nil { + instanceChargePrepaidMap["renew_flag"] = respData.LaunchTemplateVersionData.InstanceChargePrepaid.RenewFlag } _ = d.Set("instance_charge_prepaid", []interface{}{instanceChargePrepaidMap}) } - if launchTemplateVersion.LaunchTemplateVersionData.DisableApiTermination != nil { - _ = d.Set("disable_api_termination", launchTemplateVersion.LaunchTemplateVersionData.DisableApiTermination) + if respData.LaunchTemplateVersionData.DisableApiTermination != nil { + _ = d.Set("disable_api_termination", respData.LaunchTemplateVersionData.DisableApiTermination) } + } return nil @@ -1497,9 +1502,7 @@ func resourceTencentCloudCvmLaunchTemplateVersionDelete(d *schema.ResourceData, defer tccommon.InconsistentCheck(d, meta)() logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - - service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { @@ -1508,9 +1511,30 @@ func resourceTencentCloudCvmLaunchTemplateVersionDelete(d *schema.ResourceData, launchTemplateId := idSplit[0] launchTemplateVersionNumber := idSplit[1] - if err := service.DeleteCvmLaunchTemplateVersionById(ctx, launchTemplateId, launchTemplateVersionNumber); err != nil { + var ( + request = cvm.NewDeleteLaunchTemplateVersionsRequest() + response = cvm.NewDeleteLaunchTemplateVersionsResponse() + ) + + request.LaunchTemplateId = helper.String(launchTemplateId) + + request.LaunchTemplateVersions = []*int64{helper.StrToInt64Point(launchTemplateVersionNumber)} + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().DeleteLaunchTemplateVersionsWithContext(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()) + } + response = result + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s create cvm launch template version failed, reason:%+v", logId, err) return err } + _ = response return nil } diff --git a/tencentcloud/services/cvm/resource_tc_cvm_launch_template_version_extension.go b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_version_extension.go new file mode 100644 index 0000000000..b417cc5d9f --- /dev/null +++ b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_version_extension.go @@ -0,0 +1 @@ +package cvm diff --git a/tencentcloud/services/cvm/resource_tc_cvm_launch_template_version_test.go b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_version_test.go index d8eef76859..cb14c0bf8d 100644 --- a/tencentcloud/services/cvm/resource_tc_cvm_launch_template_version_test.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_version_test.go @@ -18,28 +18,95 @@ func TestAccTencentCloudCvmLaunchTemplateVersionResource_basic(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccCvmLaunchTemplateVersion, - Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_cvm_launch_template_version.launch_template_version", "id")), - }, - { - ResourceName: "tencentcloud_cvm_launch_template_version.launch_template_version", - ImportState: true, - ImportStateVerify: true, + Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_cvm_launch_template_version.test_launch_tpl_v2", "id")), }, }, }) } const testAccCvmLaunchTemplateVersion = ` -resource "tencentcloud_cvm_launch_template_version" "launch_template_version" { - placement { - zone = "ap-guangzhou-6" - project_id = 0 - - } - launch_template_id = "lt-9e1znnsa" - launch_template_version_description = "version description" - disable_api_termination = false - instance_type = "S5.MEDIUM4" - image_id = "img-9qrfy1xt" +data "tencentcloud_images" "default" { + image_type = ["PUBLIC_IMAGE"] + image_name_regex = "Final" +} +data "tencentcloud_vpc_instances" "vpc" { + is_default = true +} +data "tencentcloud_vpc_subnets" "subnets" { + availability_zone = "ap-guangzhou-7" + vpc_id = data.tencentcloud_vpc_instances.vpc.instance_list.0.vpc_id +} + +resource "tencentcloud_cvm_launch_template" "test_launch_tpl" { + launch_template_name = "test" + image_id = data.tencentcloud_images.default.images.0.image_id + placement { + zone = "ap-guangzhou-7" + } + instance_name = "v1" +} + +resource "tencentcloud_cvm_launch_template_version" "test_launch_tpl_v2" { + launch_template_id = tencentcloud_cvm_launch_template.test_launch_tpl.id + placement { + zone = "ap-guangzhou-7" + project_id = 0 + } + launch_template_version_description = "test" + instance_type = "S5.MEDIUM2" + image_id = data.tencentcloud_images.default.images.0.image_id +# system_disk { +# disk_type = "CLOUD_PREMIUM" +# disk_size = 20 +# } +# data_disks { +# disk_type = "CLOUD_PREMIUM" +# disk_size = 200 +# } + virtual_private_cloud { + vpc_id = data.tencentcloud_vpc_subnets.subnets.instance_list.0.vpc_id + subnet_id = data.tencentcloud_vpc_subnets.subnets.instance_list.0.subnet_id + } +# internet_accessible { +# internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR" +# internet_max_bandwidth_out = 20 +# } + instance_count = 2 + instance_name = "v2" + security_group_ids = ["sg-5275dorp","sg-cm7fbbf3"] + enhanced_service { + security_service { + enabled = true + } + monitor_service { + enabled = true + } + automation_service { + enabled = false + } + } + client_token = "123" + host_name = "test" + disaster_recover_group_ids = [] + tag_specification { + resource_type = "instance" + tags { + key = "key" + value = "value2" + } + tags { + key = "key2" + value = "value1" + } + } + user_data = "aGhoCg==" + cam_role_name = "" + hpc_cluster_id = "" + instance_charge_type = "PREPAID" + instance_charge_prepaid { + period = 3 + renew_flag = "DISABLE_NOTIFY_AND_MANUAL_RENEW" + } + disable_api_termination = true } ` diff --git a/tencentcloud/services/cvm/resource_tc_cvm_modify_instance_disk_type.go b/tencentcloud/services/cvm/resource_tc_cvm_modify_instance_disk_type.go index 293b3f8f2c..67a2a6b6fe 100644 --- a/tencentcloud/services/cvm/resource_tc_cvm_modify_instance_disk_type.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_modify_instance_disk_type.go @@ -1,14 +1,15 @@ +// Code generated by iacg; DO NOT EDIT. package cvm import ( + "context" "log" - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -22,16 +23,16 @@ func ResourceTencentCloudCvmModifyInstanceDiskType() *schema.Resource { }, Schema: map[string]*schema.Schema{ "instance_id": { + Type: schema.TypeString, Required: true, ForceNew: true, - Type: schema.TypeString, Description: "Instance ID. To obtain the instance IDs, you can call DescribeInstances and look for InstanceId in the response.", }, "data_disks": { + Type: schema.TypeList, Optional: true, ForceNew: true, - Type: schema.TypeList, Description: "For instance data disk configuration information, you only need to specify the media type of the target cloud disk to be converted, and specify the value of DiskType. Currently, only one data disk conversion is supported. The CdcId parameter is only supported for instances of the CDHPAID type.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ @@ -41,20 +42,9 @@ func ResourceTencentCloudCvmModifyInstanceDiskType() *schema.Resource { Description: "Data disk size (in GB). The minimum adjustment increment is 10 GB. The value range varies by data disk type. The default value is 0, indicating that no data disk is purchased. For more information, see the product documentation.", }, "disk_type": { - Type: schema.TypeString, - Optional: true, - Description: "Data disk type. Valid values:\n" + - "- LOCAL_BASIC: local hard disk;\n" + - "- LOCAL_SSD: local SSD hard disk;\n" + - "- LOCAL_NVME: local NVME hard disk, which is strongly related to InstanceType and cannot be specified;\n" + - "- LOCAL_PRO: local HDD hard disk, which is strongly related to InstanceType and cannot be specified;\n" + - "- CLOUD_BASIC: ordinary cloud disk;\n" + - "- CLOUD_PREMIUM: high-performance cloud disk;\n" + - "- CLOUD_SSD:SSD cloud disk;\n" + - "- CLOUD_HSSD: enhanced SSD cloud disk;\n" + - "- CLOUD_TSSD: extremely fast SSD cloud disk;\n" + - "- CLOUD_BSSD: general-purpose SSD cloud disk;\n" + - "Default value: LOCAL_BASIC.", + Type: schema.TypeString, + Optional: true, + Description: "Data disk type. Valid values:\n- LOCAL_BASIC: local hard disk;\n- LOCAL_SSD: local SSD hard disk;\n- LOCAL_NVME: local NVME hard disk, which is strongly related to InstanceType and cannot be specified;\n- LOCAL_PRO: local HDD hard disk, which is strongly related to InstanceType and cannot be specified;\n- CLOUD_BASIC: ordinary cloud disk;\n- CLOUD_PREMIUM: high-performance cloud disk;\n- CLOUD_SSD:SSD cloud disk;\n- CLOUD_HSSD: enhanced SSD cloud disk;\n- CLOUD_TSSD: extremely fast SSD cloud disk;\n- CLOUD_BSSD: general-purpose SSD cloud disk;\nDefault value: LOCAL_BASIC.\n", }, "disk_id": { Type: schema.TypeString, @@ -62,12 +52,9 @@ func ResourceTencentCloudCvmModifyInstanceDiskType() *schema.Resource { Description: "Data disk ID. Note that it's not available for LOCAL_BASIC and LOCAL_SSD disks.", }, "delete_with_instance": { - Type: schema.TypeBool, - Optional: true, - Description: "Whether to terminate the data disk when its CVM is terminated. Valid values:\n" + - "- TRUE: terminate the data disk when its CVM is terminated. This value only supports pay-as-you-go cloud disks billed on an hourly basis.\n" + - "- FALSE: retain the data disk when its CVM is terminated.\n" + - "Default value: TRUE.", + Type: schema.TypeBool, + Optional: true, + Description: "Whether to terminate the data disk when its CVM is terminated. Valid values:\n- TRUE: terminate the data disk when its CVM is terminated. This value only supports pay-as-you-go cloud disks billed on an hourly basis.\n- FALSE: retain the data disk when its CVM is terminated.\nDefault value: TRUE.\n", }, "snapshot_id": { Type: schema.TypeString, @@ -75,12 +62,9 @@ func ResourceTencentCloudCvmModifyInstanceDiskType() *schema.Resource { Description: "Data disk snapshot ID. The size of the selected data disk snapshot must be smaller than that of the data disk.", }, "encrypt": { - Type: schema.TypeBool, - Optional: true, - Description: "Specifies whether the data disk is encrypted. Valid values:\n" + - "- TRUE: encrypted\n" + - "- FALSE: not encrypted\n" + - "Default value: FALSE.", + Type: schema.TypeBool, + Optional: true, + Description: "Specifies whether the data disk is encrypted. Valid values:\n- TRUE: encrypted\n- FALSE: not encrypted\nDefault value: FALSE.\n", }, "kms_key_id": { Type: schema.TypeString, @@ -102,24 +86,17 @@ func ResourceTencentCloudCvmModifyInstanceDiskType() *schema.Resource { }, "system_disk": { + Type: schema.TypeList, Optional: true, ForceNew: true, - Type: schema.TypeList, MaxItems: 1, Description: "For instance system disk configuration information, you only need to specify the nature type of the target cloud disk to be converted, and specify the value of DiskType. Only CDHPAID type instances are supported to specify Cd.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "disk_type": { - Type: schema.TypeString, - Optional: true, - Description: "System disk type. Valid values:" + - "- LOCAL_BASIC: local disk\n" + - "- LOCAL_SSD: local SSD disk\n" + - "- CLOUD_BASIC: ordinary cloud disk\n" + - "- CLOUD_SSD: SSD cloud disk\n" + - "- CLOUD_PREMIUM: Premium cloud storage\n" + - "- CLOUD_BSSD: Balanced SSD\n" + - "The disk currently in stock will be used by default.", + Type: schema.TypeString, + Optional: true, + Description: "System disk type. Valid values:\n- LOCAL_BASIC: local disk\n- LOCAL_SSD: local SSD disk\n- CLOUD_BASIC: ordinary cloud disk\n- CLOUD_SSD: SSD cloud disk\n- CLOUD_PREMIUM: Premium cloud storage\n- CLOUD_BSSD: Balanced SSD\nThe disk currently in stock will be used by default.\n", }, "disk_id": { Type: schema.TypeString, @@ -149,81 +126,93 @@ func resourceTencentCloudCvmModifyInstanceDiskTypeCreate(d *schema.ResourceData, logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + var ( - request = cvm.NewModifyInstanceDiskTypeRequest() instanceId string ) + var ( + request = cvm.NewModifyInstanceDiskTypeRequest() + response = cvm.NewModifyInstanceDiskTypeResponse() + ) + if v, ok := d.GetOk("instance_id"); ok { - instanceId := v.(string) - request.InstanceId = helper.String(instanceId) + instanceId = v.(string) + } + + if v, ok := d.GetOk("instance_id"); ok { + request.InstanceId = helper.String(v.(string)) } if v, ok := d.GetOk("data_disks"); ok { for _, item := range v.([]interface{}) { - dMap := item.(map[string]interface{}) + dataDisksMap := item.(map[string]interface{}) dataDisk := cvm.DataDisk{} - if v, ok := dMap["disk_size"]; ok { + if v, ok := dataDisksMap["disk_size"]; ok { dataDisk.DiskSize = helper.IntInt64(v.(int)) } - if v, ok := dMap["disk_type"]; ok { + if v, ok := dataDisksMap["disk_type"]; ok { dataDisk.DiskType = helper.String(v.(string)) } - if v, ok := dMap["disk_id"]; ok { + if v, ok := dataDisksMap["disk_id"]; ok { dataDisk.DiskId = helper.String(v.(string)) } - if v, ok := dMap["delete_with_instance"]; ok { + if v, ok := dataDisksMap["delete_with_instance"]; ok { dataDisk.DeleteWithInstance = helper.Bool(v.(bool)) } - if v, ok := dMap["snapshot_id"]; ok { + if v, ok := dataDisksMap["snapshot_id"]; ok { dataDisk.SnapshotId = helper.String(v.(string)) } - if v, ok := dMap["encrypt"]; ok { + if v, ok := dataDisksMap["encrypt"]; ok { dataDisk.Encrypt = helper.Bool(v.(bool)) } - if v, ok := dMap["kms_key_id"]; ok { + if v, ok := dataDisksMap["kms_key_id"]; ok { dataDisk.KmsKeyId = helper.String(v.(string)) } - if v, ok := dMap["throughput_performance"]; ok { + if v, ok := dataDisksMap["throughput_performance"]; ok { dataDisk.ThroughputPerformance = helper.IntInt64(v.(int)) } - if v, ok := dMap["cdc_id"]; ok { + if v, ok := dataDisksMap["cdc_id"]; ok { dataDisk.CdcId = helper.String(v.(string)) } request.DataDisks = append(request.DataDisks, &dataDisk) } } - if dMap, ok := helper.InterfacesHeadMap(d, "system_disk"); ok { + if systemDiskMap, ok := helper.InterfacesHeadMap(d, "system_disk"); ok { systemDisk := cvm.SystemDisk{} - if v, ok := dMap["disk_type"]; ok { + if v, ok := systemDiskMap["disk_type"]; ok { systemDisk.DiskType = helper.String(v.(string)) } - if v, ok := dMap["disk_id"]; ok { + if v, ok := systemDiskMap["disk_id"]; ok { systemDisk.DiskId = helper.String(v.(string)) } - if v, ok := dMap["disk_size"]; ok { + if v, ok := systemDiskMap["disk_size"]; ok { systemDisk.DiskSize = helper.IntInt64(v.(int)) } - if v, ok := dMap["cdc_id"]; ok { + if v, ok := systemDiskMap["cdc_id"]; ok { systemDisk.CdcId = helper.String(v.(string)) } request.SystemDisk = &systemDisk } err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().ModifyInstanceDiskType(request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().ModifyInstanceDiskTypeWithContext(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()) } + response = result return nil }) if err != nil { - log.Printf("[CRITAL]%s operate cvm modifyInstanceDiskType failed, reason:%+v", logId, err) + log.Printf("[CRITAL]%s create cvm modify instance disk type failed, reason:%+v", logId, err) return err } + _ = response + d.SetId(instanceId) return resourceTencentCloudCvmModifyInstanceDiskTypeRead(d, meta) diff --git a/tencentcloud/services/cvm/resource_tc_cvm_modify_instance_disk_type_extension.go b/tencentcloud/services/cvm/resource_tc_cvm_modify_instance_disk_type_extension.go new file mode 100644 index 0000000000..b417cc5d9f --- /dev/null +++ b/tencentcloud/services/cvm/resource_tc_cvm_modify_instance_disk_type_extension.go @@ -0,0 +1 @@ +package cvm diff --git a/tencentcloud/services/cvm/resource_tc_cvm_modify_instance_disk_type_test.go b/tencentcloud/services/cvm/resource_tc_cvm_modify_instance_disk_type_test.go index 5b9a7dd022..e3e2919672 100644 --- a/tencentcloud/services/cvm/resource_tc_cvm_modify_instance_disk_type_test.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_modify_instance_disk_type_test.go @@ -18,39 +18,55 @@ func TestAccTencentCloudNeedFixCvmModifyInstanceDiskTypeResource_basic(t *testin Steps: []resource.TestStep{ { Config: testAccCvmModifyInstanceDiskType, - Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_cvm_modify_instance_disk_type.modify_instance_disk_type", "id")), - }, - { - ResourceName: "tencentcloud_cvm_modify_instance_disk_type.modify_instance_disk_type", - ImportState: true, - ImportStateVerify: true, + Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_cvm_modify_instance_disk_type.modify_disk_type", "id")), }, }, }) } const testAccCvmModifyInstanceDiskType = ` +data "tencentcloud_images" "default" { + image_type = ["PUBLIC_IMAGE"] + image_name_regex = "Final" +} +data "tencentcloud_instance_types" "default" { + memory_size = 2 + exclude_sold_out = true + filter { + name = "instance-family" + values = ["SA2","SA3","SA4","SA5","S2","S3"] + } + filter { + name = "zone" + values = ["ap-guangzhou-7"] + } + cpu_core_count = 2 +} -resource "tencentcloud_cvm_modify_instance_disk_type" "modify_instance_disk_type" { - instance_id = "ins-r8hr2upy" +resource "tencentcloud_instance" "test_cvm" { + image_id = data.tencentcloud_images.default.images.0.image_id + availability_zone = "ap-guangzhou-7" + instance_type = "SA2.MEDIUM2" + orderly_security_groups = ["sg-5275dorp"] + instance_charge_type = "POSTPAID_BY_HOUR" data_disks { - disk_size = 50 - disk_type = "CLOUD_BASIC" - disk_id = "disk-hrsd0u81" - delete_with_instance = true - snapshot_id = "snap-r9unnd89" - encrypt = false - kms_key_id = "kms-abcd1234" - throughput_performance = 2 - cdc_id = "cdc-b9pbd3px" - + data_disk_size = 50 + data_disk_type = "CLOUD_PREMIUM" } - system_disk { - disk_type = "CLOUD_PREMIUM" - disk_id = "disk-1drr53sd" - disk_size = 50 - cdc_id = "cdc-b9pbd3px" + running_flag = false +} +resource "tencentcloud_cvm_modify_instance_disk_type" "modify_disk_type" { + instance_id = tencentcloud_instance.test_cvm.id + system_disk { + disk_type = "CLOUD_SSD" + disk_size = 50 + } + data_disks { + disk_type = "CLOUD_SSD" + disk_size = 50 + delete_with_instance = true + throughput_performance = 100 } } diff --git a/tencentcloud/services/cvm/resource_tc_cvm_program_fpga_image.go b/tencentcloud/services/cvm/resource_tc_cvm_program_fpga_image.go index 006cee2ac6..3b99e9401b 100644 --- a/tencentcloud/services/cvm/resource_tc_cvm_program_fpga_image.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_program_fpga_image.go @@ -1,14 +1,15 @@ +// Code generated by iacg; DO NOT EDIT. package cvm import ( + "context" "log" - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -22,33 +23,33 @@ func ResourceTencentCloudCvmProgramFpgaImage() *schema.Resource { }, Schema: map[string]*schema.Schema{ "instance_id": { + Type: schema.TypeString, Required: true, ForceNew: true, - Type: schema.TypeString, Description: "The ID information of the instance.", }, "fpga_url": { + Type: schema.TypeString, Required: true, ForceNew: true, - Type: schema.TypeString, Description: "COS URL address of the FPGA image file.", }, "dbd_fs": { - Optional: true, - ForceNew: true, - Type: schema.TypeSet, + Type: schema.TypeSet, + Optional: true, + ForceNew: true, + Description: "The DBDF number of the FPGA card on the instance, if left blank, the FPGA image will be burned to all FPGA cards owned by the instance by default.", Elem: &schema.Schema{ Type: schema.TypeString, }, - Description: "The DBDF number of the FPGA card on the instance, if left blank, the FPGA image will be burned to all FPGA cards owned by the instance by default.", }, "dry_run": { + Type: schema.TypeBool, Optional: true, ForceNew: true, - Type: schema.TypeBool, Description: "Trial run, will not perform the actual burning action, the default is False.", }, }, @@ -61,11 +62,23 @@ func resourceTencentCloudCvmProgramFpgaImageCreate(d *schema.ResourceData, meta logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + + var ( + instanceId string + ) var ( - request = cvm.NewProgramFpgaImageRequest() + request = cvm.NewProgramFpgaImageRequest() + response = cvm.NewProgramFpgaImageResponse() ) - instanceId := d.Get("instance_id").(string) - request.InstanceId = helper.String(instanceId) + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + if v, ok := d.GetOk("instance_id"); ok { + request.InstanceId = helper.String(v.(string)) + } if v, ok := d.GetOk("fpga_url"); ok { request.FPGAUrl = helper.String(v.(string)) @@ -75,28 +88,31 @@ func resourceTencentCloudCvmProgramFpgaImageCreate(d *schema.ResourceData, meta dBDFsSet := v.(*schema.Set).List() for i := range dBDFsSet { dBDFs := dBDFsSet[i].(string) - request.DBDFs = append(request.DBDFs, &dBDFs) + request.DBDFs = append(request.DBDFs, helper.String(dBDFs)) } } - if v, _ := d.GetOk("dry_run"); v != nil { + if v, ok := d.GetOkExists("dry_run"); ok { request.DryRun = helper.Bool(v.(bool)) } err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().ProgramFpgaImage(request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().ProgramFpgaImageWithContext(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()) } + response = result return nil }) if err != nil { - log.Printf("[CRITAL]%s operate cvm programFpgaImage failed, reason:%+v", logId, err) + log.Printf("[CRITAL]%s create cvm program fpga image failed, reason:%+v", logId, err) return err } + _ = response + d.SetId(instanceId) return resourceTencentCloudCvmProgramFpgaImageRead(d, meta) diff --git a/tencentcloud/services/cvm/resource_tc_cvm_program_fpga_image_extension.go b/tencentcloud/services/cvm/resource_tc_cvm_program_fpga_image_extension.go new file mode 100644 index 0000000000..b417cc5d9f --- /dev/null +++ b/tencentcloud/services/cvm/resource_tc_cvm_program_fpga_image_extension.go @@ -0,0 +1 @@ +package cvm diff --git a/tencentcloud/services/cvm/resource_tc_cvm_reboot_instance.go b/tencentcloud/services/cvm/resource_tc_cvm_reboot_instance.go index ff6da860f8..ac03c6c12c 100644 --- a/tencentcloud/services/cvm/resource_tc_cvm_reboot_instance.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_reboot_instance.go @@ -1,14 +1,15 @@ +// Code generated by iacg; DO NOT EDIT. package cvm import ( + "context" "log" - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -17,28 +18,27 @@ func ResourceTencentCloudCvmRebootInstance() *schema.Resource { Create: resourceTencentCloudCvmRebootInstanceCreate, Read: resourceTencentCloudCvmRebootInstanceRead, Delete: resourceTencentCloudCvmRebootInstanceDelete, - Schema: map[string]*schema.Schema{ "instance_id": { + Type: schema.TypeString, Required: true, ForceNew: true, - Type: schema.TypeString, Description: "Instance ID.", }, "force_reboot": { + Type: schema.TypeBool, Optional: true, ForceNew: true, - Type: schema.TypeBool, ConflictsWith: []string{"stop_type"}, - Deprecated: "It has been deprecated from version 1.81.21. Please use `stop_type` instead.", Description: "This parameter has been disused. We recommend using StopType instead. Note that ForceReboot and StopType parameters cannot be specified at the same time. Whether to forcibly restart an instance after a normal restart fails. Valid values are `TRUE` and `FALSE`. Default value: FALSE.", + Deprecated: "It has been deprecated from version 1.81.21. Please use `stop_type` instead.", }, "stop_type": { + Type: schema.TypeString, Optional: true, ForceNew: true, - Type: schema.TypeString, ConflictsWith: []string{"force_reboot"}, Description: "Shutdown type. Valid values: `SOFT`: soft shutdown; `HARD`: hard shutdown; `SOFT_FIRST`: perform a soft shutdown first, and perform a hard shutdown if the soft shutdown fails. Default value: SOFT.", }, @@ -52,14 +52,26 @@ func resourceTencentCloudCvmRebootInstanceCreate(d *schema.ResourceData, meta in logId := tccommon.GetLogId(tccommon.ContextNil) - request := cvm.NewRebootInstancesRequest() - instanceId := d.Get("instance_id").(string) - request.InstanceIds = []*string{&instanceId} + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - if v, _ := d.GetOk("force_reboot"); v != nil { - if _, ok := d.GetOk("stop_type"); !ok { - request.ForceReboot = helper.Bool(v.(bool)) - } + var ( + instanceId string + ) + var ( + request = cvm.NewRebootInstancesRequest() + response = cvm.NewRebootInstancesResponse() + ) + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + if v, ok := d.GetOk("instance_id"); ok { + request.InstanceIds = []*string{helper.String(v.(string))} + } + + if v, ok := d.GetOkExists("force_reboot"); ok { + request.ForceReboot = helper.Bool(v.(bool)) } if v, ok := d.GetOk("stop_type"); ok { @@ -67,19 +79,22 @@ func resourceTencentCloudCvmRebootInstanceCreate(d *schema.ResourceData, meta in } err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().RebootInstances(request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().RebootInstancesWithContext(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()) } + response = result return nil }) if err != nil { - log.Printf("[CRITAL]%s operate cvm rebootInstance failed, reason:%+v", logId, err) + log.Printf("[CRITAL]%s create cvm reboot instance failed, reason:%+v", logId, err) return err } + _ = response + d.SetId(instanceId) return resourceTencentCloudCvmRebootInstanceRead(d, meta) diff --git a/tencentcloud/services/cvm/resource_tc_cvm_reboot_instance_extension.go b/tencentcloud/services/cvm/resource_tc_cvm_reboot_instance_extension.go new file mode 100644 index 0000000000..b417cc5d9f --- /dev/null +++ b/tencentcloud/services/cvm/resource_tc_cvm_reboot_instance_extension.go @@ -0,0 +1 @@ +package cvm diff --git a/tencentcloud/services/cvm/resource_tc_cvm_reboot_instance_test.go b/tencentcloud/services/cvm/resource_tc_cvm_reboot_instance_test.go index baa300b025..70ec67f66d 100644 --- a/tencentcloud/services/cvm/resource_tc_cvm_reboot_instance_test.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_reboot_instance_test.go @@ -18,16 +18,42 @@ func TestAccTencentCloudCvmRebootInstanceResource_basic(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccCvmRebootInstance, - Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_cvm_reboot_instance.reboot_instance", "id")), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_cvm_reboot_instance.reboot", "id"), + ), }, }, }) } -const testAccCvmRebootInstance = tcacctest.DefaultRebootCvmVariable + ` +const testAccCvmRebootInstance = ` +data "tencentcloud_images" "default" { + image_type = ["PUBLIC_IMAGE"] + image_name_regex = "Final" +} +data "tencentcloud_instance_types" "default" { + memory_size = 2 + exclude_sold_out = true + filter { + name = "instance-family" + values = ["SA2","SA3","SA4","SA5","S2","S3"] + } + filter { + name = "zone" + values = ["ap-guangzhou-7"] + } + cpu_core_count = 2 +} +resource "tencentcloud_instance" "test_cvm" { + image_id = data.tencentcloud_images.default.images.0.image_id + availability_zone = "ap-guangzhou-7" + instance_type = "SA2.MEDIUM2" + orderly_security_groups = ["sg-5275dorp"] + instance_charge_type = "POSTPAID_BY_HOUR" +} -resource "tencentcloud_cvm_reboot_instance" "reboot_instance" { - instance_id = var.cvm_id - stop_type = "SOFT_FIRST" +resource tencentcloud_cvm_reboot_instance reboot { + instance_id = tencentcloud_instance.test_cvm.id + stop_type = "SOFT" } ` diff --git a/tencentcloud/services/cvm/resource_tc_cvm_renew_host.go b/tencentcloud/services/cvm/resource_tc_cvm_renew_host.go index 2ab672b4c9..0bcfc80560 100644 --- a/tencentcloud/services/cvm/resource_tc_cvm_renew_host.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_renew_host.go @@ -1,14 +1,15 @@ +// Code generated by iacg; DO NOT EDIT. package cvm import ( + "context" "log" - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -19,16 +20,16 @@ func ResourceTencentCloudCvmRenewHost() *schema.Resource { Delete: resourceTencentCloudCvmRenewHostDelete, Schema: map[string]*schema.Schema{ "host_id": { + Type: schema.TypeString, Required: true, ForceNew: true, - Type: schema.TypeString, Description: "CDH instance ID.", }, "host_charge_prepaid": { + Type: schema.TypeList, Required: true, ForceNew: true, - Type: schema.TypeList, MaxItems: 1, Description: "Prepaid mode, that is, yearly and monthly subscription related parameter settings. Through this parameter, you can specify attributes such as the purchase duration of the Subscription instance and whether to set automatic renewal. If the payment mode of the specified instance is prepaid, this parameter must be passed.", Elem: &schema.Resource{ @@ -56,37 +57,56 @@ func resourceTencentCloudCvmRenewHostCreate(d *schema.ResourceData, meta interfa logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + var ( - request = cvm.NewRenewHostsRequest() + hostId string ) - hostId := d.Get("host_id").(string) - request.HostIds = []*string{&hostId} + var ( + request = cvm.NewRenewHostsRequest() + response = cvm.NewRenewHostsResponse() + ) + + if v, ok := d.GetOk("host_id"); ok { + hostId = v.(string) + } - if dMap, ok := helper.InterfacesHeadMap(d, "host_charge_prepaid"); ok { + if v, ok := d.GetOk("host_id"); ok { + hostIdsSet := v.(*schema.Set).List() + for i := range hostIdsSet { + hostIds := hostIdsSet[i].(string) + request.HostIds = append(request.HostIds, helper.String(hostIds)) + } + } + + if hostChargePrepaidMap, ok := helper.InterfacesHeadMap(d, "host_charge_prepaid"); ok { chargePrepaid := cvm.ChargePrepaid{} - if v, ok := dMap["period"]; ok { + if v, ok := hostChargePrepaidMap["period"]; ok { chargePrepaid.Period = helper.IntUint64(v.(int)) } - if v, ok := dMap["renew_flag"]; ok { + if v, ok := hostChargePrepaidMap["renew_flag"]; ok { chargePrepaid.RenewFlag = helper.String(v.(string)) } request.HostChargePrepaid = &chargePrepaid } err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().RenewHosts(request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().RenewHostsWithContext(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()) } + response = result return nil }) if err != nil { - log.Printf("[CRITAL]%s operate cvm renewHost failed, reason:%+v", logId, err) + log.Printf("[CRITAL]%s create cvm renew host failed, reason:%+v", logId, err) return err } + _ = response + d.SetId(hostId) return resourceTencentCloudCvmRenewHostRead(d, meta) diff --git a/tencentcloud/services/cvm/resource_tc_cvm_renew_host_extension.go b/tencentcloud/services/cvm/resource_tc_cvm_renew_host_extension.go new file mode 100644 index 0000000000..b417cc5d9f --- /dev/null +++ b/tencentcloud/services/cvm/resource_tc_cvm_renew_host_extension.go @@ -0,0 +1 @@ +package cvm diff --git a/tencentcloud/services/cvm/tencentcloud_sweeper_test.go b/tencentcloud/services/cvm/resource_test.go similarity index 100% rename from tencentcloud/services/cvm/tencentcloud_sweeper_test.go rename to tencentcloud/services/cvm/resource_test.go diff --git a/tencentcloud/services/cvm/service_tencentcloud_cvm.go b/tencentcloud/services/cvm/service_tencentcloud_cvm.go index 071d5d8f1f..ad23b858ab 100644 --- a/tencentcloud/services/cvm/service_tencentcloud_cvm.go +++ b/tencentcloud/services/cvm/service_tencentcloud_cvm.go @@ -9,6 +9,8 @@ import ( "sync" "time" + vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -1434,11 +1436,11 @@ func (me *CvmService) DeleteCvmLaunchTemplateById(ctx context.Context, launchTem return } -func (me *CvmService) DescribeCvmLaunchTemplateVersionById(ctx context.Context, launchTemplateId, launchTemplateVersionNumber string) (launchTemplateVersion *cvm.LaunchTemplateVersionInfo, errRet error) { +func (me *CvmService) DescribeCvmLaunchTemplateVersionById(ctx context.Context, launchTemplateId string, launchTemplateVersionNumber string) (ret *cvm.LaunchTemplateVersionInfo, errRet error) { logId := tccommon.GetLogId(ctx) request := cvm.NewDescribeLaunchTemplateVersionsRequest() - request.LaunchTemplateId = &launchTemplateId + request.LaunchTemplateId = helper.String(launchTemplateId) request.LaunchTemplateVersions = []*uint64{helper.StrToUint64Point(launchTemplateVersionNumber)} defer func() { @@ -1460,7 +1462,7 @@ func (me *CvmService) DescribeCvmLaunchTemplateVersionById(ctx context.Context, return } - launchTemplateVersion = response.Response.LaunchTemplateVersionSet[0] + ret = response.Response.LaunchTemplateVersionSet[0] return } @@ -1776,3 +1778,187 @@ func (me *CvmService) ModifyImageSharePermission(ctx context.Context, imageId, p } return } + +func (me *CvmService) DescribeCvmInstanceVncUrlByFilter(ctx context.Context, param map[string]interface{}) (ret *cvm.DescribeInstanceVncUrlResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cvm.NewDescribeInstanceVncUrlRequest() + ) + + 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 == "InstanceId" { + request.InstanceId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCvmClient().DescribeInstanceVncUrl(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 || response.Response == nil { + return + } + + ret = response.Response + return +} + +func (me *CvmService) DescribeEipAddressQuotaByFilter(ctx context.Context, param map[string]interface{}) (ret []*vpc.Quota, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeAddressQuotaRequest() + ) + + 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.UseVpcClient().DescribeAddressQuota(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 len(response.Response.QuotaSet) < 1 { + return + } + + ret = response.Response.QuotaSet + return +} + +func (me *CvmService) DescribeEipNetworkAccountTypeByFilter(ctx context.Context, param map[string]interface{}) (ret *vpc.DescribeNetworkAccountTypeResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeNetworkAccountTypeRequest() + ) + + 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.UseVpcClient().DescribeNetworkAccountType(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 || response.Response == nil { + return + } + + ret = response.Response + return +} + +func (me *CvmService) DescribeCvmInstancesModificationByFilter(ctx context.Context, param map[string]interface{}) (ret []*cvm.InstanceTypeConfigStatus, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cvm.NewDescribeInstancesModificationRequest() + ) + + 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 == "InstanceIds" { + request.InstanceIds = v.([]*string) + } + if k == "Filters" { + request.Filters = v.([]*cvm.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCvmClient().DescribeInstancesModification(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 len(response.Response.InstanceTypeConfigStatusSet) < 1 { + return + } + + ret = response.Response.InstanceTypeConfigStatusSet + return +} + +func (me *CvmService) DescribeCvmLaunchTemplateDefaultVersionById(ctx context.Context, launchTemplateId string) (ret *cvm.LaunchTemplateVersionInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewDescribeLaunchTemplateVersionsRequest() + request.LaunchTemplateId = helper.String(launchTemplateId) + + 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()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + var instances []*cvm.LaunchTemplateVersionInfo + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseCvmClient().DescribeLaunchTemplateVersions(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.LaunchTemplateVersionSet) < 1 { + break + } + instances = append(instances, response.Response.LaunchTemplateVersionSet...) + if len(response.Response.LaunchTemplateVersionSet) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + + for _, info := range instances { + if info.IsDefaultVersion != nil && *info.IsDefaultVersion == true { + ret = info + break + } + } + return +}