Skip to content

Commit a0f134c

Browse files
authored
Fix/tke cluster level retry (#1029)
* fix: tke - add cluster level update retry * fix: tke - add RESOURCEUNAVAILABLE retryable modify code * fix: tke - cidr conflicts * fix: tke auth - add retry code
1 parent 15d6851 commit a0f134c

7 files changed

+106
-232
lines changed

go.sum

Lines changed: 0 additions & 108 deletions
Large diffs are not rendered by default.

tencentcloud/basic_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -545,6 +545,40 @@ locals {
545545
// End of TcaPlus DB
546546

547547
// TKE Service
548+
549+
// List sample CIDRs to avoid conflict when running multiple cluster testcase parallel
550+
const TkeCIDRs = `
551+
variable "tke_cidr_a" {
552+
default = [
553+
"10.31.0.0/23",
554+
"10.31.2.0/24",
555+
"10.31.3.0/25",
556+
"10.31.3.128/26",
557+
"10.31.3.192/26"
558+
]
559+
}
560+
561+
variable "tke_cidr_b" {
562+
default = [
563+
"172.18.0.0/20",
564+
"172.18.16.0/21",
565+
"172.18.24.0/21",
566+
"172.18.32.0/20",
567+
"172.18.48.0/20"
568+
]
569+
}
570+
571+
variable "tke_cidr_c" {
572+
default = [
573+
"192.168.0.0/18",
574+
"192.168.64.0/19",
575+
"192.168.96.0/20",
576+
"192.168.112.0/21",
577+
"192.168.120.0/21"
578+
]
579+
}
580+
`
581+
548582
const TkeInstanceType = `
549583
data "tencentcloud_instance_types" "ins_type" {
550584
availability_zone = "` + defaultCvmAZone + `"

tencentcloud/resource_tc_kubernetes_auth_attachment.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ package tencentcloud
7575
import (
7676
"context"
7777

78+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
79+
7880
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
7981
tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525"
8082
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
@@ -133,7 +135,15 @@ func resourceTencentCloudTKEAuthAttachmentCreate(d *schema.ResourceData, meta in
133135
request.ServiceAccounts.AutoCreateDiscoveryAnonymousAuth = helper.Bool(v.(bool))
134136
}
135137

136-
if err := service.ModifyClusterAuthenticationOptions(ctx, request); err != nil {
138+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
139+
err := service.ModifyClusterAuthenticationOptions(ctx, request)
140+
if err != nil {
141+
return retryError(err, tke.RESOURCEUNAVAILABLE_CLUSTERSTATE)
142+
}
143+
return nil
144+
})
145+
146+
if err != nil {
137147
return err
138148
}
139149

tencentcloud/resource_tc_kubernetes_auth_attachment_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ func TestAccTencentCloudTkeAuthAttachResource(t *testing.T) {
2626
}
2727

2828
func testAccTkeAuthAttach() string {
29-
return `
29+
return TkeCIDRs + `
3030
variable "availability_zone" {
3131
default = "ap-guangzhou-3"
3232
}
@@ -38,7 +38,7 @@ data "tencentcloud_vpc_subnets" "vpc" {
3838
3939
resource "tencentcloud_kubernetes_cluster" "managed_cluster" {
4040
vpc_id = data.tencentcloud_vpc_subnets.vpc.instance_list.0.vpc_id
41-
cluster_cidr = "10.31.0.0/16"
41+
cluster_cidr = var.tke_cidr_a.1
4242
cluster_max_pod_num = 32
4343
cluster_name = "for-auth-attachment"
4444
cluster_desc = "test cluster desc"

tencentcloud/resource_tc_kubernetes_cluster.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2667,7 +2667,16 @@ func resourceTencentCloudTkeClusterUpdate(d *schema.ResourceData, meta interface
26672667
clusterDesc := d.Get("cluster_desc").(string)
26682668
clusterLevel := d.Get("cluster_level").(string)
26692669
autoUpgradeClusterLevel := d.Get("auto_upgrade_cluster_level").(bool)
2670-
if err := tkeService.ModifyClusterAttribute(ctx, id, projectId, clusterName, clusterDesc, clusterLevel, autoUpgradeClusterLevel); err != nil {
2670+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
2671+
err := tkeService.ModifyClusterAttribute(ctx, id, projectId, clusterName, clusterDesc, clusterLevel, autoUpgradeClusterLevel)
2672+
if err != nil {
2673+
// create and update immediately may cause cluster level syntax error, this error can wait until cluster level state normal
2674+
return retryError(err, tke.INTERNALERROR_UNEXPECTEDINTERNAL, tke.RESOURCEUNAVAILABLE)
2675+
}
2676+
return nil
2677+
})
2678+
2679+
if err != nil {
26712680
return err
26722681
}
26732682
}

tencentcloud/resource_tc_kubernetes_cluster_test.go

Lines changed: 47 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,10 @@ func TestAccTencentCloudTkeResourceBasic(t *testing.T) {
5656
CheckDestroy: testAccCheckTkeDestroy,
5757
Steps: []resource.TestStep{
5858
{
59-
Config: testAccTkeCluster("test", "test"),
59+
Config: testAccTkeCluster,
6060
Check: resource.ComposeTestCheckFunc(
6161
testAccCheckTkeExists(testTkeClusterResourceKey),
62-
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "cluster_cidr", "10.31.0.0/16"),
62+
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "cluster_cidr", "10.31.0.0/23"),
6363
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "cluster_max_pod_num", "32"),
6464
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "cluster_name", "test"),
6565
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "cluster_desc", "test cluster desc"),
@@ -72,45 +72,20 @@ func TestAccTencentCloudTkeResourceBasic(t *testing.T) {
7272
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "tags.test", "test"),
7373
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "security_policy.#", "2"),
7474
resource.TestCheckResourceAttrSet(testTkeClusterResourceKey, "cluster_external_endpoint"),
75+
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "cluster_level", "L5"),
76+
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "auto_upgrade_cluster_level", "true"),
7577
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "labels.test1", "test1"),
7678
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "labels.test2", "test2"),
7779
),
7880
},
7981
{
80-
Config: testAccTkeCluster("abc", "abc"),
82+
Config: testAccTkeClusterUpdate,
8183
Check: resource.ComposeTestCheckFunc(
8284
testAccCheckTkeExists(testTkeClusterResourceKey),
85+
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "cluster_name", "test2"),
86+
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "cluster_desc", "test cluster desc2"),
8387
resource.TestCheckNoResourceAttr(testTkeClusterResourceKey, "tags.test"),
8488
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "tags.abc", "abc"),
85-
),
86-
},
87-
},
88-
})
89-
}
90-
91-
func TestAccTencentCloudTkeResourceClusterLevel(t *testing.T) {
92-
resource.Test(t, resource.TestCase{
93-
PreCheck: func() { testAccPreCheck(t) },
94-
Providers: testAccProviders,
95-
CheckDestroy: testAccCheckTkeDestroy,
96-
Steps: []resource.TestStep{
97-
{
98-
Config: testAccTkeClusterLevel,
99-
Check: resource.ComposeTestCheckFunc(
100-
testAccCheckTkeExists(testTkeClusterResourceKey),
101-
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "cluster_cidr", "192.168.0.0/16"),
102-
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "cluster_max_pod_num", "32"),
103-
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "cluster_name", "test"),
104-
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "cluster_level", "L5"),
105-
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "auto_upgrade_cluster_level", "true"),
106-
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "worker_instances_list.#", "1"),
107-
resource.TestCheckResourceAttrSet(testTkeClusterResourceKey, "worker_instances_list.0.instance_id"),
108-
),
109-
},
110-
{
111-
Config: testAccTkeClusterLevelUpdate,
112-
Check: resource.ComposeTestCheckFunc(
113-
testAccCheckTkeExists(testTkeClusterResourceKey),
11489
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "cluster_level", "L20"),
11590
resource.TestCheckResourceAttr(testTkeClusterResourceKey, "auto_upgrade_cluster_level", "false"),
11691
),
@@ -204,31 +179,25 @@ func testAccCheckTkeExists(n string) resource.TestCheckFunc {
204179
}
205180
}
206181

207-
func testAccTkeCluster(key, value string) string {
208-
return fmt.Sprintf(TkeInstanceType+defaultImages+`
182+
const TkeDeps = TkeExclusiveNetwork + TkeInstanceType + TkeCIDRs + defaultImages
183+
184+
const testAccTkeCluster = TkeDeps + `
209185
variable "availability_zone" {
210186
default = "ap-guangzhou-3"
211187
}
212188
213-
variable "cluster_cidr" {
214-
default = "10.31.0.0/16"
215-
}
216-
217-
data "tencentcloud_vpc_subnets" "vpc" {
218-
is_default = true
219-
availability_zone = var.availability_zone
220-
}
221-
222189
resource "tencentcloud_kubernetes_cluster" "managed_cluster" {
223-
vpc_id = data.tencentcloud_vpc_subnets.vpc.instance_list.0.vpc_id
224-
cluster_cidr = var.cluster_cidr
190+
vpc_id = local.vpc_id
191+
cluster_cidr = var.tke_cidr_a.0
225192
cluster_max_pod_num = 32
226193
cluster_name = "test"
227194
cluster_desc = "test cluster desc"
228195
cluster_max_service_num = 32
229196
cluster_internet = true
230197
cluster_version = "1.18.4"
231198
cluster_os = "tlinux2.2(tkernel3)x86_64"
199+
cluster_level = "L5"
200+
auto_upgrade_cluster_level = true
232201
managed_cluster_internet_security_policies = ["3.3.3.3", "1.1.1.1"]
233202
worker_config {
234203
count = 1
@@ -239,7 +208,7 @@ resource "tencentcloud_kubernetes_cluster" "managed_cluster" {
239208
internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR"
240209
internet_max_bandwidth_out = 100
241210
public_ip_assigned = true
242-
subnet_id = data.tencentcloud_vpc_subnets.vpc.instance_list.0.subnet_id
211+
subnet_id = local.subnet_id
243212
img_id = var.default_img_id
244213
245214
data_disk {
@@ -260,7 +229,7 @@ resource "tencentcloud_kubernetes_cluster" "managed_cluster" {
260229
cluster_deploy_type = "MANAGED_CLUSTER"
261230
262231
tags = {
263-
"%s" = "%s"
232+
"test" = "test"
264233
}
265234
266235
unschedulable = 0
@@ -273,35 +242,25 @@ resource "tencentcloud_kubernetes_cluster" "managed_cluster" {
273242
"root-dir=/var/lib/kubelet"
274243
]
275244
}
276-
`, key, value,
277-
)
278-
}
279-
280-
const testAccTkeClusterLevel = TkeInstanceType + defaultImages + `
245+
`
246+
const testAccTkeClusterUpdate = TkeDeps + `
281247
variable "availability_zone" {
282248
default = "ap-guangzhou-3"
283249
}
284250
285-
variable "cluster_cidr" {
286-
default = "192.168.0.0/16"
287-
}
288-
289-
data "tencentcloud_vpc_subnets" "vpc" {
290-
is_default = true
291-
availability_zone = var.availability_zone
292-
}
293-
294251
resource "tencentcloud_kubernetes_cluster" "managed_cluster" {
295-
vpc_id = data.tencentcloud_vpc_subnets.vpc.instance_list.0.vpc_id
296-
cluster_cidr = var.cluster_cidr
252+
vpc_id = local.vpc_id
253+
cluster_cidr = var.tke_cidr_a.0
297254
cluster_max_pod_num = 32
298-
cluster_name = "test"
299-
cluster_desc = "test cluster desc"
255+
cluster_name = "test2"
256+
cluster_desc = "test cluster desc2"
300257
cluster_max_service_num = 32
258+
cluster_internet = true
301259
cluster_version = "1.18.4"
302-
cluster_os = var.default_img
303-
cluster_level = "L5"
304-
auto_upgrade_cluster_level = true
260+
cluster_os = "tlinux2.2(tkernel3)x86_64"
261+
cluster_level = "L20"
262+
auto_upgrade_cluster_level = false
263+
managed_cluster_internet_security_policies = ["3.3.3.3", "1.1.1.1"]
305264
worker_config {
306265
count = 1
307266
availability_zone = var.availability_zone
@@ -311,9 +270,18 @@ resource "tencentcloud_kubernetes_cluster" "managed_cluster" {
311270
internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR"
312271
internet_max_bandwidth_out = 100
313272
public_ip_assigned = true
314-
subnet_id = data.tencentcloud_vpc_subnets.vpc.instance_list.0.subnet_id
273+
subnet_id = local.subnet_id
315274
img_id = var.default_img_id
316275
276+
data_disk {
277+
disk_type = "CLOUD_PREMIUM"
278+
disk_size = 50
279+
file_system = "ext3"
280+
auto_format_and_mount = "true"
281+
mount_target = "/var/lib/docker"
282+
disk_partition = "/dev/sdb1"
283+
}
284+
317285
enhanced_security_service = false
318286
enhanced_monitor_service = false
319287
user_data = "dGVzdA=="
@@ -322,55 +290,18 @@ resource "tencentcloud_kubernetes_cluster" "managed_cluster" {
322290
323291
cluster_deploy_type = "MANAGED_CLUSTER"
324292
325-
unschedulable = 0
326-
}
327-
`
328-
329-
const testAccTkeClusterLevelUpdate = TkeInstanceType + defaultImages + `
330-
variable "availability_zone" {
331-
default = "ap-guangzhou-3"
332-
}
333-
334-
variable "cluster_cidr" {
335-
default = "192.168.0.0/16"
336-
}
337-
338-
data "tencentcloud_vpc_subnets" "vpc" {
339-
is_default = true
340-
availability_zone = var.availability_zone
341-
}
342-
343-
resource "tencentcloud_kubernetes_cluster" "managed_cluster" {
344-
vpc_id = data.tencentcloud_vpc_subnets.vpc.instance_list.0.vpc_id
345-
cluster_cidr = var.cluster_cidr
346-
cluster_max_pod_num = 32
347-
cluster_name = "test"
348-
cluster_desc = "test cluster desc"
349-
cluster_max_service_num = 32
350-
cluster_version = "1.18.4"
351-
cluster_os = var.default_img
352-
cluster_level = "L20"
353-
auto_upgrade_cluster_level = false
354-
worker_config {
355-
count = 1
356-
availability_zone = var.availability_zone
357-
instance_type = local.type1
358-
system_disk_type = "CLOUD_SSD"
359-
system_disk_size = 60
360-
internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR"
361-
internet_max_bandwidth_out = 100
362-
public_ip_assigned = true
363-
subnet_id = data.tencentcloud_vpc_subnets.vpc.instance_list.0.subnet_id
364-
img_id = var.default_img_id
365-
366-
enhanced_security_service = false
367-
enhanced_monitor_service = false
368-
user_data = "dGVzdA=="
369-
password = "ZZXXccvv1212"
293+
tags = {
294+
"abc" = "abc"
370295
}
371296
372-
cluster_deploy_type = "MANAGED_CLUSTER"
373-
374297
unschedulable = 0
298+
299+
labels = {
300+
"test1" = "test1",
301+
"test2" = "test2",
302+
}
303+
extra_args = [
304+
"root-dir=/var/lib/kubelet"
305+
]
375306
}
376307
`

tencentcloud/service_tencentcloud_tke.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -989,10 +989,8 @@ func (me *TkeService) ModifyClusterAttribute(ctx context.Context, id string, pro
989989
request.ClusterLevel = &clusterLevel
990990
}
991991

992-
if autoUpgradeClusterLevel {
993-
request.AutoUpgradeClusterLevel = &tke.AutoUpgradeClusterLevel{
994-
IsAutoUpgrade: &autoUpgradeClusterLevel,
995-
}
992+
request.AutoUpgradeClusterLevel = &tke.AutoUpgradeClusterLevel{
993+
IsAutoUpgrade: &autoUpgradeClusterLevel,
996994
}
997995

998996
ratelimit.Check(request.GetAction())

0 commit comments

Comments
 (0)