From 2a581d96eefd4e6be0768d74499f48e44709fbe6 Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Wed, 11 Sep 2024 17:18:19 +0800 Subject: [PATCH 01/18] refactor(tke): regen tke provider --- tencentcloud/provider.go | 2 +- ...esource_tc_kubernetes_native_node_pools.go | 1490 +++++++++++++++++ ...esource_tc_kubernetes_native_node_pools.md | 30 + ..._kubernetes_native_node_pools_extension.go | 1 + ...ce_tc_kubernetes_native_node_pools_test.go | 47 + .../services/tke/service_tencentcloud_tke.go | 53 + 6 files changed, 1622 insertions(+), 1 deletion(-) create mode 100644 tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools.go create mode 100644 tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools.md create mode 100644 tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools_extension.go create mode 100644 tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools_test.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 352e498049..5bc3e1d144 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -2126,7 +2126,7 @@ func Provider() *schema.Provider { "tencentcloud_cdwdoris_workload_group": cdwdoris.ResourceTencentCloudCdwdorisWorkloadGroup(), //"tencentcloud_cdwdoris_user": cdwdoris.ResourceTencentCloudCdwdorisUser(), "tencentcloud_batch_apply_account_baselines": controlcenter.ResourceTencentCloudBatchApplyAccountBaselines(), - }, + "tencentcloud_kubernetes_native_node_pools": tke.ResourceTencentCloudKubernetesNativeNodePools()}, ConfigureFunc: providerConfigure, } diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools.go new file mode 100644 index 0000000000..c656aab0a1 --- /dev/null +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools.go @@ -0,0 +1,1490 @@ +// Code generated by iacg; DO NOT EDIT. +package tke + +import ( + "context" + "fmt" + "log" + "strings" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + tkev20220501 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20220501" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudKubernetesNativeNodePools() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudKubernetesNativeNodePoolsCreate, + Read: resourceTencentCloudKubernetesNativeNodePoolsRead, + Update: resourceTencentCloudKubernetesNativeNodePoolsUpdate, + Delete: resourceTencentCloudKubernetesNativeNodePoolsDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "cluster_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "ID of the cluster.", + }, + + "name": { + Type: schema.TypeString, + Required: true, + Description: "Node pool name.", + }, + + "type": { + Type: schema.TypeString, + Required: true, + Description: "Node pool type. Optional value is `Native`.", + }, + + "labels": { + Type: schema.TypeList, + Optional: true, + Description: "Node Labels.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Required: true, + Description: "Name in the map table.", + }, + "value": { + Type: schema.TypeString, + Required: true, + Description: "Value in map table.", + }, + }, + }, + }, + + "taints": { + Type: schema.TypeList, + Optional: true, + Description: "Node taint.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "key": { + Type: schema.TypeString, + Optional: true, + Description: "Key of the taint.", + }, + "value": { + Type: schema.TypeString, + Optional: true, + Description: "Value of the taint.", + }, + "effect": { + Type: schema.TypeString, + Optional: true, + Description: "Effect of the taint.", + }, + }, + }, + }, + + "tags": { + Type: schema.TypeList, + Optional: true, + Description: "Node tags.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "resource_type": { + Type: schema.TypeString, + Optional: true, + Description: "The resource type bound to the label.", + }, + "tags": { + Type: schema.TypeList, + Optional: true, + Description: "Tag pair list.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "key": { + Type: schema.TypeString, + Optional: true, + Description: "Tag Key.", + }, + "value": { + Type: schema.TypeString, + Optional: true, + Description: "Tag Value.", + }, + }, + }, + }, + }, + }, + }, + + "deletion_protection": { + Type: schema.TypeBool, + Optional: true, + Computed: true, + Description: "Whether to enable deletion protection.", + }, + + "unschedulable": { + Type: schema.TypeBool, + Optional: true, + Computed: true, + Description: "Whether the node is not schedulable by default. The native node is not aware of it and passes false by default.", + }, + + "native": { + Type: schema.TypeList, + Required: true, + MaxItems: 1, + Description: "Native node pool creation parameters.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "scaling": { + Type: schema.TypeList, + Optional: true, + Computed: true, + MaxItems: 1, + Description: "Node pool scaling configuration.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "min_replicas": { + Type: schema.TypeInt, + Optional: true, + Computed: true, + Description: "Minimum number of replicas in node pool.", + }, + "max_replicas": { + Type: schema.TypeInt, + Optional: true, + Computed: true, + Description: "Maximum number of replicas in node pool.", + }, + "create_policy": { + Type: schema.TypeString, + Optional: true, + Computed: true, + Description: "Node pool expansion strategy. `ZoneEquality`: multiple availability zones are broken up; `ZonePriority`: the preferred availability zone takes precedence.", + }, + }, + }, + }, + "subnet_ids": { + Type: schema.TypeList, + Required: true, + Description: "Subnet list.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "instance_charge_type": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Node billing type. `PREPAID` is a yearly and monthly subscription, `POSTPAID_BY_HOUR` is a pay-as-you-go plan. The default is `POSTPAID_BY_HOUR`.", + }, + "system_disk": { + Type: schema.TypeList, + Required: true, + ForceNew: true, + MaxItems: 1, + Description: "System disk configuration.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "disk_type": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Cloud disk type. Valid values: `CLOUD_PREMIUM`: Premium Cloud Storage, `CLOUD_SSD`: cloud SSD disk, `CLOUD_BSSD`: Basic SSD, `CLOUD_HSSD`: Enhanced SSD.", + }, + "disk_size": { + Type: schema.TypeInt, + Required: true, + ForceNew: true, + Description: "Cloud disk size (G).", + }, + }, + }, + }, + "instance_types": { + Type: schema.TypeList, + Required: true, + Description: "Model list.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "security_group_ids": { + Type: schema.TypeList, + Required: true, + Description: "Security group list.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "auto_repair": { + Type: schema.TypeBool, + Optional: true, + Description: "Whether to enable self-healing ability.", + }, + "instance_charge_prepaid": { + Type: schema.TypeList, + Optional: true, + Computed: true, + ForceNew: true, + MaxItems: 1, + Description: "Billing configuration for yearly and monthly models.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "period": { + Type: schema.TypeInt, + Required: true, + ForceNew: true, + Description: "Postpaid billing cycle, unit (month): 1, 2, 3, 4, 5,, 6, 7, 8, 9, 10, 11, 12, 24, 36, 48, 60.", + }, + "renew_flag": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Description: "Prepaid renewal method:\n - `NOTIFY_AND_AUTO_RENEW`: Notify users of expiration and automatically renew (default).\n - `NOTIFY_AND_MANUAL_RENEW`: Notify users of expiration, but do not automatically renew.\n - `DISABLE_NOTIFY_AND_MANUAL_RENEW`: Do not notify users of expiration and do not automatically renew.", + }, + }, + }, + }, + "management": { + Type: schema.TypeList, + Optional: true, + Computed: true, + MaxItems: 1, + Description: "Node pool management parameter settings.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "nameservers": { + Type: schema.TypeList, + Optional: true, + Computed: true, + Description: "Dns configuration.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "hosts": { + Type: schema.TypeList, + Optional: true, + Description: "Hosts configuration.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "kernel_args": { + Type: schema.TypeList, + Optional: true, + Description: "Kernel parameter configuration.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + "health_check_policy_name": { + Type: schema.TypeString, + Optional: true, + Description: "Fault self-healing rule name.", + }, + "host_name_pattern": { + Type: schema.TypeString, + Optional: true, + Description: "Native node pool hostName pattern string.", + }, + "kubelet_args": { + Type: schema.TypeList, + Optional: true, + Description: "Kubelet custom parameters.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "lifecycle": { + Type: schema.TypeList, + Optional: true, + Computed: true, + MaxItems: 1, + Description: "Predefined scripts.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "pre_init": { + Type: schema.TypeString, + Optional: true, + Description: "Custom script before node initialization.", + }, + "post_init": { + Type: schema.TypeString, + Optional: true, + Description: "Custom script after node initialization.", + }, + }, + }, + }, + "runtime_root_dir": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + Description: "Runtime root directory.", + }, + "enable_autoscaling": { + Type: schema.TypeBool, + Optional: true, + Description: "Whether to enable elastic scaling.", + }, + "replicas": { + Type: schema.TypeInt, + Optional: true, + Computed: true, + Description: "Desired number of nodes.", + }, + "internet_accessible": { + Type: schema.TypeList, + Optional: true, + Computed: true, + ForceNew: true, + MaxItems: 1, + Description: "Public network bandwidth settings.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "max_bandwidth_out": { + Type: schema.TypeInt, + Required: true, + ForceNew: true, + Description: "Maximum bandwidth output. Note: When chargeType is `TRAFFIC_POSTPAID_BY_HOUR` and `BANDWIDTH_POSTPAID_BY_HOUR`, the valid range is 1~100. When chargeType is `BANDWIDTH_PACKAG`, the valid range is 1~2000.", + ValidateFunc: tccommon.ValidateIntegerMin(1), + }, + "charge_type": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Network billing method. Optional value is `TRAFFIC_POSTPAID_BY_HOUR`, `BANDWIDTH_POSTPAID_BY_HOUR` and `BANDWIDTH_PACKAGE`.", + }, + "bandwidth_package_id": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Description: "Bandwidth package ID. Note: When ChargeType is BANDWIDTH_PACKAG, the value cannot be empty; otherwise, the value must be empty.", + }, + }, + }, + }, + "data_disks": { + Type: schema.TypeList, + Optional: true, + Description: "Native node pool data disk list.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "disk_type": { + Type: schema.TypeString, + Required: true, + Description: "Cloud disk type. Valid values: `CLOUD_PREMIUM`: Premium Cloud Storage, `CLOUD_SSD`: cloud SSD disk, `CLOUD_BSSD`: Basic SSD, `CLOUD_HSSD`: Enhanced SSD, `CLOUD_TSSD`: Tremendous SSD, `LOCAL_NVME`: local NVME disk.", + }, + "file_system": { + Type: schema.TypeString, + Optional: true, + Description: "File system (ext3/ext4/xfs).", + }, + "disk_size": { + Type: schema.TypeInt, + Required: true, + Description: "Cloud disk size (G).", + }, + "auto_format_and_mount": { + Type: schema.TypeBool, + Required: true, + Description: "Whether to automatically format the disk and mount it.", + }, + "disk_partition": { + Type: schema.TypeString, + Optional: true, + Description: "Mount device name or partition name.", + }, + "mount_target": { + Type: schema.TypeString, + Optional: true, + Description: "Mount directory.", + }, + "encrypt": { + Type: schema.TypeString, + Optional: true, + Description: "Pass in this parameter to create an encrypted cloud disk. The value is fixed to `ENCRYPT`.", + }, + "kms_key_id": { + Type: schema.TypeString, + Optional: true, + Description: "Customize the key when purchasing an encrypted disk. When this parameter is passed in, the Encrypt parameter is not empty.", + }, + "snapshot_id": { + Type: schema.TypeString, + Optional: true, + Description: "Snapshot ID. If passed in, the cloud disk will be created based on this snapshot. The snapshot type must be a data disk snapshot.", + }, + "throughput_performance": { + Type: schema.TypeInt, + Optional: true, + Description: "Cloud disk performance, unit: MB/s. Use this parameter to purchase additional performance for the cloud disk.", + }, + }, + }, + }, + "key_ids": { + Type: schema.TypeList, + Optional: true, + Description: "Node pool ssh public key id array.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + + "annotations": { + Type: schema.TypeSet, + Optional: true, + Computed: true, + Description: "Node Annotation List.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Required: true, + Description: "Name in the map table.", + }, + "value": { + Type: schema.TypeString, + Required: true, + Description: "Value in the map table.", + }, + }, + }, + }, + + "life_state": { + Type: schema.TypeString, + Computed: true, + Description: "Node pool status.", + }, + + "created_at": { + Type: schema.TypeString, + Computed: true, + Description: "creation time.", + }, + }, + } +} + +func resourceTencentCloudKubernetesNativeNodePoolsCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_native_node_pools.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + + var ( + clusterId string + nodePoolId string + ) + var ( + request = tkev20220501.NewCreateNodePoolRequest() + response = tkev20220501.NewCreateNodePoolResponse() + ) + + if v, ok := d.GetOk("cluster_id"); ok { + clusterId = v.(string) + } + + request.ClusterId = helper.String(clusterId) + + if v, ok := d.GetOk("name"); ok { + request.Name = helper.String(v.(string)) + } + + if v, ok := d.GetOk("type"); ok { + request.Type = helper.String(v.(string)) + } + + if v, ok := d.GetOk("labels"); ok { + for _, item := range v.([]interface{}) { + labelsMap := item.(map[string]interface{}) + label := tkev20220501.Label{} + if v, ok := labelsMap["name"]; ok { + label.Name = helper.String(v.(string)) + } + if v, ok := labelsMap["value"]; ok { + label.Value = helper.String(v.(string)) + } + request.Labels = append(request.Labels, &label) + } + } + + if v, ok := d.GetOk("taints"); ok { + for _, item := range v.([]interface{}) { + taintsMap := item.(map[string]interface{}) + taint := tkev20220501.Taint{} + if v, ok := taintsMap["key"]; ok { + taint.Key = helper.String(v.(string)) + } + if v, ok := taintsMap["value"]; ok { + taint.Value = helper.String(v.(string)) + } + if v, ok := taintsMap["effect"]; ok { + taint.Effect = helper.String(v.(string)) + } + request.Taints = append(request.Taints, &taint) + } + } + + if v, ok := d.GetOk("tags"); ok { + for _, item := range v.([]interface{}) { + tagsMap := item.(map[string]interface{}) + tagSpecification := tkev20220501.TagSpecification{} + if v, ok := tagsMap["resource_type"]; ok { + tagSpecification.ResourceType = helper.String(v.(string)) + } + if v, ok := tagsMap["tags"]; ok { + for _, item := range v.([]interface{}) { + tagsMap := item.(map[string]interface{}) + tag := tkev20220501.Tag{} + if v, ok := tagsMap["key"]; ok { + tag.Key = helper.String(v.(string)) + } + if v, ok := tagsMap["value"]; ok { + tag.Value = helper.String(v.(string)) + } + tagSpecification.Tags = append(tagSpecification.Tags, &tag) + } + } + request.Tags = append(request.Tags, &tagSpecification) + } + } + + if v, ok := d.GetOkExists("deletion_protection"); ok { + request.DeletionProtection = helper.Bool(v.(bool)) + } + + if v, ok := d.GetOkExists("unschedulable"); ok { + request.Unschedulable = helper.Bool(v.(bool)) + } + + if nativeMap, ok := helper.InterfacesHeadMap(d, "native"); ok { + createNativeNodePoolParam := tkev20220501.CreateNativeNodePoolParam{} + if scalingMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["scaling"]); ok { + machineSetScaling := tkev20220501.MachineSetScaling{} + if v, ok := scalingMap["min_replicas"]; ok { + machineSetScaling.MinReplicas = helper.IntInt64(v.(int)) + } + if v, ok := scalingMap["max_replicas"]; ok { + machineSetScaling.MaxReplicas = helper.IntInt64(v.(int)) + } + if v, ok := scalingMap["create_policy"]; ok { + machineSetScaling.CreatePolicy = helper.String(v.(string)) + } + createNativeNodePoolParam.Scaling = &machineSetScaling + } + if v, ok := nativeMap["subnet_ids"]; ok { + subnetIdsSet := v.([]interface{}) + for i := range subnetIdsSet { + subnetIds := subnetIdsSet[i].(string) + createNativeNodePoolParam.SubnetIds = append(createNativeNodePoolParam.SubnetIds, helper.String(subnetIds)) + } + } + if v, ok := nativeMap["instance_charge_type"]; ok { + createNativeNodePoolParam.InstanceChargeType = helper.String(v.(string)) + } + if systemDiskMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["system_disk"]); ok { + disk := tkev20220501.Disk{} + if v, ok := systemDiskMap["disk_type"]; ok { + disk.DiskType = helper.String(v.(string)) + } + if v, ok := systemDiskMap["disk_size"]; ok { + disk.DiskSize = helper.IntInt64(v.(int)) + } + createNativeNodePoolParam.SystemDisk = &disk + } + if v, ok := nativeMap["instance_types"]; ok { + instanceTypesSet := v.([]interface{}) + for i := range instanceTypesSet { + instanceTypes := instanceTypesSet[i].(string) + createNativeNodePoolParam.InstanceTypes = append(createNativeNodePoolParam.InstanceTypes, helper.String(instanceTypes)) + } + } + if v, ok := nativeMap["security_group_ids"]; ok { + securityGroupIdsSet := v.([]interface{}) + for i := range securityGroupIdsSet { + securityGroupIds := securityGroupIdsSet[i].(string) + createNativeNodePoolParam.SecurityGroupIds = append(createNativeNodePoolParam.SecurityGroupIds, helper.String(securityGroupIds)) + } + } + if v, ok := nativeMap["auto_repair"]; ok { + createNativeNodePoolParam.AutoRepair = helper.Bool(v.(bool)) + } + if instanceChargePrepaidMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["instance_charge_prepaid"]); ok { + instanceChargePrepaid := tkev20220501.InstanceChargePrepaid{} + if v, ok := instanceChargePrepaidMap["period"]; ok { + instanceChargePrepaid.Period = helper.IntUint64(v.(int)) + } + if v, ok := instanceChargePrepaidMap["renew_flag"]; ok { + instanceChargePrepaid.RenewFlag = helper.String(v.(string)) + } + createNativeNodePoolParam.InstanceChargePrepaid = &instanceChargePrepaid + } + if managementMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["management"]); ok { + managementConfig := tkev20220501.ManagementConfig{} + if v, ok := managementMap["nameservers"]; ok { + nameserversSet := v.([]interface{}) + for i := range nameserversSet { + nameservers := nameserversSet[i].(string) + managementConfig.Nameservers = append(managementConfig.Nameservers, helper.String(nameservers)) + } + } + if v, ok := managementMap["hosts"]; ok { + hostsSet := v.([]interface{}) + for i := range hostsSet { + hosts := hostsSet[i].(string) + managementConfig.Hosts = append(managementConfig.Hosts, helper.String(hosts)) + } + } + if v, ok := managementMap["kernel_args"]; ok { + kernelArgsSet := v.([]interface{}) + for i := range kernelArgsSet { + kernelArgs := kernelArgsSet[i].(string) + managementConfig.KernelArgs = append(managementConfig.KernelArgs, helper.String(kernelArgs)) + } + } + createNativeNodePoolParam.Management = &managementConfig + } + if v, ok := nativeMap["health_check_policy_name"]; ok { + createNativeNodePoolParam.HealthCheckPolicyName = helper.String(v.(string)) + } + if v, ok := nativeMap["host_name_pattern"]; ok { + createNativeNodePoolParam.HostNamePattern = helper.String(v.(string)) + } + if v, ok := nativeMap["kubelet_args"]; ok { + kubeletArgsSet := v.([]interface{}) + for i := range kubeletArgsSet { + kubeletArgs := kubeletArgsSet[i].(string) + createNativeNodePoolParam.KubeletArgs = append(createNativeNodePoolParam.KubeletArgs, helper.String(kubeletArgs)) + } + } + if lifecycleMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["lifecycle"]); ok { + lifecycleConfig := tkev20220501.LifecycleConfig{} + if v, ok := lifecycleMap["pre_init"]; ok { + lifecycleConfig.PreInit = helper.String(v.(string)) + } + if v, ok := lifecycleMap["post_init"]; ok { + lifecycleConfig.PostInit = helper.String(v.(string)) + } + createNativeNodePoolParam.Lifecycle = &lifecycleConfig + } + if v, ok := nativeMap["runtime_root_dir"]; ok { + createNativeNodePoolParam.RuntimeRootDir = helper.String(v.(string)) + } + if v, ok := nativeMap["enable_autoscaling"]; ok { + createNativeNodePoolParam.EnableAutoscaling = helper.Bool(v.(bool)) + } + if v, ok := nativeMap["replicas"]; ok { + createNativeNodePoolParam.Replicas = helper.IntInt64(v.(int)) + } + if internetAccessibleMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["internet_accessible"]); ok { + internetAccessible := tkev20220501.InternetAccessible{} + if v, ok := internetAccessibleMap["max_bandwidth_out"]; ok { + internetAccessible.MaxBandwidthOut = helper.IntInt64(v.(int)) + } + if v, ok := internetAccessibleMap["charge_type"]; ok { + internetAccessible.ChargeType = helper.String(v.(string)) + } + if v, ok := internetAccessibleMap["bandwidth_package_id"]; ok { + internetAccessible.BandwidthPackageId = helper.String(v.(string)) + } + createNativeNodePoolParam.InternetAccessible = &internetAccessible + } + if v, ok := nativeMap["data_disks"]; ok { + for _, item := range v.([]interface{}) { + dataDisksMap := item.(map[string]interface{}) + dataDisk := tkev20220501.DataDisk{} + if v, ok := dataDisksMap["disk_type"]; ok { + dataDisk.DiskType = helper.String(v.(string)) + } + if v, ok := dataDisksMap["file_system"]; ok { + dataDisk.FileSystem = helper.String(v.(string)) + } + if v, ok := dataDisksMap["disk_size"]; ok { + dataDisk.DiskSize = helper.IntInt64(v.(int)) + } + if v, ok := dataDisksMap["auto_format_and_mount"]; ok { + dataDisk.AutoFormatAndMount = helper.Bool(v.(bool)) + } + if v, ok := dataDisksMap["disk_partition"]; ok { + dataDisk.DiskPartition = helper.String(v.(string)) + } + if v, ok := dataDisksMap["mount_target"]; ok { + dataDisk.MountTarget = helper.String(v.(string)) + } + if v, ok := dataDisksMap["encrypt"]; ok { + dataDisk.Encrypt = helper.String(v.(string)) + } + if v, ok := dataDisksMap["kms_key_id"]; ok { + dataDisk.KmsKeyId = helper.String(v.(string)) + } + if v, ok := dataDisksMap["snapshot_id"]; ok { + dataDisk.SnapshotId = helper.String(v.(string)) + } + if v, ok := dataDisksMap["throughput_performance"]; ok { + dataDisk.ThroughputPerformance = helper.IntUint64(v.(int)) + } + createNativeNodePoolParam.DataDisks = append(createNativeNodePoolParam.DataDisks, &dataDisk) + } + } + if v, ok := nativeMap["key_ids"]; ok { + keyIdsSet := v.([]interface{}) + for i := range keyIdsSet { + keyIds := keyIdsSet[i].(string) + createNativeNodePoolParam.KeyIds = append(createNativeNodePoolParam.KeyIds, helper.String(keyIds)) + } + } + request.Native = &createNativeNodePoolParam + } + + if v, ok := d.GetOk("annotations"); ok { + for _, item := range v.(*schema.Set).List() { + annotationsMap := item.(map[string]interface{}) + annotation := tkev20220501.Annotation{} + if v, ok := annotationsMap["name"]; ok { + annotation.Name = helper.String(v.(string)) + } + if v, ok := annotationsMap["value"]; ok { + annotation.Value = helper.String(v.(string)) + } + request.Annotations = append(request.Annotations, &annotation) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeV20220501Client().CreateNodePoolWithContext(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 kubernetes native node pools failed, reason:%+v", logId, err) + return err + } + + nodePoolId = *response.Response.NodePoolId + + d.SetId(strings.Join([]string{clusterId, nodePoolId}, tccommon.FILED_SP)) + + return resourceTencentCloudKubernetesNativeNodePoolsRead(d, meta) +} + +func resourceTencentCloudKubernetesNativeNodePoolsRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_native_node_pools.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + clusterId := idSplit[0] + nodePoolId := idSplit[1] + + _ = d.Set("cluster_id", clusterId) + + respData, err := service.DescribeKubernetesNativeNodePoolsById(ctx, clusterId, nodePoolId) + if err != nil { + return err + } + + if respData == nil { + d.SetId("") + log.Printf("[WARN]%s resource `kubernetes_native_node_pools` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + tagsList := make([]map[string]interface{}, 0, len(respData.Tags)) + if respData.Tags != nil { + for _, tags := range respData.Tags { + tagsMap := map[string]interface{}{} + + if tags.ResourceType != nil { + tagsMap["resource_type"] = tags.ResourceType + } + + tagsList2 := make([]map[string]interface{}, 0, len(tags.Tags)) + if tags.Tags != nil { + for _, tags := range tags.Tags { + tagsMap2 := map[string]interface{}{} + + if tags.Key != nil { + tagsMap2["key"] = tags.Key + } + + if tags.Value != nil { + tagsMap2["value"] = tags.Value + } + + tagsList2 = append(tagsList2, tagsMap2) + } + + tagsMap["tags"] = tagsList2 + } + tagsList = append(tagsList, tagsMap) + } + + _ = d.Set("tags", tagsList) + } + + taintsList := make([]map[string]interface{}, 0, len(respData.Taints)) + if respData.Taints != nil { + for _, taints := range respData.Taints { + taintsMap := map[string]interface{}{} + + if taints.Key != nil { + taintsMap["key"] = taints.Key + } + + if taints.Value != nil { + taintsMap["value"] = taints.Value + } + + if taints.Effect != nil { + taintsMap["effect"] = taints.Effect + } + + taintsList = append(taintsList, taintsMap) + } + + _ = d.Set("taints", taintsList) + } + + if respData.DeletionProtection != nil { + _ = d.Set("deletion_protection", respData.DeletionProtection) + } + + if respData.Unschedulable != nil { + _ = d.Set("unschedulable", respData.Unschedulable) + } + + if respData.Type != nil { + _ = d.Set("type", respData.Type) + } + + labelsList := make([]map[string]interface{}, 0, len(respData.Labels)) + if respData.Labels != nil { + for _, labels := range respData.Labels { + labelsMap := map[string]interface{}{} + + if labels.Name != nil { + labelsMap["name"] = labels.Name + } + + if labels.Value != nil { + labelsMap["value"] = labels.Value + } + + labelsList = append(labelsList, labelsMap) + } + + _ = d.Set("labels", labelsList) + } + + if respData.LifeState != nil { + _ = d.Set("life_state", respData.LifeState) + } + + if respData.CreatedAt != nil { + _ = d.Set("created_at", respData.CreatedAt) + } + + if respData.Name != nil { + _ = d.Set("name", respData.Name) + } + + nativeMap := map[string]interface{}{} + + if respData.Native != nil { + scalingMap := map[string]interface{}{} + + if respData.Native.Scaling != nil { + if respData.Native.Scaling.MinReplicas != nil { + scalingMap["min_replicas"] = respData.Native.Scaling.MinReplicas + } + + if respData.Native.Scaling.MaxReplicas != nil { + scalingMap["max_replicas"] = respData.Native.Scaling.MaxReplicas + } + + if respData.Native.Scaling.CreatePolicy != nil { + scalingMap["create_policy"] = respData.Native.Scaling.CreatePolicy + } + + nativeMap["scaling"] = []interface{}{scalingMap} + } + + if respData.Native.SubnetIds != nil { + nativeMap["subnet_ids"] = respData.Native.SubnetIds + } + + if respData.Native.SecurityGroupIds != nil { + nativeMap["security_group_ids"] = respData.Native.SecurityGroupIds + } + + if respData.Native.AutoRepair != nil { + nativeMap["auto_repair"] = respData.Native.AutoRepair + } + + if respData.Native.InstanceChargeType != nil { + nativeMap["instance_charge_type"] = respData.Native.InstanceChargeType + } + + instanceChargePrepaidMap := map[string]interface{}{} + + if respData.Native.InstanceChargePrepaid != nil { + if respData.Native.InstanceChargePrepaid.Period != nil { + instanceChargePrepaidMap["period"] = respData.Native.InstanceChargePrepaid.Period + } + + if respData.Native.InstanceChargePrepaid.RenewFlag != nil { + instanceChargePrepaidMap["renew_flag"] = respData.Native.InstanceChargePrepaid.RenewFlag + } + + nativeMap["instance_charge_prepaid"] = []interface{}{instanceChargePrepaidMap} + } + + systemDiskMap := map[string]interface{}{} + + if respData.Native.SystemDisk != nil { + if respData.Native.SystemDisk.DiskType != nil { + systemDiskMap["disk_type"] = respData.Native.SystemDisk.DiskType + } + + if respData.Native.SystemDisk.DiskSize != nil { + systemDiskMap["disk_size"] = respData.Native.SystemDisk.DiskSize + } + + nativeMap["system_disk"] = []interface{}{systemDiskMap} + } + + if respData.Native.KeyIds != nil { + nativeMap["key_ids"] = respData.Native.KeyIds + } + + managementMap := map[string]interface{}{} + + if respData.Native.Management != nil { + if respData.Native.Management.Nameservers != nil { + managementMap["nameservers"] = respData.Native.Management.Nameservers + } + + if respData.Native.Management.Hosts != nil { + managementMap["hosts"] = respData.Native.Management.Hosts + } + + if respData.Native.Management.KernelArgs != nil { + managementMap["kernel_args"] = respData.Native.Management.KernelArgs + } + + nativeMap["management"] = []interface{}{managementMap} + } + + if respData.Native.HealthCheckPolicyName != nil { + nativeMap["health_check_policy_name"] = respData.Native.HealthCheckPolicyName + } + + if respData.Native.HostNamePattern != nil { + nativeMap["host_name_pattern"] = respData.Native.HostNamePattern + } + + if respData.Native.KubeletArgs != nil { + nativeMap["kubelet_args"] = respData.Native.KubeletArgs + } + + lifecycleMap := map[string]interface{}{} + + if respData.Native.Lifecycle != nil { + if respData.Native.Lifecycle.PreInit != nil { + lifecycleMap["pre_init"] = respData.Native.Lifecycle.PreInit + } + + if respData.Native.Lifecycle.PostInit != nil { + lifecycleMap["post_init"] = respData.Native.Lifecycle.PostInit + } + + nativeMap["lifecycle"] = []interface{}{lifecycleMap} + } + + if respData.Native.RuntimeRootDir != nil { + nativeMap["runtime_root_dir"] = respData.Native.RuntimeRootDir + } + + if respData.Native.EnableAutoscaling != nil { + nativeMap["enable_autoscaling"] = respData.Native.EnableAutoscaling + } + + if respData.Native.InstanceTypes != nil { + nativeMap["instance_types"] = respData.Native.InstanceTypes + } + + if respData.Native.Replicas != nil { + nativeMap["replicas"] = respData.Native.Replicas + } + + internetAccessibleMap := map[string]interface{}{} + + if respData.Native.InternetAccessible != nil { + if respData.Native.InternetAccessible.MaxBandwidthOut != nil { + internetAccessibleMap["max_bandwidth_out"] = respData.Native.InternetAccessible.MaxBandwidthOut + } + + if respData.Native.InternetAccessible.ChargeType != nil { + internetAccessibleMap["charge_type"] = respData.Native.InternetAccessible.ChargeType + } + + if respData.Native.InternetAccessible.BandwidthPackageId != nil { + internetAccessibleMap["bandwidth_package_id"] = respData.Native.InternetAccessible.BandwidthPackageId + } + + nativeMap["internet_accessible"] = []interface{}{internetAccessibleMap} + } + + dataDisksList := make([]map[string]interface{}, 0, len(respData.Native.DataDisks)) + if respData.Native.DataDisks != nil { + for _, dataDisks := range respData.Native.DataDisks { + dataDisksMap := map[string]interface{}{} + + if dataDisks.DiskType != nil { + dataDisksMap["disk_type"] = dataDisks.DiskType + } + + if dataDisks.FileSystem != nil { + dataDisksMap["file_system"] = dataDisks.FileSystem + } + + if dataDisks.DiskSize != nil { + dataDisksMap["disk_size"] = dataDisks.DiskSize + } + + if dataDisks.AutoFormatAndMount != nil { + dataDisksMap["auto_format_and_mount"] = dataDisks.AutoFormatAndMount + } + + if dataDisks.DiskPartition != nil { + dataDisksMap["disk_partition"] = dataDisks.DiskPartition + } + + if dataDisks.MountTarget != nil { + dataDisksMap["mount_target"] = dataDisks.MountTarget + } + + if dataDisks.Encrypt != nil { + dataDisksMap["encrypt"] = dataDisks.Encrypt + } + + if dataDisks.KmsKeyId != nil { + dataDisksMap["kms_key_id"] = dataDisks.KmsKeyId + } + + if dataDisks.SnapshotId != nil { + dataDisksMap["snapshot_id"] = dataDisks.SnapshotId + } + + if dataDisks.ThroughputPerformance != nil { + dataDisksMap["throughput_performance"] = dataDisks.ThroughputPerformance + } + + dataDisksList = append(dataDisksList, dataDisksMap) + } + + nativeMap["data_disks"] = dataDisksList + } + _ = d.Set("native", []interface{}{nativeMap}) + } + + annotationsList := make([]map[string]interface{}, 0, len(respData.Annotations)) + if respData.Annotations != nil { + for _, annotations := range respData.Annotations { + annotationsMap := map[string]interface{}{} + + if annotations.Name != nil { + annotationsMap["name"] = annotations.Name + } + + if annotations.Value != nil { + annotationsMap["value"] = annotations.Value + } + + annotationsList = append(annotationsList, annotationsMap) + } + + _ = d.Set("annotations", annotationsList) + } + + return nil +} + +func resourceTencentCloudKubernetesNativeNodePoolsUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_native_node_pools.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + + immutableArgs := []string{"type"} + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) + } + } + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + clusterId := idSplit[0] + nodePoolId := idSplit[1] + + needChange := false + mutableArgs := []string{"name", "labels", "taints", "tags", "deletion_protection", "unschedulable", "native", "annotations"} + for _, v := range mutableArgs { + if d.HasChange(v) { + needChange = true + break + } + } + + if needChange { + request := tkev20220501.NewModifyNodePoolRequest() + + request.ClusterId = helper.String(clusterId) + + request.NodePoolId = helper.String(nodePoolId) + + if v, ok := d.GetOk("name"); ok { + request.Name = helper.String(v.(string)) + } + + if v, ok := d.GetOk("labels"); ok { + for _, item := range v.([]interface{}) { + labelsMap := item.(map[string]interface{}) + label := tkev20220501.Label{} + if v, ok := labelsMap["name"]; ok { + label.Name = helper.String(v.(string)) + } + if v, ok := labelsMap["value"]; ok { + label.Value = helper.String(v.(string)) + } + request.Labels = append(request.Labels, &label) + } + } + + if v, ok := d.GetOk("taints"); ok { + for _, item := range v.([]interface{}) { + taintsMap := item.(map[string]interface{}) + taint := tkev20220501.Taint{} + if v, ok := taintsMap["key"]; ok { + taint.Key = helper.String(v.(string)) + } + if v, ok := taintsMap["value"]; ok { + taint.Value = helper.String(v.(string)) + } + if v, ok := taintsMap["effect"]; ok { + taint.Effect = helper.String(v.(string)) + } + request.Taints = append(request.Taints, &taint) + } + } + + if v, ok := d.GetOk("tags"); ok { + for _, item := range v.([]interface{}) { + tagsMap := item.(map[string]interface{}) + tagSpecification := tkev20220501.TagSpecification{} + if v, ok := tagsMap["resource_type"]; ok { + tagSpecification.ResourceType = helper.String(v.(string)) + } + if v, ok := tagsMap["tags"]; ok { + for _, item := range v.([]interface{}) { + tagsMap := item.(map[string]interface{}) + tag := tkev20220501.Tag{} + if v, ok := tagsMap["key"]; ok { + tag.Key = helper.String(v.(string)) + } + if v, ok := tagsMap["value"]; ok { + tag.Value = helper.String(v.(string)) + } + tagSpecification.Tags = append(tagSpecification.Tags, &tag) + } + } + request.Tags = append(request.Tags, &tagSpecification) + } + } + + if v, ok := d.GetOkExists("deletion_protection"); ok { + request.DeletionProtection = helper.Bool(v.(bool)) + } + + if v, ok := d.GetOkExists("unschedulable"); ok { + request.Unschedulable = helper.Bool(v.(bool)) + } + + if nativeMap, ok := helper.InterfacesHeadMap(d, "native"); ok { + updateNativeNodePoolParam := tkev20220501.UpdateNativeNodePoolParam{} + if scalingMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["scaling"]); ok { + machineSetScaling := tkev20220501.MachineSetScaling{} + if v, ok := scalingMap["min_replicas"]; ok { + machineSetScaling.MinReplicas = helper.IntInt64(v.(int)) + } + if v, ok := scalingMap["max_replicas"]; ok { + machineSetScaling.MaxReplicas = helper.IntInt64(v.(int)) + } + if v, ok := scalingMap["create_policy"]; ok { + machineSetScaling.CreatePolicy = helper.String(v.(string)) + } + updateNativeNodePoolParam.Scaling = &machineSetScaling + } + if v, ok := nativeMap["subnet_ids"]; ok { + subnetIdsSet := v.([]interface{}) + for i := range subnetIdsSet { + subnetIds := subnetIdsSet[i].(string) + updateNativeNodePoolParam.SubnetIds = append(updateNativeNodePoolParam.SubnetIds, helper.String(subnetIds)) + } + } + if v, ok := nativeMap["security_group_ids"]; ok { + securityGroupIdsSet := v.([]interface{}) + for i := range securityGroupIdsSet { + securityGroupIds := securityGroupIdsSet[i].(string) + updateNativeNodePoolParam.SecurityGroupIds = append(updateNativeNodePoolParam.SecurityGroupIds, helper.String(securityGroupIds)) + } + } + if v, ok := nativeMap["auto_repair"]; ok { + updateNativeNodePoolParam.AutoRepair = helper.Bool(v.(bool)) + } + if v, ok := nativeMap["instance_charge_type"]; ok { + updateNativeNodePoolParam.InstanceChargeType = helper.String(v.(string)) + } + if instanceChargePrepaidMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["instance_charge_prepaid"]); ok { + instanceChargePrepaid := tkev20220501.InstanceChargePrepaid{} + if v, ok := instanceChargePrepaidMap["period"]; ok { + instanceChargePrepaid.Period = helper.IntUint64(v.(int)) + } + if v, ok := instanceChargePrepaidMap["renew_flag"]; ok { + instanceChargePrepaid.RenewFlag = helper.String(v.(string)) + } + updateNativeNodePoolParam.InstanceChargePrepaid = &instanceChargePrepaid + } + if systemDiskMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["system_disk"]); ok { + disk := tkev20220501.Disk{} + if v, ok := systemDiskMap["disk_type"]; ok { + disk.DiskType = helper.String(v.(string)) + } + if v, ok := systemDiskMap["disk_size"]; ok { + disk.DiskSize = helper.IntInt64(v.(int)) + } + updateNativeNodePoolParam.SystemDisk = &disk + } + if managementMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["management"]); ok { + managementConfig := tkev20220501.ManagementConfig{} + if v, ok := managementMap["nameservers"]; ok { + nameserversSet := v.([]interface{}) + for i := range nameserversSet { + nameservers := nameserversSet[i].(string) + managementConfig.Nameservers = append(managementConfig.Nameservers, helper.String(nameservers)) + } + } + if v, ok := managementMap["hosts"]; ok { + hostsSet := v.([]interface{}) + for i := range hostsSet { + hosts := hostsSet[i].(string) + managementConfig.Hosts = append(managementConfig.Hosts, helper.String(hosts)) + } + } + if v, ok := managementMap["kernel_args"]; ok { + kernelArgsSet := v.([]interface{}) + for i := range kernelArgsSet { + kernelArgs := kernelArgsSet[i].(string) + managementConfig.KernelArgs = append(managementConfig.KernelArgs, helper.String(kernelArgs)) + } + } + updateNativeNodePoolParam.Management = &managementConfig + } + if v, ok := nativeMap["health_check_policy_name"]; ok { + updateNativeNodePoolParam.HealthCheckPolicyName = helper.String(v.(string)) + } + if v, ok := nativeMap["host_name_pattern"]; ok { + updateNativeNodePoolParam.HostNamePattern = helper.String(v.(string)) + } + if v, ok := nativeMap["kubelet_args"]; ok { + kubeletArgsSet := v.([]interface{}) + for i := range kubeletArgsSet { + kubeletArgs := kubeletArgsSet[i].(string) + updateNativeNodePoolParam.KubeletArgs = append(updateNativeNodePoolParam.KubeletArgs, helper.String(kubeletArgs)) + } + } + if lifecycleMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["lifecycle"]); ok { + lifecycleConfig := tkev20220501.LifecycleConfig{} + if v, ok := lifecycleMap["pre_init"]; ok { + lifecycleConfig.PreInit = helper.String(v.(string)) + } + if v, ok := lifecycleMap["post_init"]; ok { + lifecycleConfig.PostInit = helper.String(v.(string)) + } + updateNativeNodePoolParam.Lifecycle = &lifecycleConfig + } + if v, ok := nativeMap["runtime_root_dir"]; ok { + updateNativeNodePoolParam.RuntimeRootDir = helper.String(v.(string)) + } + if v, ok := nativeMap["enable_autoscaling"]; ok { + updateNativeNodePoolParam.EnableAutoscaling = helper.Bool(v.(bool)) + } + if v, ok := nativeMap["instance_types"]; ok { + instanceTypesSet := v.([]interface{}) + for i := range instanceTypesSet { + instanceTypes := instanceTypesSet[i].(string) + updateNativeNodePoolParam.InstanceTypes = append(updateNativeNodePoolParam.InstanceTypes, helper.String(instanceTypes)) + } + } + if v, ok := nativeMap["replicas"]; ok { + updateNativeNodePoolParam.Replicas = helper.IntInt64(v.(int)) + } + if v, ok := nativeMap["data_disks"]; ok { + for _, item := range v.([]interface{}) { + dataDisksMap := item.(map[string]interface{}) + dataDisk := tkev20220501.DataDisk{} + if v, ok := dataDisksMap["disk_type"]; ok { + dataDisk.DiskType = helper.String(v.(string)) + } + if v, ok := dataDisksMap["file_system"]; ok { + dataDisk.FileSystem = helper.String(v.(string)) + } + if v, ok := dataDisksMap["disk_size"]; ok { + dataDisk.DiskSize = helper.IntInt64(v.(int)) + } + if v, ok := dataDisksMap["auto_format_and_mount"]; ok { + dataDisk.AutoFormatAndMount = helper.Bool(v.(bool)) + } + if v, ok := dataDisksMap["disk_partition"]; ok { + dataDisk.DiskPartition = helper.String(v.(string)) + } + if v, ok := dataDisksMap["mount_target"]; ok { + dataDisk.MountTarget = helper.String(v.(string)) + } + if v, ok := dataDisksMap["encrypt"]; ok { + dataDisk.Encrypt = helper.String(v.(string)) + } + if v, ok := dataDisksMap["kms_key_id"]; ok { + dataDisk.KmsKeyId = helper.String(v.(string)) + } + if v, ok := dataDisksMap["snapshot_id"]; ok { + dataDisk.SnapshotId = helper.String(v.(string)) + } + if v, ok := dataDisksMap["throughput_performance"]; ok { + dataDisk.ThroughputPerformance = helper.IntUint64(v.(int)) + } + updateNativeNodePoolParam.DataDisks = append(updateNativeNodePoolParam.DataDisks, &dataDisk) + } + } + if v, ok := nativeMap["key_ids"]; ok { + keyIdsSet := v.([]interface{}) + for i := range keyIdsSet { + keyIds := keyIdsSet[i].(string) + updateNativeNodePoolParam.KeyIds = append(updateNativeNodePoolParam.KeyIds, helper.String(keyIds)) + } + } + request.Native = &updateNativeNodePoolParam + } + + if v, ok := d.GetOk("annotations"); ok { + for _, item := range v.(*schema.Set).List() { + annotationsMap := item.(map[string]interface{}) + annotation := tkev20220501.Annotation{} + if v, ok := annotationsMap["name"]; ok { + annotation.Name = helper.String(v.(string)) + } + if v, ok := annotationsMap["value"]; ok { + annotation.Value = helper.String(v.(string)) + } + request.Annotations = append(request.Annotations, &annotation) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeV20220501Client().ModifyNodePoolWithContext(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 kubernetes native node pools failed, reason:%+v", logId, err) + return err + } + } + + return resourceTencentCloudKubernetesNativeNodePoolsRead(d, meta) +} + +func resourceTencentCloudKubernetesNativeNodePoolsDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_native_node_pools.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + clusterId := idSplit[0] + nodePoolId := idSplit[1] + + var ( + request = tkev20220501.NewDeleteNodePoolRequest() + response = tkev20220501.NewDeleteNodePoolResponse() + ) + + request.ClusterId = helper.String(clusterId) + + request.NodePoolId = helper.String(nodePoolId) + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeV20220501Client().DeleteNodePoolWithContext(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 delete kubernetes native node pools failed, reason:%+v", logId, err) + return err + } + + _ = response + return nil +} diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools.md b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools.md new file mode 100644 index 0000000000..be66c31593 --- /dev/null +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools.md @@ -0,0 +1,30 @@ +Provides a resource to create a tke kubernetes_native_node_pools + +Example Usage + +```hcl +resource "tencentcloud_kubernetes_native_node_pools" "kubernetes_native_node_pools" { + labels = { + } + taints = { + } + tags = { + tags = { + } + } + native = { + system_disk = { + } + data_disks = { + } + } +} +``` + +Import + +tke kubernetes_native_node_pools can be imported using the id, e.g. + +``` +terraform import tencentcloud_kubernetes_native_node_pools.kubernetes_native_node_pools kubernetes_native_node_pools_id +``` diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools_extension.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools_extension.go new file mode 100644 index 0000000000..7fdf745226 --- /dev/null +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools_extension.go @@ -0,0 +1 @@ +package tke diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools_test.go new file mode 100644 index 0000000000..4d2e412684 --- /dev/null +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools_test.go @@ -0,0 +1,47 @@ +package tke + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" +) + +func TestAccTencentCloudKubernetesNativeNodePoolsResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{{ + Config: testAccKubernetesNativeNodePools, + Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_kubernetes_native_node_pools.kubernetes_native_node_pools", "id")), + }, { + ResourceName: "tencentcloud_kubernetes_native_node_pools.kubernetes_native_node_pools", + ImportState: true, + ImportStateVerify: true, + }}, + }) +} + +const testAccKubernetesNativeNodePools = ` + +resource "tencentcloud_kubernetes_native_node_pools" "kubernetes_native_node_pools" { + labels = { + } + taints = { + } + tags = { + tags = { + } + } + native = { + system_disk = { + } + data_disks = { + } + } +} +` diff --git a/tencentcloud/services/tke/service_tencentcloud_tke.go b/tencentcloud/services/tke/service_tencentcloud_tke.go index 8777af1c01..dd164daba5 100644 --- a/tencentcloud/services/tke/service_tencentcloud_tke.go +++ b/tencentcloud/services/tke/service_tencentcloud_tke.go @@ -3620,3 +3620,56 @@ func (me *TkeService) DescribeKubernetesAddonAttachmentById(ctx context.Context) ret = response.Response return } + +func (me *TkeService) DescribeKubernetesNativeNodePoolsById(ctx context.Context, clusterId string, nodePoolId string) (ret *tke2.NodePool, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tke2.NewDescribeNodePoolsRequest() + request.ClusterId = helper.String(clusterId) + filter := &tke2.Filter{ + Name: helper.String("NodePoolsId"), + Values: []*string{helper.String(nodePoolId)}, + } + request.Filters = append(request.Filters, filter) + + 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 int64 = 0 + limit int64 = 20 + ) + var instances []*tke2.NodePool + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTkeV20220501Client().DescribeNodePools(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.NodePools) < 1 { + break + } + instances = append(instances, response.Response.NodePools...) + if len(response.Response.NodePools) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + + ret = instances[0] + return +} From 1c50dacb271ea67eb25e8bc5e1cb226e000ba766 Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Wed, 11 Sep 2024 17:24:14 +0800 Subject: [PATCH 02/18] refactor(tke): regen tke provider --- ...resource_tc_kubernetes_native_node_pool.go | 395 +---- ...rce_tc_kubernetes_native_node_pool_test.go | 1 + ...esource_tc_kubernetes_native_node_pools.go | 1490 ----------------- ...esource_tc_kubernetes_native_node_pools.md | 30 - ..._kubernetes_native_node_pools_extension.go | 1 - ...ce_tc_kubernetes_native_node_pools_test.go | 47 - .../services/tke/service_tencentcloud_tke.go | 8 +- 7 files changed, 51 insertions(+), 1921 deletions(-) delete mode 100644 tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools.go delete mode 100644 tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools.md delete mode 100644 tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools_extension.go delete mode 100644 tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools_test.go diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go index 6ffd77162f..a89d6c3f53 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go @@ -3,15 +3,13 @@ package tke import ( "context" - "encoding/base64" "fmt" - sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" "log" "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tke2 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20220501" + tkev20220501 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20220501" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" @@ -209,22 +207,6 @@ func ResourceTencentCloudKubernetesNativeNodePool() *schema.Resource { ForceNew: true, Description: "Cloud disk size (G).", }, - //"auto_format_and_mount": { - // Type: schema.TypeBool, - // Optional: true, - // Computed: true, - // Description: "Whether to automatically format the disk and mount it.", - //}, - //"file_system": { - // Type: schema.TypeString, - // Optional: true, - // Description: "File system.", - //}, - //"mount_target": { - // Type: schema.TypeString, - // Optional: true, - // Description: "Mount directory.", - //}, }, }, }, @@ -244,84 +226,6 @@ func ResourceTencentCloudKubernetesNativeNodePool() *schema.Resource { Type: schema.TypeString, }, }, - //"upgrade_settings": { - // Type: schema.TypeList, - // Optional: true, - // Computed: true, - // MaxItems: 1, - // Description: "Automatically upgrade configuration.", - // Elem: &schema.Resource{ - // Schema: map[string]*schema.Schema{ - // "auto_upgrade": { - // Type: schema.TypeBool, - // Optional: true, - // Computed: true, - // Description: "Whether to enable automatic upgrade.", - // }, - // "upgrade_options": { - // Type: schema.TypeList, - // Optional: true, - // MaxItems: 1, - // Description: "Operation and maintenance window.", - // Elem: &schema.Resource{ - // Schema: map[string]*schema.Schema{ - // "auto_upgrade_start_time": { - // Type: schema.TypeString, - // Optional: true, - // Description: "Automatic upgrade start time.", - // }, - // "duration": { - // Type: schema.TypeString, - // Optional: true, - // Description: "Automatic upgrade duration.", - // }, - // "weekly_period": { - // Type: schema.TypeList, - // Optional: true, - // Description: "Operation and maintenance date.", - // Elem: &schema.Schema{ - // Type: schema.TypeString, - // }, - // }, - // }, - // }, - // }, - // "components": { - // Type: schema.TypeList, - // Optional: true, - // Description: "Upgrade items.", - // Elem: &schema.Schema{ - // Type: schema.TypeString, - // }, - // }, - // "max_unavailable": { - // Type: schema.TypeList, - // Optional: true, - // MaxItems: 1, - // Description: "When upgrading, the maximum number of nodes that cannot be upgraded.", - // Elem: &schema.Resource{ - // Schema: map[string]*schema.Schema{ - // "type": { - // Type: schema.TypeInt, - // Required: true, - // Description: "Numeric type, 0 is int, 1 is string.", - // }, - // "int_val": { - // Type: schema.TypeInt, - // Optional: true, - // Description: "Integer.", - // }, - // "str_val": { - // Type: schema.TypeString, - // Optional: true, - // Description: "String.", - // }, - // }, - // }, - // }, - // }, - // }, - //}, "auto_repair": { Type: schema.TypeBool, Optional: true, @@ -331,8 +235,8 @@ func ResourceTencentCloudKubernetesNativeNodePool() *schema.Resource { Type: schema.TypeList, Optional: true, Computed: true, - MaxItems: 1, ForceNew: true, + MaxItems: 1, Description: "Billing configuration for yearly and monthly models.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ @@ -576,7 +480,7 @@ func ResourceTencentCloudKubernetesNativeNodePool() *schema.Resource { "created_at": { Type: schema.TypeString, Computed: true, - Description: "Creation time.", + Description: "creation time.", }, }, } @@ -595,15 +499,15 @@ func resourceTencentCloudKubernetesNativeNodePoolCreate(d *schema.ResourceData, nodePoolId string ) var ( - request = tke2.NewCreateNodePoolRequest() - response = tke2.NewCreateNodePoolResponse() + request = tkev20220501.NewCreateNodePoolRequest() + response = tkev20220501.NewCreateNodePoolResponse() ) if v, ok := d.GetOk("cluster_id"); ok { clusterId = v.(string) } - request.ClusterId = &clusterId + request.ClusterId = helper.String(clusterId) if v, ok := d.GetOk("name"); ok { request.Name = helper.String(v.(string)) @@ -616,7 +520,7 @@ func resourceTencentCloudKubernetesNativeNodePoolCreate(d *schema.ResourceData, if v, ok := d.GetOk("labels"); ok { for _, item := range v.([]interface{}) { labelsMap := item.(map[string]interface{}) - label := tke2.Label{} + label := tkev20220501.Label{} if v, ok := labelsMap["name"]; ok { label.Name = helper.String(v.(string)) } @@ -630,7 +534,7 @@ func resourceTencentCloudKubernetesNativeNodePoolCreate(d *schema.ResourceData, if v, ok := d.GetOk("taints"); ok { for _, item := range v.([]interface{}) { taintsMap := item.(map[string]interface{}) - taint := tke2.Taint{} + taint := tkev20220501.Taint{} if v, ok := taintsMap["key"]; ok { taint.Key = helper.String(v.(string)) } @@ -647,14 +551,14 @@ func resourceTencentCloudKubernetesNativeNodePoolCreate(d *schema.ResourceData, if v, ok := d.GetOk("tags"); ok { for _, item := range v.([]interface{}) { tagsMap := item.(map[string]interface{}) - tagSpecification := tke2.TagSpecification{} + tagSpecification := tkev20220501.TagSpecification{} if v, ok := tagsMap["resource_type"]; ok { tagSpecification.ResourceType = helper.String(v.(string)) } if v, ok := tagsMap["tags"]; ok { for _, item := range v.([]interface{}) { tagsMap := item.(map[string]interface{}) - tag := tke2.Tag{} + tag := tkev20220501.Tag{} if v, ok := tagsMap["key"]; ok { tag.Key = helper.String(v.(string)) } @@ -677,9 +581,9 @@ func resourceTencentCloudKubernetesNativeNodePoolCreate(d *schema.ResourceData, } if nativeMap, ok := helper.InterfacesHeadMap(d, "native"); ok { - createNativeNodePoolParam := tke2.CreateNativeNodePoolParam{} + createNativeNodePoolParam := tkev20220501.CreateNativeNodePoolParam{} if scalingMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["scaling"]); ok { - machineSetScaling := tke2.MachineSetScaling{} + machineSetScaling := tkev20220501.MachineSetScaling{} if v, ok := scalingMap["min_replicas"]; ok { machineSetScaling.MinReplicas = helper.IntInt64(v.(int)) } @@ -702,22 +606,13 @@ func resourceTencentCloudKubernetesNativeNodePoolCreate(d *schema.ResourceData, createNativeNodePoolParam.InstanceChargeType = helper.String(v.(string)) } if systemDiskMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["system_disk"]); ok { - disk := tke2.Disk{} + disk := tkev20220501.Disk{} if v, ok := systemDiskMap["disk_type"]; ok { disk.DiskType = helper.String(v.(string)) } if v, ok := systemDiskMap["disk_size"]; ok { disk.DiskSize = helper.IntInt64(v.(int)) } - //if v, ok := systemDiskMap["auto_format_and_mount"]; ok { - // disk.AutoFormatAndMount = helper.Bool(v.(bool)) - //} - //if v, ok := systemDiskMap["file_system"]; ok { - // disk.FileSystem = helper.String(v.(string)) - //} - //if v, ok := systemDiskMap["mount_target"]; ok { - // disk.MountTarget = helper.String(v.(string)) - //} createNativeNodePoolParam.SystemDisk = &disk } if v, ok := nativeMap["instance_types"]; ok { @@ -734,55 +629,11 @@ func resourceTencentCloudKubernetesNativeNodePoolCreate(d *schema.ResourceData, createNativeNodePoolParam.SecurityGroupIds = append(createNativeNodePoolParam.SecurityGroupIds, helper.String(securityGroupIds)) } } - //if upgradeSettingsMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["upgrade_settings"]); ok { - // machineUpgradeSettings := tke2.MachineUpgradeSettings{} - // if v, ok := upgradeSettingsMap["auto_upgrade"]; ok { - // machineUpgradeSettings.AutoUpgrade = helper.Bool(v.(bool)) - // } - // if upgradeOptionsMap, ok := helper.ConvertInterfacesHeadToMap(upgradeSettingsMap["upgrade_options"]); ok { - // autoUpgradeOptions := tke2.AutoUpgradeOptions{} - // if v, ok := upgradeOptionsMap["auto_upgrade_start_time"]; ok { - // autoUpgradeOptions.AutoUpgradeStartTime = helper.String(v.(string)) - // } - // if v, ok := upgradeOptionsMap["duration"]; ok { - // autoUpgradeOptions.Duration = helper.String(v.(string)) - // } - // if v, ok := upgradeOptionsMap["weekly_period"]; ok { - // weeklyPeriodSet := v.([]interface{}) - // for i := range weeklyPeriodSet { - // weeklyPeriod := weeklyPeriodSet[i].(string) - // autoUpgradeOptions.WeeklyPeriod = append(autoUpgradeOptions.WeeklyPeriod, helper.String(weeklyPeriod)) - // } - // } - // machineUpgradeSettings.UpgradeOptions = &autoUpgradeOptions - // } - // if v, ok := upgradeSettingsMap["components"]; ok { - // componentsSet := v.([]interface{}) - // for i := range componentsSet { - // components := componentsSet[i].(string) - // machineUpgradeSettings.Components = append(machineUpgradeSettings.Components, helper.String(components)) - // } - // } - // if maxUnavailableMap, ok := helper.ConvertInterfacesHeadToMap(upgradeSettingsMap["max_unavailable"]); ok { - // intOrString := tke2.IntOrString{} - // if v, ok := maxUnavailableMap["type"]; ok { - // intOrString.Type = helper.IntInt64(v.(int)) - // } - // if v, ok := maxUnavailableMap["int_val"]; ok { - // intOrString.IntVal = helper.IntInt64(v.(int)) - // } - // if v, ok := maxUnavailableMap["str_val"]; ok { - // intOrString.StrVal = helper.String(v.(string)) - // } - // machineUpgradeSettings.MaxUnavailable = &intOrString - // } - // createNativeNodePoolParam.UpgradeSettings = &machineUpgradeSettings - //} if v, ok := nativeMap["auto_repair"]; ok { createNativeNodePoolParam.AutoRepair = helper.Bool(v.(bool)) } if instanceChargePrepaidMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["instance_charge_prepaid"]); ok { - instanceChargePrepaid := tke2.InstanceChargePrepaid{} + instanceChargePrepaid := tkev20220501.InstanceChargePrepaid{} if v, ok := instanceChargePrepaidMap["period"]; ok { instanceChargePrepaid.Period = helper.IntUint64(v.(int)) } @@ -792,7 +643,7 @@ func resourceTencentCloudKubernetesNativeNodePoolCreate(d *schema.ResourceData, createNativeNodePoolParam.InstanceChargePrepaid = &instanceChargePrepaid } if managementMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["management"]); ok { - managementConfig := tke2.ManagementConfig{} + managementConfig := tkev20220501.ManagementConfig{} if v, ok := managementMap["nameservers"]; ok { nameserversSet := v.([]interface{}) for i := range nameserversSet { @@ -830,7 +681,7 @@ func resourceTencentCloudKubernetesNativeNodePoolCreate(d *schema.ResourceData, } } if lifecycleMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["lifecycle"]); ok { - lifecycleConfig := tke2.LifecycleConfig{} + lifecycleConfig := tkev20220501.LifecycleConfig{} if v, ok := lifecycleMap["pre_init"]; ok { lifecycleConfig.PreInit = helper.String(v.(string)) } @@ -849,7 +700,7 @@ func resourceTencentCloudKubernetesNativeNodePoolCreate(d *schema.ResourceData, createNativeNodePoolParam.Replicas = helper.IntInt64(v.(int)) } if internetAccessibleMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["internet_accessible"]); ok { - internetAccessible := tke2.InternetAccessible{} + internetAccessible := tkev20220501.InternetAccessible{} if v, ok := internetAccessibleMap["max_bandwidth_out"]; ok { internetAccessible.MaxBandwidthOut = helper.IntInt64(v.(int)) } @@ -864,7 +715,7 @@ func resourceTencentCloudKubernetesNativeNodePoolCreate(d *schema.ResourceData, if v, ok := nativeMap["data_disks"]; ok { for _, item := range v.([]interface{}) { dataDisksMap := item.(map[string]interface{}) - dataDisk := tke2.DataDisk{} + dataDisk := tkev20220501.DataDisk{} if v, ok := dataDisksMap["disk_type"]; ok { dataDisk.DiskType = helper.String(v.(string)) } @@ -911,7 +762,7 @@ func resourceTencentCloudKubernetesNativeNodePoolCreate(d *schema.ResourceData, if v, ok := d.GetOk("annotations"); ok { for _, item := range v.(*schema.Set).List() { annotationsMap := item.(map[string]interface{}) - annotation := tke2.Annotation{} + annotation := tkev20220501.Annotation{} if v, ok := annotationsMap["name"]; ok { annotation.Name = helper.String(v.(string)) } @@ -923,7 +774,7 @@ func resourceTencentCloudKubernetesNativeNodePoolCreate(d *schema.ResourceData, } err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTke2Client().CreateNodePoolWithContext(ctx, request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeV20220501Client().CreateNodePoolWithContext(ctx, request) if e != nil { return tccommon.RetryError(e) } else { @@ -937,23 +788,6 @@ func resourceTencentCloudKubernetesNativeNodePoolCreate(d *schema.ResourceData, return err } - // wait for status ok - service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { - nodePool, errRet := service.DescribeKubernetesNativeNodePoolById(ctx, clusterId, nodePoolId) - if errRet != nil { - return tccommon.RetryError(errRet, tccommon.InternalError) - } - if nodePool != nil && *nodePool.LifeState == "Running" { - return nil - } - log.Printf("[DEBUG]%s api[%s] native node pool status is %s, retry...", logId, request.GetAction(), *nodePool.LifeState) - return resource.RetryableError(fmt.Errorf("native node pool status is %s, retry...", *nodePool.LifeState)) - }) - if err != nil { - return err - } - nodePoolId = *response.Response.NodePoolId d.SetId(strings.Join([]string{clusterId, nodePoolId}, tccommon.FILED_SP)) @@ -990,7 +824,6 @@ func resourceTencentCloudKubernetesNativeNodePoolRead(d *schema.ResourceData, me log.Printf("[WARN]%s resource `kubernetes_native_node_pool` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) return nil } - tagsList := make([]map[string]interface{}, 0, len(respData.Tags)) if respData.Tags != nil { for _, tags := range respData.Tags { @@ -1119,56 +952,6 @@ func resourceTencentCloudKubernetesNativeNodePoolRead(d *schema.ResourceData, me nativeMap["security_group_ids"] = respData.Native.SecurityGroupIds } - //upgradeSettingsMap := map[string]interface{}{} - - //if respData.Native.UpgradeSettings != nil { - // if respData.Native.UpgradeSettings.AutoUpgrade != nil { - // upgradeSettingsMap["auto_upgrade"] = respData.Native.UpgradeSettings.AutoUpgrade - // } - // - // upgradeOptionsMap := map[string]interface{}{} - // - // if respData.Native.UpgradeSettings.UpgradeOptions != nil { - // if respData.Native.UpgradeSettings.UpgradeOptions.AutoUpgradeStartTime != nil { - // upgradeOptionsMap["auto_upgrade_start_time"] = respData.Native.UpgradeSettings.UpgradeOptions.AutoUpgradeStartTime - // } - // - // if respData.Native.UpgradeSettings.UpgradeOptions.Duration != nil { - // upgradeOptionsMap["duration"] = respData.Native.UpgradeSettings.UpgradeOptions.Duration - // } - // - // if respData.Native.UpgradeSettings.UpgradeOptions.WeeklyPeriod != nil { - // upgradeOptionsMap["weekly_period"] = respData.Native.UpgradeSettings.UpgradeOptions.WeeklyPeriod - // } - // - // upgradeSettingsMap["upgrade_options"] = []interface{}{upgradeOptionsMap} - // } - // - // if respData.Native.UpgradeSettings.Components != nil { - // upgradeSettingsMap["components"] = respData.Native.UpgradeSettings.Components - // } - // - // maxUnavailableMap := map[string]interface{}{} - // - // if respData.Native.UpgradeSettings.MaxUnavailable != nil { - // if respData.Native.UpgradeSettings.MaxUnavailable.Type != nil { - // maxUnavailableMap["type"] = respData.Native.UpgradeSettings.MaxUnavailable.Type - // } - // - // if respData.Native.UpgradeSettings.MaxUnavailable.IntVal != nil { - // maxUnavailableMap["int_val"] = respData.Native.UpgradeSettings.MaxUnavailable.IntVal - // } - // - // if respData.Native.UpgradeSettings.MaxUnavailable.StrVal != nil { - // maxUnavailableMap["str_val"] = respData.Native.UpgradeSettings.MaxUnavailable.StrVal - // } - // - // upgradeSettingsMap["max_unavailable"] = []interface{}{maxUnavailableMap} - // } - // - // nativeMap["upgrade_settings"] = []interface{}{upgradeSettingsMap} - //} - if respData.Native.AutoRepair != nil { nativeMap["auto_repair"] = respData.Native.AutoRepair } @@ -1202,18 +985,6 @@ func resourceTencentCloudKubernetesNativeNodePoolRead(d *schema.ResourceData, me systemDiskMap["disk_size"] = respData.Native.SystemDisk.DiskSize } - //if respData.Native.SystemDisk.AutoFormatAndMount != nil { - // systemDiskMap["auto_format_and_mount"] = respData.Native.SystemDisk.AutoFormatAndMount - //} - // - //if respData.Native.SystemDisk.FileSystem != nil { - // systemDiskMap["file_system"] = respData.Native.SystemDisk.FileSystem - //} - // - //if respData.Native.SystemDisk.MountTarget != nil { - // systemDiskMap["mount_target"] = respData.Native.SystemDisk.MountTarget - //} - nativeMap["system_disk"] = []interface{}{systemDiskMap} } @@ -1255,13 +1026,11 @@ func resourceTencentCloudKubernetesNativeNodePoolRead(d *schema.ResourceData, me if respData.Native.Lifecycle != nil { if respData.Native.Lifecycle.PreInit != nil { - lifecycleMap["pre_init"] = base64.StdEncoding.EncodeToString([]byte(*respData.Native.Lifecycle.PreInit)) - //lifecycleMap["pre_init"] = respData.Native.Lifecycle.PreInit + lifecycleMap["pre_init"] = respData.Native.Lifecycle.PreInit } if respData.Native.Lifecycle.PostInit != nil { - lifecycleMap["post_init"] = base64.StdEncoding.EncodeToString([]byte(*respData.Native.Lifecycle.PostInit)) - //lifecycleMap["post_init"] = respData.Native.Lifecycle.PostInit + lifecycleMap["post_init"] = respData.Native.Lifecycle.PostInit } nativeMap["lifecycle"] = []interface{}{lifecycleMap} @@ -1359,10 +1128,6 @@ func resourceTencentCloudKubernetesNativeNodePoolRead(d *schema.ResourceData, me for _, annotations := range respData.Annotations { annotationsMap := map[string]interface{}{} - if annotations.Name != nil && tkeNativeNodePoolAnnotationsMap[*annotations.Name] != "" { - continue - } - if annotations.Name != nil { annotationsMap["name"] = annotations.Name } @@ -1411,11 +1176,11 @@ func resourceTencentCloudKubernetesNativeNodePoolUpdate(d *schema.ResourceData, } if needChange { - request := tke2.NewModifyNodePoolRequest() + request := tkev20220501.NewModifyNodePoolRequest() - request.ClusterId = &clusterId + request.ClusterId = helper.String(clusterId) - request.NodePoolId = &nodePoolId + request.NodePoolId = helper.String(nodePoolId) if v, ok := d.GetOk("name"); ok { request.Name = helper.String(v.(string)) @@ -1424,7 +1189,7 @@ func resourceTencentCloudKubernetesNativeNodePoolUpdate(d *schema.ResourceData, if v, ok := d.GetOk("labels"); ok { for _, item := range v.([]interface{}) { labelsMap := item.(map[string]interface{}) - label := tke2.Label{} + label := tkev20220501.Label{} if v, ok := labelsMap["name"]; ok { label.Name = helper.String(v.(string)) } @@ -1438,7 +1203,7 @@ func resourceTencentCloudKubernetesNativeNodePoolUpdate(d *schema.ResourceData, if v, ok := d.GetOk("taints"); ok { for _, item := range v.([]interface{}) { taintsMap := item.(map[string]interface{}) - taint := tke2.Taint{} + taint := tkev20220501.Taint{} if v, ok := taintsMap["key"]; ok { taint.Key = helper.String(v.(string)) } @@ -1455,14 +1220,14 @@ func resourceTencentCloudKubernetesNativeNodePoolUpdate(d *schema.ResourceData, if v, ok := d.GetOk("tags"); ok { for _, item := range v.([]interface{}) { tagsMap := item.(map[string]interface{}) - tagSpecification := tke2.TagSpecification{} + tagSpecification := tkev20220501.TagSpecification{} if v, ok := tagsMap["resource_type"]; ok { tagSpecification.ResourceType = helper.String(v.(string)) } if v, ok := tagsMap["tags"]; ok { for _, item := range v.([]interface{}) { tagsMap := item.(map[string]interface{}) - tag := tke2.Tag{} + tag := tkev20220501.Tag{} if v, ok := tagsMap["key"]; ok { tag.Key = helper.String(v.(string)) } @@ -1485,9 +1250,9 @@ func resourceTencentCloudKubernetesNativeNodePoolUpdate(d *schema.ResourceData, } if nativeMap, ok := helper.InterfacesHeadMap(d, "native"); ok { - updateNativeNodePoolParam := tke2.UpdateNativeNodePoolParam{} + updateNativeNodePoolParam := tkev20220501.UpdateNativeNodePoolParam{} if scalingMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["scaling"]); ok { - machineSetScaling := tke2.MachineSetScaling{} + machineSetScaling := tkev20220501.MachineSetScaling{} if v, ok := scalingMap["min_replicas"]; ok { machineSetScaling.MinReplicas = helper.IntInt64(v.(int)) } @@ -1513,50 +1278,6 @@ func resourceTencentCloudKubernetesNativeNodePoolUpdate(d *schema.ResourceData, updateNativeNodePoolParam.SecurityGroupIds = append(updateNativeNodePoolParam.SecurityGroupIds, helper.String(securityGroupIds)) } } - //if upgradeSettingsMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["upgrade_settings"]); ok { - // machineUpgradeSettings := tke2.MachineUpgradeSettings{} - // if v, ok := upgradeSettingsMap["auto_upgrade"]; ok { - // machineUpgradeSettings.AutoUpgrade = helper.Bool(v.(bool)) - // } - // if upgradeOptionsMap, ok := helper.ConvertInterfacesHeadToMap(upgradeSettingsMap["upgrade_options"]); ok { - // autoUpgradeOptions := tke2.AutoUpgradeOptions{} - // if v, ok := upgradeOptionsMap["auto_upgrade_start_time"]; ok { - // autoUpgradeOptions.AutoUpgradeStartTime = helper.String(v.(string)) - // } - // if v, ok := upgradeOptionsMap["duration"]; ok { - // autoUpgradeOptions.Duration = helper.String(v.(string)) - // } - // if v, ok := upgradeOptionsMap["weekly_period"]; ok { - // weeklyPeriodSet := v.([]interface{}) - // for i := range weeklyPeriodSet { - // weeklyPeriod := weeklyPeriodSet[i].(string) - // autoUpgradeOptions.WeeklyPeriod = append(autoUpgradeOptions.WeeklyPeriod, helper.String(weeklyPeriod)) - // } - // } - // machineUpgradeSettings.UpgradeOptions = &autoUpgradeOptions - // } - // if v, ok := upgradeSettingsMap["components"]; ok { - // componentsSet := v.([]interface{}) - // for i := range componentsSet { - // components := componentsSet[i].(string) - // machineUpgradeSettings.Components = append(machineUpgradeSettings.Components, helper.String(components)) - // } - // } - // if maxUnavailableMap, ok := helper.ConvertInterfacesHeadToMap(upgradeSettingsMap["max_unavailable"]); ok { - // intOrString := tke2.IntOrString{} - // if v, ok := maxUnavailableMap["type"]; ok { - // intOrString.Type = helper.IntInt64(v.(int)) - // } - // if v, ok := maxUnavailableMap["int_val"]; ok { - // intOrString.IntVal = helper.IntInt64(v.(int)) - // } - // if v, ok := maxUnavailableMap["str_val"]; ok { - // intOrString.StrVal = helper.String(v.(string)) - // } - // machineUpgradeSettings.MaxUnavailable = &intOrString - // } - // updateNativeNodePoolParam.UpgradeSettings = &machineUpgradeSettings - //} if v, ok := nativeMap["auto_repair"]; ok { updateNativeNodePoolParam.AutoRepair = helper.Bool(v.(bool)) } @@ -1564,7 +1285,7 @@ func resourceTencentCloudKubernetesNativeNodePoolUpdate(d *schema.ResourceData, updateNativeNodePoolParam.InstanceChargeType = helper.String(v.(string)) } if instanceChargePrepaidMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["instance_charge_prepaid"]); ok { - instanceChargePrepaid := tke2.InstanceChargePrepaid{} + instanceChargePrepaid := tkev20220501.InstanceChargePrepaid{} if v, ok := instanceChargePrepaidMap["period"]; ok { instanceChargePrepaid.Period = helper.IntUint64(v.(int)) } @@ -1574,26 +1295,17 @@ func resourceTencentCloudKubernetesNativeNodePoolUpdate(d *schema.ResourceData, updateNativeNodePoolParam.InstanceChargePrepaid = &instanceChargePrepaid } if systemDiskMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["system_disk"]); ok { - disk := tke2.Disk{} + disk := tkev20220501.Disk{} if v, ok := systemDiskMap["disk_type"]; ok { disk.DiskType = helper.String(v.(string)) } if v, ok := systemDiskMap["disk_size"]; ok { disk.DiskSize = helper.IntInt64(v.(int)) } - //if v, ok := systemDiskMap["auto_format_and_mount"]; ok { - // disk.AutoFormatAndMount = helper.Bool(v.(bool)) - //} - //if v, ok := systemDiskMap["file_system"]; ok { - // disk.FileSystem = helper.String(v.(string)) - //} - //if v, ok := systemDiskMap["mount_target"]; ok { - // disk.MountTarget = helper.String(v.(string)) - //} updateNativeNodePoolParam.SystemDisk = &disk } if managementMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["management"]); ok { - managementConfig := tke2.ManagementConfig{} + managementConfig := tkev20220501.ManagementConfig{} if v, ok := managementMap["nameservers"]; ok { nameserversSet := v.([]interface{}) for i := range nameserversSet { @@ -1631,7 +1343,7 @@ func resourceTencentCloudKubernetesNativeNodePoolUpdate(d *schema.ResourceData, } } if lifecycleMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["lifecycle"]); ok { - lifecycleConfig := tke2.LifecycleConfig{} + lifecycleConfig := tkev20220501.LifecycleConfig{} if v, ok := lifecycleMap["pre_init"]; ok { lifecycleConfig.PreInit = helper.String(v.(string)) } @@ -1640,6 +1352,9 @@ func resourceTencentCloudKubernetesNativeNodePoolUpdate(d *schema.ResourceData, } updateNativeNodePoolParam.Lifecycle = &lifecycleConfig } + if v, ok := nativeMap["runtime_root_dir"]; ok { + updateNativeNodePoolParam.RuntimeRootDir = helper.String(v.(string)) + } if v, ok := nativeMap["enable_autoscaling"]; ok { updateNativeNodePoolParam.EnableAutoscaling = helper.Bool(v.(bool)) } @@ -1656,7 +1371,7 @@ func resourceTencentCloudKubernetesNativeNodePoolUpdate(d *schema.ResourceData, if v, ok := nativeMap["data_disks"]; ok { for _, item := range v.([]interface{}) { dataDisksMap := item.(map[string]interface{}) - dataDisk := tke2.DataDisk{} + dataDisk := tkev20220501.DataDisk{} if v, ok := dataDisksMap["disk_type"]; ok { dataDisk.DiskType = helper.String(v.(string)) } @@ -1703,7 +1418,7 @@ func resourceTencentCloudKubernetesNativeNodePoolUpdate(d *schema.ResourceData, if v, ok := d.GetOk("annotations"); ok { for _, item := range v.(*schema.Set).List() { annotationsMap := item.(map[string]interface{}) - annotation := tke2.Annotation{} + annotation := tkev20220501.Annotation{} if v, ok := annotationsMap["name"]; ok { annotation.Name = helper.String(v.(string)) } @@ -1715,7 +1430,7 @@ func resourceTencentCloudKubernetesNativeNodePoolUpdate(d *schema.ResourceData, } err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTke2Client().ModifyNodePoolWithContext(ctx, request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeV20220501Client().ModifyNodePoolWithContext(ctx, request) if e != nil { return tccommon.RetryError(e) } else { @@ -1747,16 +1462,16 @@ func resourceTencentCloudKubernetesNativeNodePoolDelete(d *schema.ResourceData, nodePoolId := idSplit[1] var ( - request = tke2.NewDeleteNodePoolRequest() - response = tke2.NewDeleteNodePoolResponse() + request = tkev20220501.NewDeleteNodePoolRequest() + response = tkev20220501.NewDeleteNodePoolResponse() ) - request.ClusterId = &clusterId + request.ClusterId = helper.String(clusterId) - request.NodePoolId = &nodePoolId + request.NodePoolId = helper.String(nodePoolId) err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTke2Client().DeleteNodePoolWithContext(ctx, request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeV20220501Client().DeleteNodePoolWithContext(ctx, request) if e != nil { return tccommon.RetryError(e) } else { @@ -1770,24 +1485,6 @@ func resourceTencentCloudKubernetesNativeNodePoolDelete(d *schema.ResourceData, return err } - // wait for delete ok - service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { - respData, errRet := service.DescribeKubernetesNativeNodePoolById(ctx, clusterId, nodePoolId) - if errRet != nil { - errCode := errRet.(*sdkErrors.TencentCloudSDKError).Code - if strings.Contains(errCode, "InternalError") { - return nil - } - return tccommon.RetryError(errRet, tccommon.InternalError) - } - if respData != nil && *respData.LifeState == "Deleting" { - log.Printf("[DEBUG]%s api[%s] native node pool %s still alive and status is %s", logId, request.GetAction(), nodePoolId, *respData.LifeState) - return resource.RetryableError(fmt.Errorf("native node pool %s still alive and status is %s", nodePoolId, *respData.LifeState)) - } - return nil - }) - _ = response return nil } diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_test.go index 9c4bfd04e0..2930c60b1a 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_test.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_test.go @@ -4,6 +4,7 @@ import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools.go deleted file mode 100644 index c656aab0a1..0000000000 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools.go +++ /dev/null @@ -1,1490 +0,0 @@ -// Code generated by iacg; DO NOT EDIT. -package tke - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tkev20220501 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20220501" - - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func ResourceTencentCloudKubernetesNativeNodePools() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudKubernetesNativeNodePoolsCreate, - Read: resourceTencentCloudKubernetesNativeNodePoolsRead, - Update: resourceTencentCloudKubernetesNativeNodePoolsUpdate, - Delete: resourceTencentCloudKubernetesNativeNodePoolsDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "cluster_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "ID of the cluster.", - }, - - "name": { - Type: schema.TypeString, - Required: true, - Description: "Node pool name.", - }, - - "type": { - Type: schema.TypeString, - Required: true, - Description: "Node pool type. Optional value is `Native`.", - }, - - "labels": { - Type: schema.TypeList, - Optional: true, - Description: "Node Labels.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "name": { - Type: schema.TypeString, - Required: true, - Description: "Name in the map table.", - }, - "value": { - Type: schema.TypeString, - Required: true, - Description: "Value in map table.", - }, - }, - }, - }, - - "taints": { - Type: schema.TypeList, - Optional: true, - Description: "Node taint.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "key": { - Type: schema.TypeString, - Optional: true, - Description: "Key of the taint.", - }, - "value": { - Type: schema.TypeString, - Optional: true, - Description: "Value of the taint.", - }, - "effect": { - Type: schema.TypeString, - Optional: true, - Description: "Effect of the taint.", - }, - }, - }, - }, - - "tags": { - Type: schema.TypeList, - Optional: true, - Description: "Node tags.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "resource_type": { - Type: schema.TypeString, - Optional: true, - Description: "The resource type bound to the label.", - }, - "tags": { - Type: schema.TypeList, - Optional: true, - Description: "Tag pair list.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "key": { - Type: schema.TypeString, - Optional: true, - Description: "Tag Key.", - }, - "value": { - Type: schema.TypeString, - Optional: true, - Description: "Tag Value.", - }, - }, - }, - }, - }, - }, - }, - - "deletion_protection": { - Type: schema.TypeBool, - Optional: true, - Computed: true, - Description: "Whether to enable deletion protection.", - }, - - "unschedulable": { - Type: schema.TypeBool, - Optional: true, - Computed: true, - Description: "Whether the node is not schedulable by default. The native node is not aware of it and passes false by default.", - }, - - "native": { - Type: schema.TypeList, - Required: true, - MaxItems: 1, - Description: "Native node pool creation parameters.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "scaling": { - Type: schema.TypeList, - Optional: true, - Computed: true, - MaxItems: 1, - Description: "Node pool scaling configuration.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "min_replicas": { - Type: schema.TypeInt, - Optional: true, - Computed: true, - Description: "Minimum number of replicas in node pool.", - }, - "max_replicas": { - Type: schema.TypeInt, - Optional: true, - Computed: true, - Description: "Maximum number of replicas in node pool.", - }, - "create_policy": { - Type: schema.TypeString, - Optional: true, - Computed: true, - Description: "Node pool expansion strategy. `ZoneEquality`: multiple availability zones are broken up; `ZonePriority`: the preferred availability zone takes precedence.", - }, - }, - }, - }, - "subnet_ids": { - Type: schema.TypeList, - Required: true, - Description: "Subnet list.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "instance_charge_type": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Node billing type. `PREPAID` is a yearly and monthly subscription, `POSTPAID_BY_HOUR` is a pay-as-you-go plan. The default is `POSTPAID_BY_HOUR`.", - }, - "system_disk": { - Type: schema.TypeList, - Required: true, - ForceNew: true, - MaxItems: 1, - Description: "System disk configuration.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "disk_type": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Cloud disk type. Valid values: `CLOUD_PREMIUM`: Premium Cloud Storage, `CLOUD_SSD`: cloud SSD disk, `CLOUD_BSSD`: Basic SSD, `CLOUD_HSSD`: Enhanced SSD.", - }, - "disk_size": { - Type: schema.TypeInt, - Required: true, - ForceNew: true, - Description: "Cloud disk size (G).", - }, - }, - }, - }, - "instance_types": { - Type: schema.TypeList, - Required: true, - Description: "Model list.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "security_group_ids": { - Type: schema.TypeList, - Required: true, - Description: "Security group list.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "auto_repair": { - Type: schema.TypeBool, - Optional: true, - Description: "Whether to enable self-healing ability.", - }, - "instance_charge_prepaid": { - Type: schema.TypeList, - Optional: true, - Computed: true, - ForceNew: true, - MaxItems: 1, - Description: "Billing configuration for yearly and monthly models.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "period": { - Type: schema.TypeInt, - Required: true, - ForceNew: true, - Description: "Postpaid billing cycle, unit (month): 1, 2, 3, 4, 5,, 6, 7, 8, 9, 10, 11, 12, 24, 36, 48, 60.", - }, - "renew_flag": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, - Description: "Prepaid renewal method:\n - `NOTIFY_AND_AUTO_RENEW`: Notify users of expiration and automatically renew (default).\n - `NOTIFY_AND_MANUAL_RENEW`: Notify users of expiration, but do not automatically renew.\n - `DISABLE_NOTIFY_AND_MANUAL_RENEW`: Do not notify users of expiration and do not automatically renew.", - }, - }, - }, - }, - "management": { - Type: schema.TypeList, - Optional: true, - Computed: true, - MaxItems: 1, - Description: "Node pool management parameter settings.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "nameservers": { - Type: schema.TypeList, - Optional: true, - Computed: true, - Description: "Dns configuration.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "hosts": { - Type: schema.TypeList, - Optional: true, - Description: "Hosts configuration.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "kernel_args": { - Type: schema.TypeList, - Optional: true, - Description: "Kernel parameter configuration.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - }, - }, - "health_check_policy_name": { - Type: schema.TypeString, - Optional: true, - Description: "Fault self-healing rule name.", - }, - "host_name_pattern": { - Type: schema.TypeString, - Optional: true, - Description: "Native node pool hostName pattern string.", - }, - "kubelet_args": { - Type: schema.TypeList, - Optional: true, - Description: "Kubelet custom parameters.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - "lifecycle": { - Type: schema.TypeList, - Optional: true, - Computed: true, - MaxItems: 1, - Description: "Predefined scripts.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "pre_init": { - Type: schema.TypeString, - Optional: true, - Description: "Custom script before node initialization.", - }, - "post_init": { - Type: schema.TypeString, - Optional: true, - Description: "Custom script after node initialization.", - }, - }, - }, - }, - "runtime_root_dir": { - Type: schema.TypeString, - Optional: true, - Computed: true, - ForceNew: true, - Description: "Runtime root directory.", - }, - "enable_autoscaling": { - Type: schema.TypeBool, - Optional: true, - Description: "Whether to enable elastic scaling.", - }, - "replicas": { - Type: schema.TypeInt, - Optional: true, - Computed: true, - Description: "Desired number of nodes.", - }, - "internet_accessible": { - Type: schema.TypeList, - Optional: true, - Computed: true, - ForceNew: true, - MaxItems: 1, - Description: "Public network bandwidth settings.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "max_bandwidth_out": { - Type: schema.TypeInt, - Required: true, - ForceNew: true, - Description: "Maximum bandwidth output. Note: When chargeType is `TRAFFIC_POSTPAID_BY_HOUR` and `BANDWIDTH_POSTPAID_BY_HOUR`, the valid range is 1~100. When chargeType is `BANDWIDTH_PACKAG`, the valid range is 1~2000.", - ValidateFunc: tccommon.ValidateIntegerMin(1), - }, - "charge_type": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Network billing method. Optional value is `TRAFFIC_POSTPAID_BY_HOUR`, `BANDWIDTH_POSTPAID_BY_HOUR` and `BANDWIDTH_PACKAGE`.", - }, - "bandwidth_package_id": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, - Description: "Bandwidth package ID. Note: When ChargeType is BANDWIDTH_PACKAG, the value cannot be empty; otherwise, the value must be empty.", - }, - }, - }, - }, - "data_disks": { - Type: schema.TypeList, - Optional: true, - Description: "Native node pool data disk list.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "disk_type": { - Type: schema.TypeString, - Required: true, - Description: "Cloud disk type. Valid values: `CLOUD_PREMIUM`: Premium Cloud Storage, `CLOUD_SSD`: cloud SSD disk, `CLOUD_BSSD`: Basic SSD, `CLOUD_HSSD`: Enhanced SSD, `CLOUD_TSSD`: Tremendous SSD, `LOCAL_NVME`: local NVME disk.", - }, - "file_system": { - Type: schema.TypeString, - Optional: true, - Description: "File system (ext3/ext4/xfs).", - }, - "disk_size": { - Type: schema.TypeInt, - Required: true, - Description: "Cloud disk size (G).", - }, - "auto_format_and_mount": { - Type: schema.TypeBool, - Required: true, - Description: "Whether to automatically format the disk and mount it.", - }, - "disk_partition": { - Type: schema.TypeString, - Optional: true, - Description: "Mount device name or partition name.", - }, - "mount_target": { - Type: schema.TypeString, - Optional: true, - Description: "Mount directory.", - }, - "encrypt": { - Type: schema.TypeString, - Optional: true, - Description: "Pass in this parameter to create an encrypted cloud disk. The value is fixed to `ENCRYPT`.", - }, - "kms_key_id": { - Type: schema.TypeString, - Optional: true, - Description: "Customize the key when purchasing an encrypted disk. When this parameter is passed in, the Encrypt parameter is not empty.", - }, - "snapshot_id": { - Type: schema.TypeString, - Optional: true, - Description: "Snapshot ID. If passed in, the cloud disk will be created based on this snapshot. The snapshot type must be a data disk snapshot.", - }, - "throughput_performance": { - Type: schema.TypeInt, - Optional: true, - Description: "Cloud disk performance, unit: MB/s. Use this parameter to purchase additional performance for the cloud disk.", - }, - }, - }, - }, - "key_ids": { - Type: schema.TypeList, - Optional: true, - Description: "Node pool ssh public key id array.", - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, - }, - }, - }, - - "annotations": { - Type: schema.TypeSet, - Optional: true, - Computed: true, - Description: "Node Annotation List.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "name": { - Type: schema.TypeString, - Required: true, - Description: "Name in the map table.", - }, - "value": { - Type: schema.TypeString, - Required: true, - Description: "Value in the map table.", - }, - }, - }, - }, - - "life_state": { - Type: schema.TypeString, - Computed: true, - Description: "Node pool status.", - }, - - "created_at": { - Type: schema.TypeString, - Computed: true, - Description: "creation time.", - }, - }, - } -} - -func resourceTencentCloudKubernetesNativeNodePoolsCreate(d *schema.ResourceData, meta interface{}) error { - defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_native_node_pools.create")() - defer tccommon.InconsistentCheck(d, meta)() - - logId := tccommon.GetLogId(tccommon.ContextNil) - - ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - - var ( - clusterId string - nodePoolId string - ) - var ( - request = tkev20220501.NewCreateNodePoolRequest() - response = tkev20220501.NewCreateNodePoolResponse() - ) - - if v, ok := d.GetOk("cluster_id"); ok { - clusterId = v.(string) - } - - request.ClusterId = helper.String(clusterId) - - if v, ok := d.GetOk("name"); ok { - request.Name = helper.String(v.(string)) - } - - if v, ok := d.GetOk("type"); ok { - request.Type = helper.String(v.(string)) - } - - if v, ok := d.GetOk("labels"); ok { - for _, item := range v.([]interface{}) { - labelsMap := item.(map[string]interface{}) - label := tkev20220501.Label{} - if v, ok := labelsMap["name"]; ok { - label.Name = helper.String(v.(string)) - } - if v, ok := labelsMap["value"]; ok { - label.Value = helper.String(v.(string)) - } - request.Labels = append(request.Labels, &label) - } - } - - if v, ok := d.GetOk("taints"); ok { - for _, item := range v.([]interface{}) { - taintsMap := item.(map[string]interface{}) - taint := tkev20220501.Taint{} - if v, ok := taintsMap["key"]; ok { - taint.Key = helper.String(v.(string)) - } - if v, ok := taintsMap["value"]; ok { - taint.Value = helper.String(v.(string)) - } - if v, ok := taintsMap["effect"]; ok { - taint.Effect = helper.String(v.(string)) - } - request.Taints = append(request.Taints, &taint) - } - } - - if v, ok := d.GetOk("tags"); ok { - for _, item := range v.([]interface{}) { - tagsMap := item.(map[string]interface{}) - tagSpecification := tkev20220501.TagSpecification{} - if v, ok := tagsMap["resource_type"]; ok { - tagSpecification.ResourceType = helper.String(v.(string)) - } - if v, ok := tagsMap["tags"]; ok { - for _, item := range v.([]interface{}) { - tagsMap := item.(map[string]interface{}) - tag := tkev20220501.Tag{} - if v, ok := tagsMap["key"]; ok { - tag.Key = helper.String(v.(string)) - } - if v, ok := tagsMap["value"]; ok { - tag.Value = helper.String(v.(string)) - } - tagSpecification.Tags = append(tagSpecification.Tags, &tag) - } - } - request.Tags = append(request.Tags, &tagSpecification) - } - } - - if v, ok := d.GetOkExists("deletion_protection"); ok { - request.DeletionProtection = helper.Bool(v.(bool)) - } - - if v, ok := d.GetOkExists("unschedulable"); ok { - request.Unschedulable = helper.Bool(v.(bool)) - } - - if nativeMap, ok := helper.InterfacesHeadMap(d, "native"); ok { - createNativeNodePoolParam := tkev20220501.CreateNativeNodePoolParam{} - if scalingMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["scaling"]); ok { - machineSetScaling := tkev20220501.MachineSetScaling{} - if v, ok := scalingMap["min_replicas"]; ok { - machineSetScaling.MinReplicas = helper.IntInt64(v.(int)) - } - if v, ok := scalingMap["max_replicas"]; ok { - machineSetScaling.MaxReplicas = helper.IntInt64(v.(int)) - } - if v, ok := scalingMap["create_policy"]; ok { - machineSetScaling.CreatePolicy = helper.String(v.(string)) - } - createNativeNodePoolParam.Scaling = &machineSetScaling - } - if v, ok := nativeMap["subnet_ids"]; ok { - subnetIdsSet := v.([]interface{}) - for i := range subnetIdsSet { - subnetIds := subnetIdsSet[i].(string) - createNativeNodePoolParam.SubnetIds = append(createNativeNodePoolParam.SubnetIds, helper.String(subnetIds)) - } - } - if v, ok := nativeMap["instance_charge_type"]; ok { - createNativeNodePoolParam.InstanceChargeType = helper.String(v.(string)) - } - if systemDiskMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["system_disk"]); ok { - disk := tkev20220501.Disk{} - if v, ok := systemDiskMap["disk_type"]; ok { - disk.DiskType = helper.String(v.(string)) - } - if v, ok := systemDiskMap["disk_size"]; ok { - disk.DiskSize = helper.IntInt64(v.(int)) - } - createNativeNodePoolParam.SystemDisk = &disk - } - if v, ok := nativeMap["instance_types"]; ok { - instanceTypesSet := v.([]interface{}) - for i := range instanceTypesSet { - instanceTypes := instanceTypesSet[i].(string) - createNativeNodePoolParam.InstanceTypes = append(createNativeNodePoolParam.InstanceTypes, helper.String(instanceTypes)) - } - } - if v, ok := nativeMap["security_group_ids"]; ok { - securityGroupIdsSet := v.([]interface{}) - for i := range securityGroupIdsSet { - securityGroupIds := securityGroupIdsSet[i].(string) - createNativeNodePoolParam.SecurityGroupIds = append(createNativeNodePoolParam.SecurityGroupIds, helper.String(securityGroupIds)) - } - } - if v, ok := nativeMap["auto_repair"]; ok { - createNativeNodePoolParam.AutoRepair = helper.Bool(v.(bool)) - } - if instanceChargePrepaidMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["instance_charge_prepaid"]); ok { - instanceChargePrepaid := tkev20220501.InstanceChargePrepaid{} - if v, ok := instanceChargePrepaidMap["period"]; ok { - instanceChargePrepaid.Period = helper.IntUint64(v.(int)) - } - if v, ok := instanceChargePrepaidMap["renew_flag"]; ok { - instanceChargePrepaid.RenewFlag = helper.String(v.(string)) - } - createNativeNodePoolParam.InstanceChargePrepaid = &instanceChargePrepaid - } - if managementMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["management"]); ok { - managementConfig := tkev20220501.ManagementConfig{} - if v, ok := managementMap["nameservers"]; ok { - nameserversSet := v.([]interface{}) - for i := range nameserversSet { - nameservers := nameserversSet[i].(string) - managementConfig.Nameservers = append(managementConfig.Nameservers, helper.String(nameservers)) - } - } - if v, ok := managementMap["hosts"]; ok { - hostsSet := v.([]interface{}) - for i := range hostsSet { - hosts := hostsSet[i].(string) - managementConfig.Hosts = append(managementConfig.Hosts, helper.String(hosts)) - } - } - if v, ok := managementMap["kernel_args"]; ok { - kernelArgsSet := v.([]interface{}) - for i := range kernelArgsSet { - kernelArgs := kernelArgsSet[i].(string) - managementConfig.KernelArgs = append(managementConfig.KernelArgs, helper.String(kernelArgs)) - } - } - createNativeNodePoolParam.Management = &managementConfig - } - if v, ok := nativeMap["health_check_policy_name"]; ok { - createNativeNodePoolParam.HealthCheckPolicyName = helper.String(v.(string)) - } - if v, ok := nativeMap["host_name_pattern"]; ok { - createNativeNodePoolParam.HostNamePattern = helper.String(v.(string)) - } - if v, ok := nativeMap["kubelet_args"]; ok { - kubeletArgsSet := v.([]interface{}) - for i := range kubeletArgsSet { - kubeletArgs := kubeletArgsSet[i].(string) - createNativeNodePoolParam.KubeletArgs = append(createNativeNodePoolParam.KubeletArgs, helper.String(kubeletArgs)) - } - } - if lifecycleMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["lifecycle"]); ok { - lifecycleConfig := tkev20220501.LifecycleConfig{} - if v, ok := lifecycleMap["pre_init"]; ok { - lifecycleConfig.PreInit = helper.String(v.(string)) - } - if v, ok := lifecycleMap["post_init"]; ok { - lifecycleConfig.PostInit = helper.String(v.(string)) - } - createNativeNodePoolParam.Lifecycle = &lifecycleConfig - } - if v, ok := nativeMap["runtime_root_dir"]; ok { - createNativeNodePoolParam.RuntimeRootDir = helper.String(v.(string)) - } - if v, ok := nativeMap["enable_autoscaling"]; ok { - createNativeNodePoolParam.EnableAutoscaling = helper.Bool(v.(bool)) - } - if v, ok := nativeMap["replicas"]; ok { - createNativeNodePoolParam.Replicas = helper.IntInt64(v.(int)) - } - if internetAccessibleMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["internet_accessible"]); ok { - internetAccessible := tkev20220501.InternetAccessible{} - if v, ok := internetAccessibleMap["max_bandwidth_out"]; ok { - internetAccessible.MaxBandwidthOut = helper.IntInt64(v.(int)) - } - if v, ok := internetAccessibleMap["charge_type"]; ok { - internetAccessible.ChargeType = helper.String(v.(string)) - } - if v, ok := internetAccessibleMap["bandwidth_package_id"]; ok { - internetAccessible.BandwidthPackageId = helper.String(v.(string)) - } - createNativeNodePoolParam.InternetAccessible = &internetAccessible - } - if v, ok := nativeMap["data_disks"]; ok { - for _, item := range v.([]interface{}) { - dataDisksMap := item.(map[string]interface{}) - dataDisk := tkev20220501.DataDisk{} - if v, ok := dataDisksMap["disk_type"]; ok { - dataDisk.DiskType = helper.String(v.(string)) - } - if v, ok := dataDisksMap["file_system"]; ok { - dataDisk.FileSystem = helper.String(v.(string)) - } - if v, ok := dataDisksMap["disk_size"]; ok { - dataDisk.DiskSize = helper.IntInt64(v.(int)) - } - if v, ok := dataDisksMap["auto_format_and_mount"]; ok { - dataDisk.AutoFormatAndMount = helper.Bool(v.(bool)) - } - if v, ok := dataDisksMap["disk_partition"]; ok { - dataDisk.DiskPartition = helper.String(v.(string)) - } - if v, ok := dataDisksMap["mount_target"]; ok { - dataDisk.MountTarget = helper.String(v.(string)) - } - if v, ok := dataDisksMap["encrypt"]; ok { - dataDisk.Encrypt = helper.String(v.(string)) - } - if v, ok := dataDisksMap["kms_key_id"]; ok { - dataDisk.KmsKeyId = helper.String(v.(string)) - } - if v, ok := dataDisksMap["snapshot_id"]; ok { - dataDisk.SnapshotId = helper.String(v.(string)) - } - if v, ok := dataDisksMap["throughput_performance"]; ok { - dataDisk.ThroughputPerformance = helper.IntUint64(v.(int)) - } - createNativeNodePoolParam.DataDisks = append(createNativeNodePoolParam.DataDisks, &dataDisk) - } - } - if v, ok := nativeMap["key_ids"]; ok { - keyIdsSet := v.([]interface{}) - for i := range keyIdsSet { - keyIds := keyIdsSet[i].(string) - createNativeNodePoolParam.KeyIds = append(createNativeNodePoolParam.KeyIds, helper.String(keyIds)) - } - } - request.Native = &createNativeNodePoolParam - } - - if v, ok := d.GetOk("annotations"); ok { - for _, item := range v.(*schema.Set).List() { - annotationsMap := item.(map[string]interface{}) - annotation := tkev20220501.Annotation{} - if v, ok := annotationsMap["name"]; ok { - annotation.Name = helper.String(v.(string)) - } - if v, ok := annotationsMap["value"]; ok { - annotation.Value = helper.String(v.(string)) - } - request.Annotations = append(request.Annotations, &annotation) - } - } - - err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeV20220501Client().CreateNodePoolWithContext(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 kubernetes native node pools failed, reason:%+v", logId, err) - return err - } - - nodePoolId = *response.Response.NodePoolId - - d.SetId(strings.Join([]string{clusterId, nodePoolId}, tccommon.FILED_SP)) - - return resourceTencentCloudKubernetesNativeNodePoolsRead(d, meta) -} - -func resourceTencentCloudKubernetesNativeNodePoolsRead(d *schema.ResourceData, meta interface{}) error { - defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_native_node_pools.read")() - defer tccommon.InconsistentCheck(d, meta)() - - logId := tccommon.GetLogId(tccommon.ContextNil) - - ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - - service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - - idSplit := strings.Split(d.Id(), tccommon.FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - clusterId := idSplit[0] - nodePoolId := idSplit[1] - - _ = d.Set("cluster_id", clusterId) - - respData, err := service.DescribeKubernetesNativeNodePoolsById(ctx, clusterId, nodePoolId) - if err != nil { - return err - } - - if respData == nil { - d.SetId("") - log.Printf("[WARN]%s resource `kubernetes_native_node_pools` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - tagsList := make([]map[string]interface{}, 0, len(respData.Tags)) - if respData.Tags != nil { - for _, tags := range respData.Tags { - tagsMap := map[string]interface{}{} - - if tags.ResourceType != nil { - tagsMap["resource_type"] = tags.ResourceType - } - - tagsList2 := make([]map[string]interface{}, 0, len(tags.Tags)) - if tags.Tags != nil { - for _, tags := range tags.Tags { - tagsMap2 := map[string]interface{}{} - - if tags.Key != nil { - tagsMap2["key"] = tags.Key - } - - if tags.Value != nil { - tagsMap2["value"] = tags.Value - } - - tagsList2 = append(tagsList2, tagsMap2) - } - - tagsMap["tags"] = tagsList2 - } - tagsList = append(tagsList, tagsMap) - } - - _ = d.Set("tags", tagsList) - } - - taintsList := make([]map[string]interface{}, 0, len(respData.Taints)) - if respData.Taints != nil { - for _, taints := range respData.Taints { - taintsMap := map[string]interface{}{} - - if taints.Key != nil { - taintsMap["key"] = taints.Key - } - - if taints.Value != nil { - taintsMap["value"] = taints.Value - } - - if taints.Effect != nil { - taintsMap["effect"] = taints.Effect - } - - taintsList = append(taintsList, taintsMap) - } - - _ = d.Set("taints", taintsList) - } - - if respData.DeletionProtection != nil { - _ = d.Set("deletion_protection", respData.DeletionProtection) - } - - if respData.Unschedulable != nil { - _ = d.Set("unschedulable", respData.Unschedulable) - } - - if respData.Type != nil { - _ = d.Set("type", respData.Type) - } - - labelsList := make([]map[string]interface{}, 0, len(respData.Labels)) - if respData.Labels != nil { - for _, labels := range respData.Labels { - labelsMap := map[string]interface{}{} - - if labels.Name != nil { - labelsMap["name"] = labels.Name - } - - if labels.Value != nil { - labelsMap["value"] = labels.Value - } - - labelsList = append(labelsList, labelsMap) - } - - _ = d.Set("labels", labelsList) - } - - if respData.LifeState != nil { - _ = d.Set("life_state", respData.LifeState) - } - - if respData.CreatedAt != nil { - _ = d.Set("created_at", respData.CreatedAt) - } - - if respData.Name != nil { - _ = d.Set("name", respData.Name) - } - - nativeMap := map[string]interface{}{} - - if respData.Native != nil { - scalingMap := map[string]interface{}{} - - if respData.Native.Scaling != nil { - if respData.Native.Scaling.MinReplicas != nil { - scalingMap["min_replicas"] = respData.Native.Scaling.MinReplicas - } - - if respData.Native.Scaling.MaxReplicas != nil { - scalingMap["max_replicas"] = respData.Native.Scaling.MaxReplicas - } - - if respData.Native.Scaling.CreatePolicy != nil { - scalingMap["create_policy"] = respData.Native.Scaling.CreatePolicy - } - - nativeMap["scaling"] = []interface{}{scalingMap} - } - - if respData.Native.SubnetIds != nil { - nativeMap["subnet_ids"] = respData.Native.SubnetIds - } - - if respData.Native.SecurityGroupIds != nil { - nativeMap["security_group_ids"] = respData.Native.SecurityGroupIds - } - - if respData.Native.AutoRepair != nil { - nativeMap["auto_repair"] = respData.Native.AutoRepair - } - - if respData.Native.InstanceChargeType != nil { - nativeMap["instance_charge_type"] = respData.Native.InstanceChargeType - } - - instanceChargePrepaidMap := map[string]interface{}{} - - if respData.Native.InstanceChargePrepaid != nil { - if respData.Native.InstanceChargePrepaid.Period != nil { - instanceChargePrepaidMap["period"] = respData.Native.InstanceChargePrepaid.Period - } - - if respData.Native.InstanceChargePrepaid.RenewFlag != nil { - instanceChargePrepaidMap["renew_flag"] = respData.Native.InstanceChargePrepaid.RenewFlag - } - - nativeMap["instance_charge_prepaid"] = []interface{}{instanceChargePrepaidMap} - } - - systemDiskMap := map[string]interface{}{} - - if respData.Native.SystemDisk != nil { - if respData.Native.SystemDisk.DiskType != nil { - systemDiskMap["disk_type"] = respData.Native.SystemDisk.DiskType - } - - if respData.Native.SystemDisk.DiskSize != nil { - systemDiskMap["disk_size"] = respData.Native.SystemDisk.DiskSize - } - - nativeMap["system_disk"] = []interface{}{systemDiskMap} - } - - if respData.Native.KeyIds != nil { - nativeMap["key_ids"] = respData.Native.KeyIds - } - - managementMap := map[string]interface{}{} - - if respData.Native.Management != nil { - if respData.Native.Management.Nameservers != nil { - managementMap["nameservers"] = respData.Native.Management.Nameservers - } - - if respData.Native.Management.Hosts != nil { - managementMap["hosts"] = respData.Native.Management.Hosts - } - - if respData.Native.Management.KernelArgs != nil { - managementMap["kernel_args"] = respData.Native.Management.KernelArgs - } - - nativeMap["management"] = []interface{}{managementMap} - } - - if respData.Native.HealthCheckPolicyName != nil { - nativeMap["health_check_policy_name"] = respData.Native.HealthCheckPolicyName - } - - if respData.Native.HostNamePattern != nil { - nativeMap["host_name_pattern"] = respData.Native.HostNamePattern - } - - if respData.Native.KubeletArgs != nil { - nativeMap["kubelet_args"] = respData.Native.KubeletArgs - } - - lifecycleMap := map[string]interface{}{} - - if respData.Native.Lifecycle != nil { - if respData.Native.Lifecycle.PreInit != nil { - lifecycleMap["pre_init"] = respData.Native.Lifecycle.PreInit - } - - if respData.Native.Lifecycle.PostInit != nil { - lifecycleMap["post_init"] = respData.Native.Lifecycle.PostInit - } - - nativeMap["lifecycle"] = []interface{}{lifecycleMap} - } - - if respData.Native.RuntimeRootDir != nil { - nativeMap["runtime_root_dir"] = respData.Native.RuntimeRootDir - } - - if respData.Native.EnableAutoscaling != nil { - nativeMap["enable_autoscaling"] = respData.Native.EnableAutoscaling - } - - if respData.Native.InstanceTypes != nil { - nativeMap["instance_types"] = respData.Native.InstanceTypes - } - - if respData.Native.Replicas != nil { - nativeMap["replicas"] = respData.Native.Replicas - } - - internetAccessibleMap := map[string]interface{}{} - - if respData.Native.InternetAccessible != nil { - if respData.Native.InternetAccessible.MaxBandwidthOut != nil { - internetAccessibleMap["max_bandwidth_out"] = respData.Native.InternetAccessible.MaxBandwidthOut - } - - if respData.Native.InternetAccessible.ChargeType != nil { - internetAccessibleMap["charge_type"] = respData.Native.InternetAccessible.ChargeType - } - - if respData.Native.InternetAccessible.BandwidthPackageId != nil { - internetAccessibleMap["bandwidth_package_id"] = respData.Native.InternetAccessible.BandwidthPackageId - } - - nativeMap["internet_accessible"] = []interface{}{internetAccessibleMap} - } - - dataDisksList := make([]map[string]interface{}, 0, len(respData.Native.DataDisks)) - if respData.Native.DataDisks != nil { - for _, dataDisks := range respData.Native.DataDisks { - dataDisksMap := map[string]interface{}{} - - if dataDisks.DiskType != nil { - dataDisksMap["disk_type"] = dataDisks.DiskType - } - - if dataDisks.FileSystem != nil { - dataDisksMap["file_system"] = dataDisks.FileSystem - } - - if dataDisks.DiskSize != nil { - dataDisksMap["disk_size"] = dataDisks.DiskSize - } - - if dataDisks.AutoFormatAndMount != nil { - dataDisksMap["auto_format_and_mount"] = dataDisks.AutoFormatAndMount - } - - if dataDisks.DiskPartition != nil { - dataDisksMap["disk_partition"] = dataDisks.DiskPartition - } - - if dataDisks.MountTarget != nil { - dataDisksMap["mount_target"] = dataDisks.MountTarget - } - - if dataDisks.Encrypt != nil { - dataDisksMap["encrypt"] = dataDisks.Encrypt - } - - if dataDisks.KmsKeyId != nil { - dataDisksMap["kms_key_id"] = dataDisks.KmsKeyId - } - - if dataDisks.SnapshotId != nil { - dataDisksMap["snapshot_id"] = dataDisks.SnapshotId - } - - if dataDisks.ThroughputPerformance != nil { - dataDisksMap["throughput_performance"] = dataDisks.ThroughputPerformance - } - - dataDisksList = append(dataDisksList, dataDisksMap) - } - - nativeMap["data_disks"] = dataDisksList - } - _ = d.Set("native", []interface{}{nativeMap}) - } - - annotationsList := make([]map[string]interface{}, 0, len(respData.Annotations)) - if respData.Annotations != nil { - for _, annotations := range respData.Annotations { - annotationsMap := map[string]interface{}{} - - if annotations.Name != nil { - annotationsMap["name"] = annotations.Name - } - - if annotations.Value != nil { - annotationsMap["value"] = annotations.Value - } - - annotationsList = append(annotationsList, annotationsMap) - } - - _ = d.Set("annotations", annotationsList) - } - - return nil -} - -func resourceTencentCloudKubernetesNativeNodePoolsUpdate(d *schema.ResourceData, meta interface{}) error { - defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_native_node_pools.update")() - defer tccommon.InconsistentCheck(d, meta)() - - logId := tccommon.GetLogId(tccommon.ContextNil) - - ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - - immutableArgs := []string{"type"} - for _, v := range immutableArgs { - if d.HasChange(v) { - return fmt.Errorf("argument `%s` cannot be changed", v) - } - } - idSplit := strings.Split(d.Id(), tccommon.FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - clusterId := idSplit[0] - nodePoolId := idSplit[1] - - needChange := false - mutableArgs := []string{"name", "labels", "taints", "tags", "deletion_protection", "unschedulable", "native", "annotations"} - for _, v := range mutableArgs { - if d.HasChange(v) { - needChange = true - break - } - } - - if needChange { - request := tkev20220501.NewModifyNodePoolRequest() - - request.ClusterId = helper.String(clusterId) - - request.NodePoolId = helper.String(nodePoolId) - - if v, ok := d.GetOk("name"); ok { - request.Name = helper.String(v.(string)) - } - - if v, ok := d.GetOk("labels"); ok { - for _, item := range v.([]interface{}) { - labelsMap := item.(map[string]interface{}) - label := tkev20220501.Label{} - if v, ok := labelsMap["name"]; ok { - label.Name = helper.String(v.(string)) - } - if v, ok := labelsMap["value"]; ok { - label.Value = helper.String(v.(string)) - } - request.Labels = append(request.Labels, &label) - } - } - - if v, ok := d.GetOk("taints"); ok { - for _, item := range v.([]interface{}) { - taintsMap := item.(map[string]interface{}) - taint := tkev20220501.Taint{} - if v, ok := taintsMap["key"]; ok { - taint.Key = helper.String(v.(string)) - } - if v, ok := taintsMap["value"]; ok { - taint.Value = helper.String(v.(string)) - } - if v, ok := taintsMap["effect"]; ok { - taint.Effect = helper.String(v.(string)) - } - request.Taints = append(request.Taints, &taint) - } - } - - if v, ok := d.GetOk("tags"); ok { - for _, item := range v.([]interface{}) { - tagsMap := item.(map[string]interface{}) - tagSpecification := tkev20220501.TagSpecification{} - if v, ok := tagsMap["resource_type"]; ok { - tagSpecification.ResourceType = helper.String(v.(string)) - } - if v, ok := tagsMap["tags"]; ok { - for _, item := range v.([]interface{}) { - tagsMap := item.(map[string]interface{}) - tag := tkev20220501.Tag{} - if v, ok := tagsMap["key"]; ok { - tag.Key = helper.String(v.(string)) - } - if v, ok := tagsMap["value"]; ok { - tag.Value = helper.String(v.(string)) - } - tagSpecification.Tags = append(tagSpecification.Tags, &tag) - } - } - request.Tags = append(request.Tags, &tagSpecification) - } - } - - if v, ok := d.GetOkExists("deletion_protection"); ok { - request.DeletionProtection = helper.Bool(v.(bool)) - } - - if v, ok := d.GetOkExists("unschedulable"); ok { - request.Unschedulable = helper.Bool(v.(bool)) - } - - if nativeMap, ok := helper.InterfacesHeadMap(d, "native"); ok { - updateNativeNodePoolParam := tkev20220501.UpdateNativeNodePoolParam{} - if scalingMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["scaling"]); ok { - machineSetScaling := tkev20220501.MachineSetScaling{} - if v, ok := scalingMap["min_replicas"]; ok { - machineSetScaling.MinReplicas = helper.IntInt64(v.(int)) - } - if v, ok := scalingMap["max_replicas"]; ok { - machineSetScaling.MaxReplicas = helper.IntInt64(v.(int)) - } - if v, ok := scalingMap["create_policy"]; ok { - machineSetScaling.CreatePolicy = helper.String(v.(string)) - } - updateNativeNodePoolParam.Scaling = &machineSetScaling - } - if v, ok := nativeMap["subnet_ids"]; ok { - subnetIdsSet := v.([]interface{}) - for i := range subnetIdsSet { - subnetIds := subnetIdsSet[i].(string) - updateNativeNodePoolParam.SubnetIds = append(updateNativeNodePoolParam.SubnetIds, helper.String(subnetIds)) - } - } - if v, ok := nativeMap["security_group_ids"]; ok { - securityGroupIdsSet := v.([]interface{}) - for i := range securityGroupIdsSet { - securityGroupIds := securityGroupIdsSet[i].(string) - updateNativeNodePoolParam.SecurityGroupIds = append(updateNativeNodePoolParam.SecurityGroupIds, helper.String(securityGroupIds)) - } - } - if v, ok := nativeMap["auto_repair"]; ok { - updateNativeNodePoolParam.AutoRepair = helper.Bool(v.(bool)) - } - if v, ok := nativeMap["instance_charge_type"]; ok { - updateNativeNodePoolParam.InstanceChargeType = helper.String(v.(string)) - } - if instanceChargePrepaidMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["instance_charge_prepaid"]); ok { - instanceChargePrepaid := tkev20220501.InstanceChargePrepaid{} - if v, ok := instanceChargePrepaidMap["period"]; ok { - instanceChargePrepaid.Period = helper.IntUint64(v.(int)) - } - if v, ok := instanceChargePrepaidMap["renew_flag"]; ok { - instanceChargePrepaid.RenewFlag = helper.String(v.(string)) - } - updateNativeNodePoolParam.InstanceChargePrepaid = &instanceChargePrepaid - } - if systemDiskMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["system_disk"]); ok { - disk := tkev20220501.Disk{} - if v, ok := systemDiskMap["disk_type"]; ok { - disk.DiskType = helper.String(v.(string)) - } - if v, ok := systemDiskMap["disk_size"]; ok { - disk.DiskSize = helper.IntInt64(v.(int)) - } - updateNativeNodePoolParam.SystemDisk = &disk - } - if managementMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["management"]); ok { - managementConfig := tkev20220501.ManagementConfig{} - if v, ok := managementMap["nameservers"]; ok { - nameserversSet := v.([]interface{}) - for i := range nameserversSet { - nameservers := nameserversSet[i].(string) - managementConfig.Nameservers = append(managementConfig.Nameservers, helper.String(nameservers)) - } - } - if v, ok := managementMap["hosts"]; ok { - hostsSet := v.([]interface{}) - for i := range hostsSet { - hosts := hostsSet[i].(string) - managementConfig.Hosts = append(managementConfig.Hosts, helper.String(hosts)) - } - } - if v, ok := managementMap["kernel_args"]; ok { - kernelArgsSet := v.([]interface{}) - for i := range kernelArgsSet { - kernelArgs := kernelArgsSet[i].(string) - managementConfig.KernelArgs = append(managementConfig.KernelArgs, helper.String(kernelArgs)) - } - } - updateNativeNodePoolParam.Management = &managementConfig - } - if v, ok := nativeMap["health_check_policy_name"]; ok { - updateNativeNodePoolParam.HealthCheckPolicyName = helper.String(v.(string)) - } - if v, ok := nativeMap["host_name_pattern"]; ok { - updateNativeNodePoolParam.HostNamePattern = helper.String(v.(string)) - } - if v, ok := nativeMap["kubelet_args"]; ok { - kubeletArgsSet := v.([]interface{}) - for i := range kubeletArgsSet { - kubeletArgs := kubeletArgsSet[i].(string) - updateNativeNodePoolParam.KubeletArgs = append(updateNativeNodePoolParam.KubeletArgs, helper.String(kubeletArgs)) - } - } - if lifecycleMap, ok := helper.ConvertInterfacesHeadToMap(nativeMap["lifecycle"]); ok { - lifecycleConfig := tkev20220501.LifecycleConfig{} - if v, ok := lifecycleMap["pre_init"]; ok { - lifecycleConfig.PreInit = helper.String(v.(string)) - } - if v, ok := lifecycleMap["post_init"]; ok { - lifecycleConfig.PostInit = helper.String(v.(string)) - } - updateNativeNodePoolParam.Lifecycle = &lifecycleConfig - } - if v, ok := nativeMap["runtime_root_dir"]; ok { - updateNativeNodePoolParam.RuntimeRootDir = helper.String(v.(string)) - } - if v, ok := nativeMap["enable_autoscaling"]; ok { - updateNativeNodePoolParam.EnableAutoscaling = helper.Bool(v.(bool)) - } - if v, ok := nativeMap["instance_types"]; ok { - instanceTypesSet := v.([]interface{}) - for i := range instanceTypesSet { - instanceTypes := instanceTypesSet[i].(string) - updateNativeNodePoolParam.InstanceTypes = append(updateNativeNodePoolParam.InstanceTypes, helper.String(instanceTypes)) - } - } - if v, ok := nativeMap["replicas"]; ok { - updateNativeNodePoolParam.Replicas = helper.IntInt64(v.(int)) - } - if v, ok := nativeMap["data_disks"]; ok { - for _, item := range v.([]interface{}) { - dataDisksMap := item.(map[string]interface{}) - dataDisk := tkev20220501.DataDisk{} - if v, ok := dataDisksMap["disk_type"]; ok { - dataDisk.DiskType = helper.String(v.(string)) - } - if v, ok := dataDisksMap["file_system"]; ok { - dataDisk.FileSystem = helper.String(v.(string)) - } - if v, ok := dataDisksMap["disk_size"]; ok { - dataDisk.DiskSize = helper.IntInt64(v.(int)) - } - if v, ok := dataDisksMap["auto_format_and_mount"]; ok { - dataDisk.AutoFormatAndMount = helper.Bool(v.(bool)) - } - if v, ok := dataDisksMap["disk_partition"]; ok { - dataDisk.DiskPartition = helper.String(v.(string)) - } - if v, ok := dataDisksMap["mount_target"]; ok { - dataDisk.MountTarget = helper.String(v.(string)) - } - if v, ok := dataDisksMap["encrypt"]; ok { - dataDisk.Encrypt = helper.String(v.(string)) - } - if v, ok := dataDisksMap["kms_key_id"]; ok { - dataDisk.KmsKeyId = helper.String(v.(string)) - } - if v, ok := dataDisksMap["snapshot_id"]; ok { - dataDisk.SnapshotId = helper.String(v.(string)) - } - if v, ok := dataDisksMap["throughput_performance"]; ok { - dataDisk.ThroughputPerformance = helper.IntUint64(v.(int)) - } - updateNativeNodePoolParam.DataDisks = append(updateNativeNodePoolParam.DataDisks, &dataDisk) - } - } - if v, ok := nativeMap["key_ids"]; ok { - keyIdsSet := v.([]interface{}) - for i := range keyIdsSet { - keyIds := keyIdsSet[i].(string) - updateNativeNodePoolParam.KeyIds = append(updateNativeNodePoolParam.KeyIds, helper.String(keyIds)) - } - } - request.Native = &updateNativeNodePoolParam - } - - if v, ok := d.GetOk("annotations"); ok { - for _, item := range v.(*schema.Set).List() { - annotationsMap := item.(map[string]interface{}) - annotation := tkev20220501.Annotation{} - if v, ok := annotationsMap["name"]; ok { - annotation.Name = helper.String(v.(string)) - } - if v, ok := annotationsMap["value"]; ok { - annotation.Value = helper.String(v.(string)) - } - request.Annotations = append(request.Annotations, &annotation) - } - } - - err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeV20220501Client().ModifyNodePoolWithContext(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 kubernetes native node pools failed, reason:%+v", logId, err) - return err - } - } - - return resourceTencentCloudKubernetesNativeNodePoolsRead(d, meta) -} - -func resourceTencentCloudKubernetesNativeNodePoolsDelete(d *schema.ResourceData, meta interface{}) error { - defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_native_node_pools.delete")() - defer tccommon.InconsistentCheck(d, meta)() - - logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) - - idSplit := strings.Split(d.Id(), tccommon.FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - clusterId := idSplit[0] - nodePoolId := idSplit[1] - - var ( - request = tkev20220501.NewDeleteNodePoolRequest() - response = tkev20220501.NewDeleteNodePoolResponse() - ) - - request.ClusterId = helper.String(clusterId) - - request.NodePoolId = helper.String(nodePoolId) - - err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeV20220501Client().DeleteNodePoolWithContext(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 delete kubernetes native node pools failed, reason:%+v", logId, err) - return err - } - - _ = response - return nil -} diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools.md b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools.md deleted file mode 100644 index be66c31593..0000000000 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools.md +++ /dev/null @@ -1,30 +0,0 @@ -Provides a resource to create a tke kubernetes_native_node_pools - -Example Usage - -```hcl -resource "tencentcloud_kubernetes_native_node_pools" "kubernetes_native_node_pools" { - labels = { - } - taints = { - } - tags = { - tags = { - } - } - native = { - system_disk = { - } - data_disks = { - } - } -} -``` - -Import - -tke kubernetes_native_node_pools can be imported using the id, e.g. - -``` -terraform import tencentcloud_kubernetes_native_node_pools.kubernetes_native_node_pools kubernetes_native_node_pools_id -``` diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools_extension.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools_extension.go deleted file mode 100644 index 7fdf745226..0000000000 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools_extension.go +++ /dev/null @@ -1 +0,0 @@ -package tke diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools_test.go deleted file mode 100644 index 4d2e412684..0000000000 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pools_test.go +++ /dev/null @@ -1,47 +0,0 @@ -package tke - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - - tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" -) - -func TestAccTencentCloudKubernetesNativeNodePoolsResource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - tcacctest.AccPreCheck(t) - }, - Providers: tcacctest.AccProviders, - Steps: []resource.TestStep{{ - Config: testAccKubernetesNativeNodePools, - Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_kubernetes_native_node_pools.kubernetes_native_node_pools", "id")), - }, { - ResourceName: "tencentcloud_kubernetes_native_node_pools.kubernetes_native_node_pools", - ImportState: true, - ImportStateVerify: true, - }}, - }) -} - -const testAccKubernetesNativeNodePools = ` - -resource "tencentcloud_kubernetes_native_node_pools" "kubernetes_native_node_pools" { - labels = { - } - taints = { - } - tags = { - tags = { - } - } - native = { - system_disk = { - } - data_disks = { - } - } -} -` diff --git a/tencentcloud/services/tke/service_tencentcloud_tke.go b/tencentcloud/services/tke/service_tencentcloud_tke.go index dd164daba5..a464579966 100644 --- a/tencentcloud/services/tke/service_tencentcloud_tke.go +++ b/tencentcloud/services/tke/service_tencentcloud_tke.go @@ -3506,10 +3506,10 @@ func (me *TkeService) DescribeKubernetesNativeNodePoolById(ctx context.Context, logId := tccommon.GetLogId(ctx) request := tke2.NewDescribeNodePoolsRequest() - request.ClusterId = &clusterId + request.ClusterId = helper.String(clusterId) filter := &tke2.Filter{ Name: helper.String("NodePoolsId"), - Values: []*string{&nodePoolId}, + Values: []*string{helper.String(nodePoolId)}, } request.Filters = append(request.Filters, filter) @@ -3523,13 +3523,13 @@ func (me *TkeService) DescribeKubernetesNativeNodePoolById(ctx context.Context, var ( offset int64 = 0 - limit int64 = 100 + limit int64 = 20 ) var instances []*tke2.NodePool for { request.Offset = &offset request.Limit = &limit - response, err := me.client.UseTke2Client().DescribeNodePools(request) + response, err := me.client.UseTkeV20220501Client().DescribeNodePools(request) if err != nil { errRet = err return From facf1f0f4c0fec527ead99cc644bc04c0f903660 Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Wed, 11 Sep 2024 17:33:10 +0800 Subject: [PATCH 03/18] refactor(tke): regen tke provider --- tencentcloud/provider.go | 1 - .../services/tke/resource_tc_kubernetes_native_node_pool.go | 6 ++---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 5bc3e1d144..be41a879df 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -2126,7 +2126,6 @@ func Provider() *schema.Provider { "tencentcloud_cdwdoris_workload_group": cdwdoris.ResourceTencentCloudCdwdorisWorkloadGroup(), //"tencentcloud_cdwdoris_user": cdwdoris.ResourceTencentCloudCdwdorisUser(), "tencentcloud_batch_apply_account_baselines": controlcenter.ResourceTencentCloudBatchApplyAccountBaselines(), - "tencentcloud_kubernetes_native_node_pools": tke.ResourceTencentCloudKubernetesNativeNodePools()}, ConfigureFunc: providerConfigure, } diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go index a89d6c3f53..66105ad1b4 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go @@ -4,15 +4,13 @@ package tke import ( "context" "fmt" - "log" - "strings" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tkev20220501 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20220501" - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "log" + "strings" ) func ResourceTencentCloudKubernetesNativeNodePool() *schema.Resource { From fbbdde024c3a9eff224d3f3ef3ae49c13da82b58 Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Wed, 11 Sep 2024 17:35:19 +0800 Subject: [PATCH 04/18] refactor(tke): regen tke provider --- tencentcloud/provider.go | 1 + 1 file changed, 1 insertion(+) diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index be41a879df..352e498049 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -2126,6 +2126,7 @@ func Provider() *schema.Provider { "tencentcloud_cdwdoris_workload_group": cdwdoris.ResourceTencentCloudCdwdorisWorkloadGroup(), //"tencentcloud_cdwdoris_user": cdwdoris.ResourceTencentCloudCdwdorisUser(), "tencentcloud_batch_apply_account_baselines": controlcenter.ResourceTencentCloudBatchApplyAccountBaselines(), + }, ConfigureFunc: providerConfigure, } From a28b752a9965a6856f8744f85db88e7c80792ad0 Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Wed, 11 Sep 2024 19:18:15 +0800 Subject: [PATCH 05/18] refactor(tke): regen tke provider --- .../tke/resource_tc_kubernetes_native_node_pool.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go index 66105ad1b4..39519bb4b5 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go @@ -4,13 +4,15 @@ package tke import ( "context" "fmt" + "log" + "strings" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tkev20220501 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20220501" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" - "log" - "strings" ) func ResourceTencentCloudKubernetesNativeNodePool() *schema.Resource { @@ -478,7 +480,7 @@ func ResourceTencentCloudKubernetesNativeNodePool() *schema.Resource { "created_at": { Type: schema.TypeString, Computed: true, - Description: "creation time.", + Description: "Creation time.", }, }, } From f5f497dfb557ec26ec6cba4b56c4ef055ec9d516 Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Wed, 11 Sep 2024 20:45:08 +0800 Subject: [PATCH 06/18] refactor(tke): regen tke provider --- ...resource_tc_kubernetes_native_node_pool.go | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go index 39519bb4b5..5beed241fb 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go @@ -6,6 +6,7 @@ import ( "fmt" "log" "strings" + "time" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -790,6 +791,16 @@ func resourceTencentCloudKubernetesNativeNodePoolCreate(d *schema.ResourceData, nodePoolId = *response.Response.NodePoolId + if _, err := (&resource.StateChangeConf{ + Delay: 10 * time.Second, + MinTimeout: 3 * time.Second, + Pending: []string{}, + Refresh: resourceKubernetesNativeNodePoolCreateStateRefreshFunc_0_0(ctx, clusterId, nodePoolId), + Target: []string{"Running"}, + Timeout: 600 * time.Second, + }).WaitForStateContext(ctx); err != nil { + return err + } d.SetId(strings.Join([]string{clusterId, nodePoolId}, tccommon.FILED_SP)) return resourceTencentCloudKubernetesNativeNodePoolRead(d, meta) @@ -1486,5 +1497,75 @@ func resourceTencentCloudKubernetesNativeNodePoolDelete(d *schema.ResourceData, } _ = response + if _, err := (&resource.StateChangeConf{ + Delay: 10 * time.Second, + MinTimeout: 3 * time.Second, + Pending: []string{"Deleting"}, + Refresh: resourceKubernetesNativeNodePoolDeleteStateRefreshFunc_0_0(ctx, clusterId, nodePoolId), + Target: []string{}, + Timeout: 600 * time.Second, + }).WaitForStateContext(ctx); err != nil { + return err + } return nil } + +func resourceKubernetesNativeNodePoolCreateStateRefreshFunc_0_0(ctx context.Context, clusterId string, nodePoolId string) resource.StateRefreshFunc { + var req *tkev20220501.DescribeNodePoolsRequest + return func() (interface{}, string, error) { + meta := tccommon.ProviderMetaFromContext(ctx) + if meta == nil { + return nil, "", fmt.Errorf("resource data can not be nil") + } + if req == nil { + d := tccommon.ResourceDataFromContext(ctx) + if d == nil { + return nil, "", fmt.Errorf("resource data can not be nil") + } + _ = d + req = tkev20220501.NewDescribeNodePoolsRequest() + if v, ok := d.GetOk("cluster_id"); ok { + req.ClusterId = helper.String(v.(string)) + } + + } + resp, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeV20220501Client().DescribeNodePoolsWithContext(ctx, req) + if err != nil { + return nil, "", err + } + if resp == nil || resp.Response == nil { + return nil, "", nil + } + state := fmt.Sprintf("%v", *resp.Response.NodePools[0].LifeState) + return resp.Response, state, nil + } +} + +func resourceKubernetesNativeNodePoolDeleteStateRefreshFunc_0_0(ctx context.Context, clusterId string, nodePoolId string) resource.StateRefreshFunc { + var req *tkev20220501.DescribeNodePoolsRequest + return func() (interface{}, string, error) { + meta := tccommon.ProviderMetaFromContext(ctx) + if meta == nil { + return nil, "", fmt.Errorf("resource data can not be nil") + } + if req == nil { + d := tccommon.ResourceDataFromContext(ctx) + if d == nil { + return nil, "", fmt.Errorf("resource data can not be nil") + } + _ = d + req = tkev20220501.NewDescribeNodePoolsRequest() + req.ClusterId = helper.String(clusterId) + + } + resp, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeV20220501Client().DescribeNodePoolsWithContext(ctx, req) + if err != nil { + return nil, "", err + } + if resp == nil || resp.Response == nil { + return nil, "", nil + } + state := fmt.Sprintf("%v", *resp.Response.NodePools[0].LifeState) + return resp.Response, state, nil + } +} From 0b424b22d0d53790efccd7c96af67336bc88c425 Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Wed, 11 Sep 2024 20:47:21 +0800 Subject: [PATCH 07/18] refactor(tke): regen tke provider --- .../services/tke/resource_tc_kubernetes_native_node_pool.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go index 5beed241fb..6c878af3a8 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go @@ -1524,9 +1524,7 @@ func resourceKubernetesNativeNodePoolCreateStateRefreshFunc_0_0(ctx context.Cont } _ = d req = tkev20220501.NewDescribeNodePoolsRequest() - if v, ok := d.GetOk("cluster_id"); ok { - req.ClusterId = helper.String(v.(string)) - } + req.ClusterId = helper.String(clusterId) } resp, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeV20220501Client().DescribeNodePoolsWithContext(ctx, req) From b32e20800078d879445f8bbd6f3411456552d8b8 Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Thu, 12 Sep 2024 14:03:12 +0800 Subject: [PATCH 08/18] refactor(tke): regen tke provider --- .../tke/resource_tc_kubernetes_native_node_pool.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go index 6c878af3a8..e6d5c61638 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go @@ -1526,6 +1526,12 @@ func resourceKubernetesNativeNodePoolCreateStateRefreshFunc_0_0(ctx context.Cont req = tkev20220501.NewDescribeNodePoolsRequest() req.ClusterId = helper.String(clusterId) + filter := tkev20220501.Filter{} + name := "NodePoolsId" + filter.Name = &name + filter.Values = []*string{helper.String(nodePoolId)} + req.Filters = []*tkev20220501.Filter{&filter} + } resp, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeV20220501Client().DescribeNodePoolsWithContext(ctx, req) if err != nil { @@ -1555,6 +1561,12 @@ func resourceKubernetesNativeNodePoolDeleteStateRefreshFunc_0_0(ctx context.Cont req = tkev20220501.NewDescribeNodePoolsRequest() req.ClusterId = helper.String(clusterId) + filter := tkev20220501.Filter{} + name := "NodePoolsId" + filter.Name = &name + filter.Values = []*string{helper.String(nodePoolId)} + req.Filters = []*tkev20220501.Filter{&filter} + } resp, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeV20220501Client().DescribeNodePoolsWithContext(ctx, req) if err != nil { From 15a982dcdc062c6a0f18e795df34e7e520c9154e Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Thu, 12 Sep 2024 15:49:51 +0800 Subject: [PATCH 09/18] refactor(tke): regen tke provider --- ...resource_tc_kubernetes_native_node_pool.go | 19 ++----------------- ...c_kubernetes_native_node_pool_extension.go | 9 +++++++++ 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go index e6d5c61638..c36e5f1296 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go @@ -1134,23 +1134,8 @@ func resourceTencentCloudKubernetesNativeNodePoolRead(d *schema.ResourceData, me _ = d.Set("native", []interface{}{nativeMap}) } - annotationsList := make([]map[string]interface{}, 0, len(respData.Annotations)) - if respData.Annotations != nil { - for _, annotations := range respData.Annotations { - annotationsMap := map[string]interface{}{} - - if annotations.Name != nil { - annotationsMap["name"] = annotations.Name - } - - if annotations.Value != nil { - annotationsMap["value"] = annotations.Value - } - - annotationsList = append(annotationsList, annotationsMap) - } - - _ = d.Set("annotations", annotationsList) + if err := resourceTencentCloudKubernetesNativeNodePoolReadPostHandleResponse0(ctx, respData); err != nil { + return err } return nil diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go index 7fdf745226..a6a40a4bef 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go @@ -1 +1,10 @@ package tke + +import ( + "context" +) + +func resourceTencentCloudKubernetesNativeNodePoolReadPostHandleResponse0(ctx context.Context, resp *v20220501.NodePool) error { + // TODO: implement me + panic("TODO: implement me") +} From 9b6742e7ef192f03b286655c93279631676f8b7f Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Thu, 12 Sep 2024 15:56:37 +0800 Subject: [PATCH 10/18] refactor(tke): regen tke provider --- ...resource_tc_kubernetes_native_node_pool.go | 14 --------- ...c_kubernetes_native_node_pool_extension.go | 31 +++++++++++++++++-- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go index c36e5f1296..af3e1dc28a 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go @@ -1033,20 +1033,6 @@ func resourceTencentCloudKubernetesNativeNodePoolRead(d *schema.ResourceData, me nativeMap["kubelet_args"] = respData.Native.KubeletArgs } - lifecycleMap := map[string]interface{}{} - - if respData.Native.Lifecycle != nil { - if respData.Native.Lifecycle.PreInit != nil { - lifecycleMap["pre_init"] = respData.Native.Lifecycle.PreInit - } - - if respData.Native.Lifecycle.PostInit != nil { - lifecycleMap["post_init"] = respData.Native.Lifecycle.PostInit - } - - nativeMap["lifecycle"] = []interface{}{lifecycleMap} - } - if respData.Native.RuntimeRootDir != nil { nativeMap["runtime_root_dir"] = respData.Native.RuntimeRootDir } diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go index a6a40a4bef..14bd0b58c4 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go @@ -2,9 +2,36 @@ package tke import ( "context" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" ) func resourceTencentCloudKubernetesNativeNodePoolReadPostHandleResponse0(ctx context.Context, resp *v20220501.NodePool) error { - // TODO: implement me - panic("TODO: implement me") + d := tccommon.ResourceDataFromContext(ctx) + meta := tccommon.ProviderMetaFromContext(ctx) + + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + respData := resp + annotationsList := make([]map[string]interface{}, 0, len(respData.Annotations)) + if respData.Annotations != nil { + for _, annotations := range respData.Annotations { + annotationsMap := map[string]interface{}{} + + if annotations.Name != nil && tkeNativeNodePoolAnnotationsMap[*annotations.Name] != "" { + continue + } + + if annotations.Name != nil { + annotationsMap["name"] = annotations.Name + } + + if annotations.Value != nil { + annotationsMap["value"] = annotations.Value + } + + annotationsList = append(annotationsList, annotationsMap) + } + + _ = d.Set("annotations", annotationsList) + } } From 9ce46e0053423a510739f7fbf146a9e123d8d699 Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Thu, 12 Sep 2024 17:05:35 +0800 Subject: [PATCH 11/18] refactor(tke): regen tke provider --- ...c_kubernetes_native_node_pool_extension.go | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go index 14bd0b58c4..92528204e4 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go @@ -2,6 +2,7 @@ package tke import ( "context" + "encoding/base64" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" ) @@ -12,6 +13,25 @@ func resourceTencentCloudKubernetesNativeNodePoolReadPostHandleResponse0(ctx con service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} respData := resp + + lifecycleMap := map[string]interface{}{} + nativeMap = d.Get("native").([]interface{}).(map[string]interface{}) + + if respData.Native.Lifecycle != nil { + if respData.Native.Lifecycle.PreInit != nil { + lifecycleMap["pre_init"] = base64.StdEncoding.EncodeToString([]byte(*respData.Native.Lifecycle.PreInit)) + //lifecycleMap["pre_init"] = respData.Native.Lifecycle.PreInit + } + + if respData.Native.Lifecycle.PostInit != nil { + lifecycleMap["post_init"] = base64.StdEncoding.EncodeToString([]byte(*respData.Native.Lifecycle.PostInit)) + //lifecycleMap["post_init"] = respData.Native.Lifecycle.PostInit + } + + nativeMap["lifecycle"] = []interface{}{lifecycleMap} + } + _ = d.Set("native", []interface{}{nativeMap}) + annotationsList := make([]map[string]interface{}, 0, len(respData.Annotations)) if respData.Annotations != nil { for _, annotations := range respData.Annotations { From 96d5ecee3414e76b08caca5f207864eca3d63f26 Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Thu, 12 Sep 2024 17:15:17 +0800 Subject: [PATCH 12/18] refactor(tke): regen tke provider --- .../services/tke/resource_tc_kubernetes_native_node_pool.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go index af3e1dc28a..96dcfd7d02 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go @@ -1334,9 +1334,6 @@ func resourceTencentCloudKubernetesNativeNodePoolUpdate(d *schema.ResourceData, } updateNativeNodePoolParam.Lifecycle = &lifecycleConfig } - if v, ok := nativeMap["runtime_root_dir"]; ok { - updateNativeNodePoolParam.RuntimeRootDir = helper.String(v.(string)) - } if v, ok := nativeMap["enable_autoscaling"]; ok { updateNativeNodePoolParam.EnableAutoscaling = helper.Bool(v.(bool)) } From 0e28667aaf0e9d4d498a902875c170c5f8353b4d Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Thu, 12 Sep 2024 17:33:40 +0800 Subject: [PATCH 13/18] fix: resource_tc_kubernetes_native_node_pool_extension.go --- ...c_kubernetes_native_node_pool_extension.go | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go index 92528204e4..e4bc50ee78 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go @@ -4,33 +4,33 @@ import ( "context" "encoding/base64" + v20220501 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20220501" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" ) func resourceTencentCloudKubernetesNativeNodePoolReadPostHandleResponse0(ctx context.Context, resp *v20220501.NodePool) error { d := tccommon.ResourceDataFromContext(ctx) - meta := tccommon.ProviderMetaFromContext(ctx) - - service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} respData := resp - lifecycleMap := map[string]interface{}{} - nativeMap = d.Get("native").([]interface{}).(map[string]interface{}) + if respData.Native != nil { + nativeMap := d.Get("native").([]interface{}) + lifecycleMap := map[string]interface{}{} + if respData.Native.Lifecycle != nil { + if respData.Native.Lifecycle.PreInit != nil { + lifecycleMap["pre_init"] = base64.StdEncoding.EncodeToString([]byte(*respData.Native.Lifecycle.PreInit)) + //lifecycleMap["pre_init"] = respData.Native.Lifecycle.PreInit + } - if respData.Native.Lifecycle != nil { - if respData.Native.Lifecycle.PreInit != nil { - lifecycleMap["pre_init"] = base64.StdEncoding.EncodeToString([]byte(*respData.Native.Lifecycle.PreInit)) - //lifecycleMap["pre_init"] = respData.Native.Lifecycle.PreInit - } + if respData.Native.Lifecycle.PostInit != nil { + lifecycleMap["post_init"] = base64.StdEncoding.EncodeToString([]byte(*respData.Native.Lifecycle.PostInit)) + //lifecycleMap["post_init"] = respData.Native.Lifecycle.PostInit + } - if respData.Native.Lifecycle.PostInit != nil { - lifecycleMap["post_init"] = base64.StdEncoding.EncodeToString([]byte(*respData.Native.Lifecycle.PostInit)) - //lifecycleMap["post_init"] = respData.Native.Lifecycle.PostInit + nativeMap[0].(map[string]interface{})["lifecycle"] = []interface{}{lifecycleMap} + _ = d.Set("native", []interface{}{nativeMap}) } - - nativeMap["lifecycle"] = []interface{}{lifecycleMap} } - _ = d.Set("native", []interface{}{nativeMap}) annotationsList := make([]map[string]interface{}, 0, len(respData.Annotations)) if respData.Annotations != nil { @@ -54,4 +54,6 @@ func resourceTencentCloudKubernetesNativeNodePoolReadPostHandleResponse0(ctx con _ = d.Set("annotations", annotationsList) } + + return nil } From 0e9ca50206ab6bb8f40ba50b076db4f2557206f9 Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Thu, 12 Sep 2024 17:50:17 +0800 Subject: [PATCH 14/18] refactor(tke): regen tke provider --- ...resource_tc_kubernetes_native_node_pool.go | 45 +------------------ ...c_kubernetes_native_node_pool_extension.go | 11 ++++- 2 files changed, 11 insertions(+), 45 deletions(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go index 96dcfd7d02..cfb085b878 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool.go @@ -1465,16 +1465,10 @@ func resourceTencentCloudKubernetesNativeNodePoolDelete(d *schema.ResourceData, } _ = response - if _, err := (&resource.StateChangeConf{ - Delay: 10 * time.Second, - MinTimeout: 3 * time.Second, - Pending: []string{"Deleting"}, - Refresh: resourceKubernetesNativeNodePoolDeleteStateRefreshFunc_0_0(ctx, clusterId, nodePoolId), - Target: []string{}, - Timeout: 600 * time.Second, - }).WaitForStateContext(ctx); err != nil { + if err := resourceTencentCloudKubernetesNativeNodePoolDeletePostHandleResponse0(ctx, response); err != nil { return err } + return nil } @@ -1512,38 +1506,3 @@ func resourceKubernetesNativeNodePoolCreateStateRefreshFunc_0_0(ctx context.Cont return resp.Response, state, nil } } - -func resourceKubernetesNativeNodePoolDeleteStateRefreshFunc_0_0(ctx context.Context, clusterId string, nodePoolId string) resource.StateRefreshFunc { - var req *tkev20220501.DescribeNodePoolsRequest - return func() (interface{}, string, error) { - meta := tccommon.ProviderMetaFromContext(ctx) - if meta == nil { - return nil, "", fmt.Errorf("resource data can not be nil") - } - if req == nil { - d := tccommon.ResourceDataFromContext(ctx) - if d == nil { - return nil, "", fmt.Errorf("resource data can not be nil") - } - _ = d - req = tkev20220501.NewDescribeNodePoolsRequest() - req.ClusterId = helper.String(clusterId) - - filter := tkev20220501.Filter{} - name := "NodePoolsId" - filter.Name = &name - filter.Values = []*string{helper.String(nodePoolId)} - req.Filters = []*tkev20220501.Filter{&filter} - - } - resp, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeV20220501Client().DescribeNodePoolsWithContext(ctx, req) - if err != nil { - return nil, "", err - } - if resp == nil || resp.Response == nil { - return nil, "", nil - } - state := fmt.Sprintf("%v", *resp.Response.NodePools[0].LifeState) - return resp.Response, state, nil - } -} diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go index e4bc50ee78..6ffe81be60 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go @@ -14,7 +14,8 @@ func resourceTencentCloudKubernetesNativeNodePoolReadPostHandleResponse0(ctx con respData := resp if respData.Native != nil { - nativeMap := d.Get("native").([]interface{}) + // nativeMap := d.Get("native").([]interface{}) + nativeMap := d.Get("native").([]interface{})[0].(map[string]interface{}) lifecycleMap := map[string]interface{}{} if respData.Native.Lifecycle != nil { if respData.Native.Lifecycle.PreInit != nil { @@ -27,7 +28,8 @@ func resourceTencentCloudKubernetesNativeNodePoolReadPostHandleResponse0(ctx con //lifecycleMap["post_init"] = respData.Native.Lifecycle.PostInit } - nativeMap[0].(map[string]interface{})["lifecycle"] = []interface{}{lifecycleMap} + // nativeMap[0].(map[string]interface{})["lifecycle"] = []interface{}{lifecycleMap} + nativeMap["lifecycle"] = []interface{}{lifecycleMap} _ = d.Set("native", []interface{}{nativeMap}) } } @@ -57,3 +59,8 @@ func resourceTencentCloudKubernetesNativeNodePoolReadPostHandleResponse0(ctx con return nil } + +func resourceTencentCloudKubernetesNativeNodePoolDeletePostHandleResponse0(ctx context.Context, resp *v20220501.DeleteNodePoolResponse) error { + // TODO: implement me + panic("TODO: implement me") +} From e498c64718b0084ee02b4d011585a025bc964a17 Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Thu, 12 Sep 2024 18:02:56 +0800 Subject: [PATCH 15/18] refactor(tke): regen tke provider --- ...c_kubernetes_native_node_pool_extension.go | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go index 6ffe81be60..9463a4337c 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go @@ -61,6 +61,36 @@ func resourceTencentCloudKubernetesNativeNodePoolReadPostHandleResponse0(ctx con } func resourceTencentCloudKubernetesNativeNodePoolDeletePostHandleResponse0(ctx context.Context, resp *v20220501.DeleteNodePoolResponse) error { - // TODO: implement me - panic("TODO: implement me") + // wait for delete ok + logId := tccommon.GetLogId(tccommon.ContextNil) + d := tccommon.ResourceDataFromContext(ctx) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + clusterId := idSplit[0] + nodePoolId := idSplit[1] + + var ( + request = tkev20220501.NewDeleteNodePoolRequest() + ) + + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { + respData, errRet := service.DescribeKubernetesNativeNodePoolById(ctx, clusterId, nodePoolId) + if errRet != nil { + errCode := errRet.(*sdkErrors.TencentCloudSDKError).Code + if strings.Contains(errCode, "InternalError") { + return nil + } + return tccommon.RetryError(errRet, tccommon.InternalError) + } + if respData != nil && *respData.LifeState == "Deleting" { + log.Printf("[DEBUG]%s api[%s] native node pool %s still alive and status is %s", logId, request.GetAction(), nodePoolId, *respData.LifeState) + return resource.RetryableError(fmt.Errorf("native node pool %s still alive and status is %s", nodePoolId, *respData.LifeState)) + } + return nil + }) + return nil } From f59542ac89084541b8b5f2335018a382ab000d88 Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Thu, 12 Sep 2024 18:12:12 +0800 Subject: [PATCH 16/18] refactor(tke): regen tke provider --- ...rce_tc_kubernetes_native_node_pool_extension.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go index 9463a4337c..a3fb6355fa 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go @@ -3,9 +3,13 @@ package tke import ( "context" "encoding/base64" + "fmt" + "log" + "strings" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" v20220501 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20220501" - + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" ) @@ -64,6 +68,7 @@ func resourceTencentCloudKubernetesNativeNodePoolDeletePostHandleResponse0(ctx c // wait for delete ok logId := tccommon.GetLogId(tccommon.ContextNil) d := tccommon.ResourceDataFromContext(ctx) + meta := tccommon.ProviderMetaFromContext(ctx) idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { @@ -73,11 +78,11 @@ func resourceTencentCloudKubernetesNativeNodePoolDeletePostHandleResponse0(ctx c nodePoolId := idSplit[1] var ( - request = tkev20220501.NewDeleteNodePoolRequest() + request = v20220501.NewDeleteNodePoolRequest() ) service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { + err := resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { respData, errRet := service.DescribeKubernetesNativeNodePoolById(ctx, clusterId, nodePoolId) if errRet != nil { errCode := errRet.(*sdkErrors.TencentCloudSDKError).Code @@ -92,5 +97,8 @@ func resourceTencentCloudKubernetesNativeNodePoolDeletePostHandleResponse0(ctx c } return nil }) + if err != nil { + return err + } return nil } From 6b33f4a82f86ecd4b1bd2c5ec9bffb9f16ee6dbd Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Thu, 12 Sep 2024 18:40:04 +0800 Subject: [PATCH 17/18] refactor(tke): regen tke provider --- .../tke/resource_tc_kubernetes_native_node_pool_extension.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go index a3fb6355fa..8093198a65 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go @@ -8,8 +8,8 @@ import ( "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - v20220501 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20220501" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + v20220501 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20220501" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" ) @@ -78,7 +78,7 @@ func resourceTencentCloudKubernetesNativeNodePoolDeletePostHandleResponse0(ctx c nodePoolId := idSplit[1] var ( - request = v20220501.NewDeleteNodePoolRequest() + request = v20220501.NewDeleteNodePoolRequest() ) service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} From 35579a3930bd28e70a29be453e99ea0882242de0 Mon Sep 17 00:00:00 2001 From: andrewjiang Date: Thu, 12 Sep 2024 22:15:06 +0800 Subject: [PATCH 18/18] refactor(tke): regen tke provider --- .../tke/resource_tc_kubernetes_native_node_pool_extension.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go index 8093198a65..d835996947 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_native_node_pool_extension.go @@ -18,7 +18,6 @@ func resourceTencentCloudKubernetesNativeNodePoolReadPostHandleResponse0(ctx con respData := resp if respData.Native != nil { - // nativeMap := d.Get("native").([]interface{}) nativeMap := d.Get("native").([]interface{})[0].(map[string]interface{}) lifecycleMap := map[string]interface{}{} if respData.Native.Lifecycle != nil { @@ -31,8 +30,6 @@ func resourceTencentCloudKubernetesNativeNodePoolReadPostHandleResponse0(ctx con lifecycleMap["post_init"] = base64.StdEncoding.EncodeToString([]byte(*respData.Native.Lifecycle.PostInit)) //lifecycleMap["post_init"] = respData.Native.Lifecycle.PostInit } - - // nativeMap[0].(map[string]interface{})["lifecycle"] = []interface{}{lifecycleMap} nativeMap["lifecycle"] = []interface{}{lifecycleMap} _ = d.Set("native", []interface{}{nativeMap}) }