Skip to content

Commit 1530a65

Browse files
authored
feat: tke - support addon attachment and datasource (#758)
* feat: tke - support chart addons
1 parent d671102 commit 1530a65

13 files changed

+994
-10
lines changed
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
/*
2+
Use this data source to query detailed information of kubernetes cluster addons.
3+
4+
Example Usage
5+
6+
```hcl
7+
data "tencentcloud_kubernetes_charts" "name" {}
8+
```
9+
*/
10+
package tencentcloud
11+
12+
import (
13+
"context"
14+
"encoding/json"
15+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
16+
tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525"
17+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
18+
)
19+
20+
func dataSourceTencentCloudKubernetesCharts() *schema.Resource {
21+
return &schema.Resource{
22+
Read: dataSourceTencentCloudKubernetesChartsRead,
23+
Schema: map[string]*schema.Schema{
24+
"kind": {
25+
Type: schema.TypeString,
26+
Optional: true,
27+
Description: "Kind of app chart. Available values: `log`, `scheduler`, `network`, `storage`, `monitor`, `dns`, `image`, `other`, `invisible`.",
28+
},
29+
"arch": {
30+
Type: schema.TypeString,
31+
Optional: true,
32+
Description: "Operation system app supported. Available values: `arm32`, `arm64`, `amd64`.",
33+
},
34+
"cluster_type": {
35+
Type: schema.TypeString,
36+
Optional: true,
37+
Description: "Cluster type. Available values: `tke`, `eks`.",
38+
},
39+
"result_output_file": {
40+
Type: schema.TypeString,
41+
Optional: true,
42+
Description: "Used to save results.",
43+
},
44+
"chart_list": {
45+
Type: schema.TypeList,
46+
Computed: true,
47+
Description: "App chart list.",
48+
Elem: &schema.Resource{
49+
Schema: map[string]*schema.Schema{
50+
"name": {
51+
Type: schema.TypeString,
52+
Computed: true,
53+
Description: "Name of chart.",
54+
},
55+
"label": {
56+
Type: schema.TypeMap,
57+
Computed: true,
58+
Description: "Label of chart.",
59+
},
60+
"latest_version": {
61+
Type: schema.TypeString,
62+
Computed: true,
63+
Description: "Chart latest version.",
64+
},
65+
},
66+
},
67+
},
68+
},
69+
}
70+
}
71+
72+
func dataSourceTencentCloudKubernetesChartsRead(d *schema.ResourceData, meta interface{}) error {
73+
defer logElapsed("data_source.tencentcloud_kubernetes_charts.read")()
74+
75+
logId := getLogId(contextNil)
76+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
77+
client := meta.(*TencentCloudClient).apiV3Conn
78+
service := TkeService{client: client}
79+
80+
var (
81+
kind = d.Get("kind").(string)
82+
arch = d.Get("arch").(string)
83+
clusterType = d.Get("cluster_type").(string)
84+
)
85+
86+
request := tke.NewGetTkeAppChartListRequest()
87+
if kind != "" {
88+
request.Kind = &kind
89+
}
90+
91+
if arch != "" {
92+
request.Arch = &arch
93+
}
94+
95+
if clusterType != "" {
96+
request.ClusterType = &clusterType
97+
}
98+
99+
response, err := service.GetTkeAppChartList(ctx, request)
100+
if err != nil {
101+
return err
102+
}
103+
104+
chartList := make([]interface{}, 0)
105+
106+
for i := range response {
107+
item := response[i]
108+
chart := map[string]interface{}{
109+
"name": item.Name,
110+
"latest_version": item.LatestVersion,
111+
}
112+
113+
label := make(map[string]interface{})
114+
115+
if err := json.Unmarshal([]byte(*item.Label), &label); err != nil {
116+
return err
117+
}
118+
119+
chart["label"] = label
120+
121+
chartList = append(chartList, chart)
122+
}
123+
124+
err = d.Set("chart_list", chartList)
125+
126+
if err != nil {
127+
return err
128+
}
129+
130+
output, ok := d.GetOk("result_output_file")
131+
if ok && output.(string) != "" {
132+
err := writeToFile(output.(string), chartList)
133+
if err != nil {
134+
return err
135+
}
136+
}
137+
138+
ids := []string{kind, arch, clusterType}
139+
d.SetId("app_chart_" + helper.DataResourceIdsHash(ids))
140+
141+
return nil
142+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
7+
)
8+
9+
func TestAccTencentCloudKubernetesChartsDataSource(t *testing.T) {
10+
dataSourceName := "data.tencentcloud_kubernetes_charts.test"
11+
12+
resource.Test(t, resource.TestCase{
13+
PreCheck: func() { testAccPreCheck(t) },
14+
Providers: testAccProviders,
15+
Steps: []resource.TestStep{
16+
{
17+
Config: testAccDataSourceKubernetesCharts,
18+
Check: resource.ComposeTestCheckFunc(
19+
resource.TestCheckResourceAttrSet(dataSourceName, "chart_list.#"),
20+
),
21+
},
22+
},
23+
})
24+
}
25+
26+
27+
const testAccDataSourceKubernetesCharts = `
28+
data "tencentcloud_kubernetes_charts" "test" {
29+
}
30+
`
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
package tencentcloud
22

33
const (
4-
DNS_FORWARD_STATUS_ENABLE = "ENABLED"
5-
DNS_FORWARD_STATUS_DISABLED = "DISABLED"
4+
DNS_FORWARD_STATUS_ENABLE = "ENABLED"
5+
DNS_FORWARD_STATUS_DISABLED = "DISABLED"
66
)
77

88
var PRIVATE_DNS_FORWARD_STATUS = []string{
99
DNS_FORWARD_STATUS_ENABLE,
1010
DNS_FORWARD_STATUS_DISABLED,
1111
}
12-

tencentcloud/extension_tke.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,3 +107,16 @@ const (
107107
const (
108108
DefaultAuthenticationOptionsIssuer = "https://kubernetes.default.svc.cluster.local"
109109
)
110+
111+
// This use to filter default values the addon returns.
112+
var TKE_ADDON_DEFAULT_VALUES_KEY = []string{
113+
"global.image.host",
114+
"global.cluster.id",
115+
"global.cluster.appid",
116+
"global.cluster.uin",
117+
"global.cluster.subuin",
118+
"global.cluster.type",
119+
"global.cluster.clustertype",
120+
"global.cluster.kubeversion",
121+
"global.cluster.kubeminor",
122+
}

tencentcloud/provider.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,7 @@ Tencent Kubernetes Engine(TKE)
321321
Data Source
322322
tencentcloud_kubernetes_clusters
323323
tencentcloud_eks_clusters
324+
tencentcloud_kubernetes_charts
324325
325326
Resource
326327
tencentcloud_kubernetes_cluster
@@ -331,6 +332,7 @@ Tencent Kubernetes Engine(TKE)
331332
tencentcloud_eks_cluster
332333
tencentcloud_eks_container_instance
333334
tencentcloud_kubernetes_auth_attachment
335+
tencentcloud_kubernetes_addon_attachment
334336
335337
TDMQ
336338
Resource
@@ -719,6 +721,7 @@ func Provider() terraform.ResourceProvider {
719721
"tencentcloud_security_group": dataSourceTencentCloudSecurityGroup(),
720722
"tencentcloud_security_groups": dataSourceTencentCloudSecurityGroups(),
721723
"tencentcloud_kubernetes_clusters": dataSourceTencentCloudKubernetesClusters(),
724+
"tencentcloud_kubernetes_charts": dataSourceTencentCloudKubernetesCharts(),
722725
"tencentcloud_eks_clusters": dataSourceTencentCloudEKSClusters(),
723726
"tencentcloud_container_clusters": dataSourceTencentCloudContainerClusters(),
724727
"tencentcloud_container_cluster_instances": dataSourceTencentCloudContainerClusterInstances(),
@@ -895,6 +898,7 @@ func Provider() terraform.ResourceProvider {
895898
"tencentcloud_kubernetes_cluster": resourceTencentCloudTkeCluster(),
896899
"tencentcloud_eks_cluster": resourceTencentCloudEksCluster(),
897900
"tencentcloud_eks_container_instance": resourceTencentCloudEksContainerInstance(),
901+
"tencentcloud_kubernetes_addon_attachment": resourceTencentCloudTkeAddonAttachment(),
898902
"tencentcloud_kubernetes_auth_attachment": resourceTencentCloudTKEAuthAttachment(),
899903
"tencentcloud_kubernetes_as_scaling_group": ResourceTencentCloudKubernetesAsScalingGroup(),
900904
"tencentcloud_kubernetes_scale_worker": resourceTencentCloudTkeScaleWorker(),

0 commit comments

Comments
 (0)