From 18ab7af375f5d9f875ddf3624f6c564ee9ead1fe Mon Sep 17 00:00:00 2001 From: rostachen Date: Mon, 19 Apr 2021 16:52:11 +0800 Subject: [PATCH 1/2] 1.Remove `ResourceInsufficient` from `retryableErrorCode` 2. Resource: `tencentcloud_kubernetes_cluster` upgrade `cluster_version` will send old `cluster_extra_args` to tke. --- .terraform.lock.hcl | 20 ++++ CHANGELOG.md | 11 ++- go.mod | 2 +- go.sum | 2 + k8s.tf | 98 +++++++++++++++++++ provider.tf | 13 +++ tencentcloud/common.go | 2 +- .../resource_tc_kubernetes_cluster.go | 7 +- tencentcloud/service_tencentcloud_tke.go | 40 +++++++- 9 files changed, 189 insertions(+), 6 deletions(-) create mode 100644 .terraform.lock.hcl create mode 100644 k8s.tf create mode 100644 provider.tf diff --git a/.terraform.lock.hcl b/.terraform.lock.hcl new file mode 100644 index 0000000000..52f6aedd63 --- /dev/null +++ b/.terraform.lock.hcl @@ -0,0 +1,20 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/tencentcloudstack/tencentcloud" { + version = "1.56.1" + hashes = [ + "h1:yJCl2QobJnmj1idiOzw0tZvg+iPS0t6NYrMb+dmtZ7w=", + "zh:2df5c8e2372fb1a582b5cce09cef551fc9714095bee579ef1d9e01263d998e7e", + "zh:39d1a9820d893c1ba492bc83ae506f79ce0f46152ff012a7fc49f7ea67b6b5d7", + "zh:3e3c28c4223b3f6b37fe7416e6c73809e23eceb0a681d37d219f305f98c39a50", + "zh:66e2575cd5f67abc201d80a31f384bd6ca1b5d81fb47aaa1ec6d5db45597af46", + "zh:67de6601dd791efa2debf2d333a198f29221c0e1215292dbc9c2c91c26153543", + "zh:6aace7f16374e62e591eac6e5fd925403e705017acd16f1ba46884f45bab00ed", + "zh:74470161bf8f731922c83d45e638be6780a9771d8e0f36b0532a2b1f1271dd4e", + "zh:7bfb780ff36953a1bc0c5b0ced67aa721e40107a2a0a0f14b5a41e8db0ecfee6", + "zh:87c162a8ade55363554bc9e75d0a12bfd2ca90bbb288294cbf941764e0d87314", + "zh:a21b53417455564f472d1ad7113e2d2d839977b80ecf9d468d56a7d35613ee25", + "zh:fe52c6b0ea3450b81cd7ff161b83e39be5dfc17f5fb7fe5d86b150b6d4e151e7", + ] +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f49f34c83..c3b2fa3941 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,13 @@ -## 1.56.2 (Unreleased) +## 1.56.3 (Unreleased) +## 1.56.2 (April 19, 2021) +BUG FIXES: + +* Remove `ResourceInsufficient` from `retryableErrorCode`. + +ENHANCEMENTS: + +* Resource: `tencentcloud_kubernetes_cluster` upgrade `cluster_version` will send old `cluster_extra_args` to tke. + ## 1.56.1 (April 6,2021) BUG FIXES: diff --git a/go.mod b/go.mod index e8ba958867..9d9d1ada58 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/mattn/go-colorable v0.1.6 // indirect github.com/mitchellh/go-homedir v1.1.0 github.com/pkg/errors v0.9.1 - github.com/tencentcloud/tencentcloud-sdk-go v1.0.123 + github.com/tencentcloud/tencentcloud-sdk-go v1.0.137 github.com/yangwenmai/ratelimit v0.0.0-20180104140304-44221c2292e1 github.com/zclconf/go-cty v1.4.2 // indirect golang.org/x/sys v0.0.0-20200523222454-059865788121 // indirect diff --git a/go.sum b/go.sum index 77927091ea..24853c0e0b 100644 --- a/go.sum +++ b/go.sum @@ -443,6 +443,8 @@ github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2 h1:Xr9gkxfOP0K github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= github.com/tencentcloud/tencentcloud-sdk-go v1.0.123 h1:6yOMrmTuKtW1Y8VtWgN5Jt3jUcWnWtRX0gZfD1LxRcc= github.com/tencentcloud/tencentcloud-sdk-go v1.0.123/go.mod h1:asUz5BPXxgoPGaRgZaVm1iGcUAuHyYUo1nXqKa83cvI= +github.com/tencentcloud/tencentcloud-sdk-go v1.0.137 h1:NEV2Dp7NofwDsyT0OpY5W0fEqsgsbKETD5gWI7/Nn/s= +github.com/tencentcloud/tencentcloud-sdk-go v1.0.137/go.mod h1:asUz5BPXxgoPGaRgZaVm1iGcUAuHyYUo1nXqKa83cvI= github.com/tetafro/godot v0.3.7 h1:+mecr7RKrUKB5UQ1gwqEMn13sDKTyDR8KNIquB9mm+8= github.com/tetafro/godot v0.3.7/go.mod h1:/7NLHhv08H1+8DNj0MElpAACw1ajsCuf3TKNQxA5S+0= github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e h1:RumXZ56IrCj4CL+g1b9OL/oH0QnsF976bC8xQFYUD5Q= diff --git a/k8s.tf b/k8s.tf new file mode 100644 index 0000000000..a8c0817024 --- /dev/null +++ b/k8s.tf @@ -0,0 +1,98 @@ +variable "availability_zone_first" { + default = "ap-guangzhou-4" +} + +variable "availability_zone_second" { + default = "ap-guangzhou-4" +} + +variable "cluster_cidr" { + default = "10.31.0.0/20" +} + +variable "default_instance_type" { + default = "S2.MEDIUM2" + #default = "SA2.2XLARGE16" +} + +data "tencentcloud_vpc_subnets" "vpc_first" { + is_default = true + availability_zone = var.availability_zone_first +} + +data "tencentcloud_vpc_subnets" "vpc_second" { + is_default = true + availability_zone = var.availability_zone_second +} + +resource "tencentcloud_kubernetes_cluster" "managed_cluster" { + vpc_id = data.tencentcloud_vpc_subnets.vpc_first.instance_list.0.vpc_id + cluster_cidr = var.cluster_cidr + cluster_max_pod_num = 32 + cluster_name = "rosta-test" + cluster_desc = "test cluster desc" + cluster_max_service_num = 32 + cluster_internet = true + managed_cluster_internet_security_policies = ["3.3.3.3", "1.1.1.1"] + cluster_deploy_type = "MANAGED_CLUSTER" + cluster_version = "1.16.3" + #cluster_version = "1.18.4" + + cluster_extra_args { + kube_apiserver = [ + "service-account-issuer=kubernetes.default.svc", + "service-account-signing-key-file=/etc/kubernetes/files/apiserver/service-account.key", + "api-audiences=kubernetes.default.svc" + ] + } + + worker_config { + count = 1 + availability_zone = var.availability_zone_first + instance_type = var.default_instance_type + 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 = data.tencentcloud_vpc_subnets.vpc_first.instance_list.0.subnet_id + + data_disk { + disk_type = "CLOUD_PREMIUM" + disk_size = 50 + } + + enhanced_security_service = false + enhanced_monitor_service = false + user_data = "dGVzdA==" + password = "ZZXXccvv1212" + } + + worker_config { + count = 1 + availability_zone = var.availability_zone_second + instance_type = var.default_instance_type + 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 = data.tencentcloud_vpc_subnets.vpc_second.instance_list.0.subnet_id + + data_disk { + disk_type = "CLOUD_PREMIUM" + disk_size = 50 + } + + enhanced_security_service = false + enhanced_monitor_service = false + user_data = "dGVzdA==" + password = "ZZXXccvv1212" + cam_role_name = "CVM_QcsRole" + } + + labels = { + "test1" = "test1", + "test2" = "test2", + } +} diff --git a/provider.tf b/provider.tf new file mode 100644 index 0000000000..34bb56073b --- /dev/null +++ b/provider.tf @@ -0,0 +1,13 @@ +terraform { + required_providers { + tencentcloud = { + source = "tencentcloudstack/tencentcloud" +# version = "1.53.0" + } + } +} + +provider "tencentcloud" { + region = "ap-guangzhou" +} + diff --git a/tencentcloud/common.go b/tencentcloud/common.go index 1eb6aff0a3..2fc062f251 100644 --- a/tencentcloud/common.go +++ b/tencentcloud/common.go @@ -50,7 +50,7 @@ var retryableErrorCode = []string{ "TradeUnknownError", "RequestLimitExceeded", "ResourceInUse", - "ResourceInsufficient", + //"ResourceInsufficient", "ResourceUnavailable", // cbs "ResourceBusy", diff --git a/tencentcloud/resource_tc_kubernetes_cluster.go b/tencentcloud/resource_tc_kubernetes_cluster.go index 5921e0f8f6..adaaee3f9e 100644 --- a/tencentcloud/resource_tc_kubernetes_cluster.go +++ b/tencentcloud/resource_tc_kubernetes_cluster.go @@ -2124,9 +2124,12 @@ func resourceTencentCloudTkeClusterUpdate(d *schema.ResourceData, meta interface if !isOk { return fmt.Errorf("version %s is unsupported", newVersion) } - + extraArgs, ok := d.GetOk("cluster_extra_args") + if !ok { + extraArgs = nil + } err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr := tkeService.ModifyClusterVersion(ctx, id, newVersion) + inErr := tkeService.ModifyClusterVersion(ctx, id, newVersion, extraArgs) if inErr != nil { return retryError(inErr) } diff --git a/tencentcloud/service_tencentcloud_tke.go b/tencentcloud/service_tencentcloud_tke.go index dca82909a7..4a031dbc59 100644 --- a/tencentcloud/service_tencentcloud_tke.go +++ b/tencentcloud/service_tencentcloud_tke.go @@ -825,7 +825,7 @@ func (me *TkeService) ModifyClusterAttribute(ctx context.Context, id string, pro return } -func (me *TkeService) ModifyClusterVersion(ctx context.Context, id string, clusterVersion string) (errRet error) { +func (me *TkeService) ModifyClusterVersion(ctx context.Context, id string, clusterVersion string, extraArgs interface{}) (errRet error) { logId := getLogId(ctx) request := tke.NewUpdateClusterVersionRequest() defer func() { @@ -833,6 +833,44 @@ func (me *TkeService) ModifyClusterVersion(ctx context.Context, id string, clust log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) } }() + + if extraArgs != nil && len(extraArgs.([]interface{})) > 0 { + // the first elem is in use + extraInterface := extraArgs.([]interface{}) + extraMap := extraInterface[0].(map[string]interface{}) + + kas := make([]*string, 0) + if kaArgs, exist := extraMap["kube_apiserver"]; exist { + args := kaArgs.([]interface{}) + for index := range args { + str := args[index].(string) + kas = append(kas, &str) + } + } + kcms := make([]*string, 0) + if kcmArgs, exist := extraMap["kube_controller_manager"]; exist { + args := kcmArgs.([]interface{}) + for index := range args { + str := args[index].(string) + kcms = append(kcms, &str) + } + } + kss := make([]*string, 0) + if ksArgs, exist := extraMap["kube_scheduler"]; exist { + args := ksArgs.([]interface{}) + for index := range args { + str := args[index].(string) + kss = append(kss, &str) + } + } + + request.ExtraArgs = &tke.ClusterExtraArgs{ + KubeAPIServer: kas, + KubeControllerManager: kcms, + KubeScheduler: kss, + } + } + request.ClusterId = &id request.DstVersion = &clusterVersion From 4292f24382a38027efaee2b578aa8cb41906c52e Mon Sep 17 00:00:00 2001 From: rostachen Date: Mon, 19 Apr 2021 17:05:58 +0800 Subject: [PATCH 2/2] update by pr result --- .terraform.lock.hcl | 20 --------- CHANGELOG.md | 1 + k8s.tf | 98 ------------------------------------------ provider.tf | 13 ------ tencentcloud/common.go | 1 - 5 files changed, 1 insertion(+), 132 deletions(-) delete mode 100644 .terraform.lock.hcl delete mode 100644 k8s.tf delete mode 100644 provider.tf diff --git a/.terraform.lock.hcl b/.terraform.lock.hcl deleted file mode 100644 index 52f6aedd63..0000000000 --- a/.terraform.lock.hcl +++ /dev/null @@ -1,20 +0,0 @@ -# This file is maintained automatically by "terraform init". -# Manual edits may be lost in future updates. - -provider "registry.terraform.io/tencentcloudstack/tencentcloud" { - version = "1.56.1" - hashes = [ - "h1:yJCl2QobJnmj1idiOzw0tZvg+iPS0t6NYrMb+dmtZ7w=", - "zh:2df5c8e2372fb1a582b5cce09cef551fc9714095bee579ef1d9e01263d998e7e", - "zh:39d1a9820d893c1ba492bc83ae506f79ce0f46152ff012a7fc49f7ea67b6b5d7", - "zh:3e3c28c4223b3f6b37fe7416e6c73809e23eceb0a681d37d219f305f98c39a50", - "zh:66e2575cd5f67abc201d80a31f384bd6ca1b5d81fb47aaa1ec6d5db45597af46", - "zh:67de6601dd791efa2debf2d333a198f29221c0e1215292dbc9c2c91c26153543", - "zh:6aace7f16374e62e591eac6e5fd925403e705017acd16f1ba46884f45bab00ed", - "zh:74470161bf8f731922c83d45e638be6780a9771d8e0f36b0532a2b1f1271dd4e", - "zh:7bfb780ff36953a1bc0c5b0ced67aa721e40107a2a0a0f14b5a41e8db0ecfee6", - "zh:87c162a8ade55363554bc9e75d0a12bfd2ca90bbb288294cbf941764e0d87314", - "zh:a21b53417455564f472d1ad7113e2d2d839977b80ecf9d468d56a7d35613ee25", - "zh:fe52c6b0ea3450b81cd7ff161b83e39be5dfc17f5fb7fe5d86b150b6d4e151e7", - ] -} diff --git a/CHANGELOG.md b/CHANGELOG.md index c3b2fa3941..f54d5dd5d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ## 1.56.3 (Unreleased) ## 1.56.2 (April 19, 2021) + BUG FIXES: * Remove `ResourceInsufficient` from `retryableErrorCode`. diff --git a/k8s.tf b/k8s.tf deleted file mode 100644 index a8c0817024..0000000000 --- a/k8s.tf +++ /dev/null @@ -1,98 +0,0 @@ -variable "availability_zone_first" { - default = "ap-guangzhou-4" -} - -variable "availability_zone_second" { - default = "ap-guangzhou-4" -} - -variable "cluster_cidr" { - default = "10.31.0.0/20" -} - -variable "default_instance_type" { - default = "S2.MEDIUM2" - #default = "SA2.2XLARGE16" -} - -data "tencentcloud_vpc_subnets" "vpc_first" { - is_default = true - availability_zone = var.availability_zone_first -} - -data "tencentcloud_vpc_subnets" "vpc_second" { - is_default = true - availability_zone = var.availability_zone_second -} - -resource "tencentcloud_kubernetes_cluster" "managed_cluster" { - vpc_id = data.tencentcloud_vpc_subnets.vpc_first.instance_list.0.vpc_id - cluster_cidr = var.cluster_cidr - cluster_max_pod_num = 32 - cluster_name = "rosta-test" - cluster_desc = "test cluster desc" - cluster_max_service_num = 32 - cluster_internet = true - managed_cluster_internet_security_policies = ["3.3.3.3", "1.1.1.1"] - cluster_deploy_type = "MANAGED_CLUSTER" - cluster_version = "1.16.3" - #cluster_version = "1.18.4" - - cluster_extra_args { - kube_apiserver = [ - "service-account-issuer=kubernetes.default.svc", - "service-account-signing-key-file=/etc/kubernetes/files/apiserver/service-account.key", - "api-audiences=kubernetes.default.svc" - ] - } - - worker_config { - count = 1 - availability_zone = var.availability_zone_first - instance_type = var.default_instance_type - 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 = data.tencentcloud_vpc_subnets.vpc_first.instance_list.0.subnet_id - - data_disk { - disk_type = "CLOUD_PREMIUM" - disk_size = 50 - } - - enhanced_security_service = false - enhanced_monitor_service = false - user_data = "dGVzdA==" - password = "ZZXXccvv1212" - } - - worker_config { - count = 1 - availability_zone = var.availability_zone_second - instance_type = var.default_instance_type - 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 = data.tencentcloud_vpc_subnets.vpc_second.instance_list.0.subnet_id - - data_disk { - disk_type = "CLOUD_PREMIUM" - disk_size = 50 - } - - enhanced_security_service = false - enhanced_monitor_service = false - user_data = "dGVzdA==" - password = "ZZXXccvv1212" - cam_role_name = "CVM_QcsRole" - } - - labels = { - "test1" = "test1", - "test2" = "test2", - } -} diff --git a/provider.tf b/provider.tf deleted file mode 100644 index 34bb56073b..0000000000 --- a/provider.tf +++ /dev/null @@ -1,13 +0,0 @@ -terraform { - required_providers { - tencentcloud = { - source = "tencentcloudstack/tencentcloud" -# version = "1.53.0" - } - } -} - -provider "tencentcloud" { - region = "ap-guangzhou" -} - diff --git a/tencentcloud/common.go b/tencentcloud/common.go index 2fc062f251..6dd61f485c 100644 --- a/tencentcloud/common.go +++ b/tencentcloud/common.go @@ -50,7 +50,6 @@ var retryableErrorCode = []string{ "TradeUnknownError", "RequestLimitExceeded", "ResourceInUse", - //"ResourceInsufficient", "ResourceUnavailable", // cbs "ResourceBusy",