diff --git a/.changelog/3258.txt b/.changelog/3258.txt new file mode 100644 index 0000000000..8f81d3bb3a --- /dev/null +++ b/.changelog/3258.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/tencentcloud_kubernetes_cluster: Optimize resource import +``` \ 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 e2e7983d61..a5102b05e4 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_cluster.md +++ b/tencentcloud/services/tke/resource_tc_kubernetes_cluster.md @@ -7,6 +7,8 @@ It's more flexible than managing worker config directly with `tencentcloud_kuber ~> **NOTE:** Executing `terraform destroy` to destroy the resource will default to deleting the node resource, If it is necessary to preserve node instance resources, Please set `instance_delete_mode` to `retain`. +~> **NOTE:** If you want to set up addon for the tke cluster, it is recommended to use resource `tencentcloud_kubernetes_addon`. + Example Usage Create a basic cluster with two worker nodes diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_cluster_extension.go b/tencentcloud/services/tke/resource_tc_kubernetes_cluster_extension.go index 290965c0c5..c1347ead12 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_cluster_extension.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_cluster_extension.go @@ -773,43 +773,6 @@ func resourceTencentCloudKubernetesClusterReadPostHandleResponse0(ctx context.Co _ = d.Set("cluster_audit", audits) } - applist, err := service.DescribeExtensionAddonList(ctx, d.Id()) - if err != nil { - return err - } - addons := make([]map[string]interface{}, 0) - for _, item := range applist.Items { - if item.Status.Phase == "Succeeded" && item.Labels["application.tkestack.io/type"] == "internal-addon" { - addonParam := AddonRequestBody{ - Kind: helper.String("App"), - Spec: &AddonSpec{ - Chart: &AddonSpecChart{ - ChartName: item.Spec.Chart.ChartName, - ChartVersion: item.Spec.Chart.ChartVersion, - }, - Values: &AddonSpecValues{ - Values: item.Spec.Values.Values, - RawValues: item.Spec.Values.RawValues, - RawValuesType: item.Spec.Values.RawValuesType, - }, - }, - } - result, err := json.Marshal(addonParam) - if err != nil { - return err - } - - addon := map[string]interface{}{ - "name": item.Name, - "param": string(result), - } - addons = append(addons, addon) - } - } - if len(addons) > 0 { - _ = d.Set("extension_addon", addons) - } - resp, err := service.DescribeClusterExtraArgs(ctx, d.Id()) if err != nil { return err diff --git a/tencentcloud/services/tke/service_tencentcloud_tke_addons.go b/tencentcloud/services/tke/service_tencentcloud_tke_addons.go index c5b1c4a697..d572934741 100644 --- a/tencentcloud/services/tke/service_tencentcloud_tke_addons.go +++ b/tencentcloud/services/tke/service_tencentcloud_tke_addons.go @@ -134,6 +134,67 @@ func (me *TkeService) DescribeExtensionAddonList(ctx context.Context, clusterId return appList, err } +func (me *TkeService) DescribeAddonList(ctx context.Context, clusterId string) (ret []*tke.Addon, errRet error) { + request := tke.NewDescribeAddonRequest() + response := tke.NewDescribeAddonResponse() + request.ClusterId = &clusterId + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := me.client.UseTkeClient().DescribeAddon(request) + if e != nil { + return tccommon.RetryError(e) + } + + if result == nil || result.Response == nil { + return resource.NonRetryableError(fmt.Errorf("Response is nil.")) + } + + response = result + return nil + }) + + if err != nil { + errRet = err + return + } + + if len(response.Response.Addons) == 0 { + return + } + + ret = response.Response.Addons + return +} + +func (me *TkeService) DescribeAddonValuesList(ctx context.Context, clusterId, addonName string) (ret *tke.DescribeAddonValuesResponseParams, errRet error) { + request := tke.NewDescribeAddonValuesRequest() + response := tke.NewDescribeAddonValuesResponse() + request.ClusterId = &clusterId + request.AddonName = &addonName + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := me.client.UseTkeClient().DescribeAddonValues(request) + if e != nil { + return tccommon.RetryError(e) + } + + if result == nil || result.Response == nil { + return resource.NonRetryableError(fmt.Errorf("Response is nil.")) + } + + response = result + return nil + }) + + if err != nil { + errRet = err + return + } + + ret = response.Response + return +} + func (me *TkeService) PollingAddonsPhase(ctx context.Context, clusterId, addonName string, addonResponseData *AddonResponseData) (string, bool, error) { var ( err error diff --git a/website/docs/r/kubernetes_cluster.html.markdown b/website/docs/r/kubernetes_cluster.html.markdown index 521619cc18..2006b1eaa1 100644 --- a/website/docs/r/kubernetes_cluster.html.markdown +++ b/website/docs/r/kubernetes_cluster.html.markdown @@ -18,6 +18,8 @@ It's more flexible than managing worker config directly with `tencentcloud_kuber ~> **NOTE:** Executing `terraform destroy` to destroy the resource will default to deleting the node resource, If it is necessary to preserve node instance resources, Please set `instance_delete_mode` to `retain`. +~> **NOTE:** If you want to set up addon for the tke cluster, it is recommended to use resource `tencentcloud_kubernetes_addon`. + ## Example Usage ### Create a basic cluster with two worker nodes