From 727466ecc25aa89a107828d340b6f36345a21344 Mon Sep 17 00:00:00 2001 From: nickyinluo Date: Thu, 24 Oct 2024 19:43:57 +0800 Subject: [PATCH 1/3] feat(tke): [120225433]: support resource_delete_options --- .../tke/resource_tc_kubernetes_cluster.go | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_cluster.go b/tencentcloud/services/tke/resource_tc_kubernetes_cluster.go index c536428610..8f4f2079c7 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_cluster.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_cluster.go @@ -279,6 +279,31 @@ func ResourceTencentCloudKubernetesCluster() *schema.Resource { Description: "Indicates whether cluster deletion protection is enabled. Default is false.", }, + "resource_delete_options": { + Type: schema.TypeSet, + Optional: true, + Description: "The resource deletion policy when the cluster is deleted. Currently, CBS is supported (CBS is retained by default).", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "resource_type": { + Type: schema.TypeString, + Required: true, + Description: "Resource type, valid values are `CBS`, `CLB`, and `CVM`.", + }, + "delete_mode": { + Type: schema.TypeString, + Required: true, + Description: "The deletion mode of CBS resources when the cluster is deleted, `terminate` (destroy), `retain` (retain). Other resources are deleted by default.", + }, + "skip_deletion_protection": { + Type: schema.TypeBool, + Optional: true, + Description: "Whether to skip resources with deletion protection enabled, the default is false.", + }, + }, + }, + }, + "kube_proxy_mode": { Type: schema.TypeString, Optional: true, @@ -1890,6 +1915,23 @@ func resourceTencentCloudKubernetesClusterDelete(d *schema.ResourceData, meta in instanceDeleteMode := "terminate" request.InstanceDeleteMode = &instanceDeleteMode + if v, ok := d.GetOk("resource_delete_options"); ok { + for _, item := range v.(*schema.Set).List() { + resourceDeleteOptionsMap := item.(map[string]interface{}) + resourceDeleteOption := tkev20180525.ResourceDeleteOption{} + if v, ok := resourceDeleteOptionsMap["resource_type"]; ok { + resourceDeleteOption.ResourceType = helper.String(v.(string)) + } + if v, ok := resourceDeleteOptionsMap["delete_mode"]; ok { + resourceDeleteOption.DeleteMode = helper.String(v.(string)) + } + if v, ok := resourceDeleteOptionsMap["skip_deletion_protection"]; ok { + resourceDeleteOption.SkipDeletionProtection = helper.Bool(v.(bool)) + } + request.ResourceDeleteOptions = append(request.ResourceDeleteOptions, &resourceDeleteOption) + } + } + if err := resourceTencentCloudKubernetesClusterDeletePostFillRequest0(ctx, request); err != nil { return err } From fbe74e30819fb5276ae69e5ed8b38c689362c0d1 Mon Sep 17 00:00:00 2001 From: nickyinluo Date: Mon, 28 Oct 2024 18:04:26 +0800 Subject: [PATCH 2/3] add changelog and doc --- .changelog/2916.txt | 3 + .../tke/resource_tc_kubernetes_cluster.md | 56 +++++++++++++++++ .../docs/r/kubernetes_cluster.html.markdown | 63 +++++++++++++++++++ 3 files changed, 122 insertions(+) create mode 100644 .changelog/2916.txt diff --git a/.changelog/2916.txt b/.changelog/2916.txt new file mode 100644 index 0000000000..7da843847a --- /dev/null +++ b/.changelog/2916.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/tencentcloud_kubernetes_cluster: support field `resource_delete_options` for deleting CBS +``` \ No newline at end of file diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_cluster.md b/tencentcloud/services/tke/resource_tc_kubernetes_cluster.md index ee871b4dc1..d73252dd17 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_cluster.md +++ b/tencentcloud/services/tke/resource_tc_kubernetes_cluster.md @@ -807,6 +807,62 @@ resource "tencentcloud_kubernetes_cluster" "cdc_cluster" { } ``` +Use delete options to delete CBS when deleting the Cluster + +```hcl +resource "tencentcloud_kubernetes_cluster" "example" { + vpc_id = local.first_vpc_id + cluster_cidr = var.example_cluster_cidr + cluster_max_pod_num = 32 + cluster_name = "example" + cluster_desc = "example for tke cluster" + cluster_max_service_num = 32 + cluster_level = "L50" + auto_upgrade_cluster_level = true + cluster_internet = false # (can be ignored) open it after the nodes added + cluster_version = "1.30.0" + cluster_os = "tlinux2.2(tkernel3)x86_64" + cluster_deploy_type = "MANAGED_CLUSTER" + container_runtime = "containerd" + docker_graph_path = "/var/lib/containerd" + # without any worker config + tags = { + "demo" = "test" + } + + worker_config { + count = 1 + availability_zone = var.availability_zone_first + instance_type = "SA2.MEDIUM2" + system_disk_type = "CLOUD_SSD" + system_disk_size = 60 + internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR" + internet_max_bandwidth_out = 100 + public_ip_assigned = true + subnet_id = local.first_subnet_id + + data_disk { + disk_type = "CLOUD_PREMIUM" + disk_size = 50 + } + + enhanced_security_service = false + enhanced_monitor_service = false + user_data = "dGVzdA==" + disaster_recover_group_ids = [] + security_group_ids = [] + key_ids = [] + cam_role_name = "CVM_QcsRole" + password = "ZZXXccvv1212" // Optional, should be set if key_ids not set. + } + + resource_delete_options { + resource_type = "CBS" + delete_mode = "terminate" + } +} +``` + Import tke cluster can be imported, e.g. diff --git a/website/docs/r/kubernetes_cluster.html.markdown b/website/docs/r/kubernetes_cluster.html.markdown index 8297ae6204..759e399984 100644 --- a/website/docs/r/kubernetes_cluster.html.markdown +++ b/website/docs/r/kubernetes_cluster.html.markdown @@ -818,6 +818,62 @@ resource "tencentcloud_kubernetes_cluster" "cdc_cluster" { } ``` +### Use delete options to delete CBS when deleting the Cluster + +```hcl +resource "tencentcloud_kubernetes_cluster" "example" { + vpc_id = local.first_vpc_id + cluster_cidr = var.example_cluster_cidr + cluster_max_pod_num = 32 + cluster_name = "example" + cluster_desc = "example for tke cluster" + cluster_max_service_num = 32 + cluster_level = "L50" + auto_upgrade_cluster_level = true + cluster_internet = false # (can be ignored) open it after the nodes added + cluster_version = "1.30.0" + cluster_os = "tlinux2.2(tkernel3)x86_64" + cluster_deploy_type = "MANAGED_CLUSTER" + container_runtime = "containerd" + docker_graph_path = "/var/lib/containerd" + # without any worker config + tags = { + "demo" = "test" + } + + worker_config { + count = 1 + availability_zone = var.availability_zone_first + instance_type = "SA2.MEDIUM2" + system_disk_type = "CLOUD_SSD" + system_disk_size = 60 + internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR" + internet_max_bandwidth_out = 100 + public_ip_assigned = true + subnet_id = local.first_subnet_id + + data_disk { + disk_type = "CLOUD_PREMIUM" + disk_size = 50 + } + + enhanced_security_service = false + enhanced_monitor_service = false + user_data = "dGVzdA==" + disaster_recover_group_ids = [] + security_group_ids = [] + key_ids = [] + cam_role_name = "CVM_QcsRole" + password = "ZZXXccvv1212" // Optional, should be set if key_ids not set. + } + + resource_delete_options { + resource_type = "CBS" + delete_mode = "terminate" + } +} +``` + ## Argument Reference The following arguments are supported: @@ -873,6 +929,7 @@ The following arguments are supported: * `node_pool_global_config` - (Optional, List) Global config effective for all node pools. * `pre_start_user_script` - (Optional, String, ForceNew) Base64-encoded user script, executed before initializing the node, currently only effective for adding existing nodes. * `project_id` - (Optional, Int) Project ID, default value is 0. +* `resource_delete_options` - (Optional, Set) The resource deletion policy when the cluster is deleted. Currently, CBS is supported (CBS is retained by default). * `runtime_version` - (Optional, String) Container Runtime version. * `service_cidr` - (Optional, String, ForceNew) A network address block of the service. Different from vpc cidr and cidr of other clusters within this vpc. Must be in 10./192.168/172.[16-31] segments. * `tags` - (Optional, Map) The tags of the cluster. @@ -994,6 +1051,12 @@ The `node_pool_global_config` object supports the following: * `skip_nodes_with_local_storage` - (Optional, Bool) During scale-in, ignore nodes with local storage pods. * `skip_nodes_with_system_pods` - (Optional, Bool) During scale-in, ignore nodes with pods in the kube-system namespace that are not managed by DaemonSet. +The `resource_delete_options` object supports the following: + +* `delete_mode` - (Required, String) The deletion mode of CBS resources when the cluster is deleted, `terminate` (destroy), `retain` (retain). Other resources are deleted by default. +* `resource_type` - (Required, String) Resource type, valid values are `CBS`, `CLB`, and `CVM`. +* `skip_deletion_protection` - (Optional, Bool) Whether to skip resources with deletion protection enabled, the default is false. + The `worker_config` object supports the following: * `instance_type` - (Required, String, ForceNew) Specified types of CVM instance. From fd23724833d8694d7659898245c2d962e9a025b8 Mon Sep 17 00:00:00 2001 From: nickyinluo Date: Fri, 1 Nov 2024 15:36:28 +0800 Subject: [PATCH 3/3] update resource_delete_options desc --- tencentcloud/services/tke/resource_tc_kubernetes_cluster.go | 2 +- website/docs/r/kubernetes_cluster.html.markdown | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_cluster.go b/tencentcloud/services/tke/resource_tc_kubernetes_cluster.go index 8f4f2079c7..842ef8dbd4 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_cluster.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_cluster.go @@ -282,7 +282,7 @@ func ResourceTencentCloudKubernetesCluster() *schema.Resource { "resource_delete_options": { Type: schema.TypeSet, Optional: true, - Description: "The resource deletion policy when the cluster is deleted. Currently, CBS is supported (CBS is retained by default).", + Description: "The resource deletion policy when the cluster is deleted. Currently, CBS is supported (CBS is retained by default). Only valid when deleting cluster.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "resource_type": { diff --git a/website/docs/r/kubernetes_cluster.html.markdown b/website/docs/r/kubernetes_cluster.html.markdown index 759e399984..29e38b5948 100644 --- a/website/docs/r/kubernetes_cluster.html.markdown +++ b/website/docs/r/kubernetes_cluster.html.markdown @@ -929,7 +929,7 @@ The following arguments are supported: * `node_pool_global_config` - (Optional, List) Global config effective for all node pools. * `pre_start_user_script` - (Optional, String, ForceNew) Base64-encoded user script, executed before initializing the node, currently only effective for adding existing nodes. * `project_id` - (Optional, Int) Project ID, default value is 0. -* `resource_delete_options` - (Optional, Set) The resource deletion policy when the cluster is deleted. Currently, CBS is supported (CBS is retained by default). +* `resource_delete_options` - (Optional, Set) The resource deletion policy when the cluster is deleted. Currently, CBS is supported (CBS is retained by default). Only valid when deleting cluster. * `runtime_version` - (Optional, String) Container Runtime version. * `service_cidr` - (Optional, String, ForceNew) A network address block of the service. Different from vpc cidr and cidr of other clusters within this vpc. Must be in 10./192.168/172.[16-31] segments. * `tags` - (Optional, Map) The tags of the cluster.