Skip to content

Commit acef44f

Browse files
feat(tke): [119316402] tencentcloud_kubernetes_node_pool support delete taints and labels params (#2837)
* feat(tke): delete taints and lables * docs(tke): add changelog * docs(tke): add changelog * fix * add * feat(tke): delete taints and labels * feat(tke): delete taints and labels * feat(tke): delete taints and labels * add --------- Co-authored-by: SevenEarth <391613297@qq.com>
1 parent e3bad7d commit acef44f

File tree

3 files changed

+172
-41
lines changed

3 files changed

+172
-41
lines changed

.changelog/2837.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_kubernetes_node_pool: support delete `taints` and `labels` params
3+
```

tencentcloud/services/tke/resource_tc_kubernetes_node_pool.go

Lines changed: 42 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tencentcloud/services/tke/resource_tc_kubernetes_node_pool_extension.go

Lines changed: 127 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"log"
77
"strings"
88

9+
tchttp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http"
10+
911
as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419"
1012
sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
1113

@@ -616,45 +618,49 @@ func resourceTencentCloudKubernetesNodePoolUpdateOnStart(ctx context.Context) er
616618
"labels",
617619
"tags",
618620
) {
619-
request := tke.NewModifyClusterNodePoolRequest()
620-
request.ClusterId = &clusterId
621-
request.NodePoolId = &nodePoolId
621+
var body map[string]interface{}
622+
nodeOs := d.Get("node_os").(string)
623+
nodeOsType := d.Get("node_os_type").(string)
624+
//自定镜像不能指定节点操作系统类型
625+
if strings.Contains(nodeOs, "img-") {
626+
nodeOsType = ""
627+
}
622628

623629
labels := GetTkeLabels(d, "labels")
624-
tags := helper.GetTags(d, "tags")
625-
if len(labels) > 0 {
626-
request.Labels = labels
630+
body = map[string]interface{}{
631+
"ClusterId": clusterId,
632+
"NodePoolId": nodePoolId,
633+
"OsName": nodeOs,
634+
"OsCustomizeType": nodeOsType,
635+
"Labels": labels,
627636
}
637+
638+
tags := helper.GetTags(d, "tags")
628639
if len(tags) > 0 {
640+
var tmpTags []*tke.Tag
629641
for k, v := range tags {
630642
key := k
631643
val := v
632-
request.Tags = append(request.Tags, &tke.Tag{
644+
tmpTags = append(tmpTags, &tke.Tag{
633645
Key: &key,
634646
Value: &val,
635647
})
636648
}
649+
650+
body["Tags"] = tmpTags
637651
}
638652

639-
nodeOs := d.Get("node_os").(string)
640-
nodeOsType := d.Get("node_os_type").(string)
641-
//自定镜像不能指定节点操作系统类型
642-
if strings.Contains(nodeOs, "img-") {
643-
nodeOsType = ""
653+
client := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOmitNilClient("tke")
654+
request := tchttp.NewCommonRequest("tke", "2018-05-25", "ModifyClusterNodePool")
655+
err := request.SetActionParameters(body)
656+
if err != nil {
657+
return err
644658
}
645-
request.OsName = &nodeOs
646-
request.OsCustomizeType = &nodeOsType
647-
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
648-
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeClient().ModifyClusterNodePool(request)
649-
if e != nil {
650-
return tccommon.RetryError(e)
651-
} else {
652-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
653-
}
654-
return nil
655-
})
659+
660+
response := tchttp.NewCommonResponse()
661+
err = client.Send(request, response)
656662
if err != nil {
657-
log.Printf("[CRITAL]%s update kubernetes node pool failed, reason:%+v", logId, err)
663+
fmt.Printf("update kubernetes node pool taints failed: %v \n", err)
658664
return err
659665
}
660666

@@ -707,6 +713,11 @@ func resourceTencentCloudKubernetesNodePoolUpdateOnExit(ctx context.Context) err
707713
clusterId := items[0]
708714
nodePoolId := items[1]
709715

716+
err := resourceTencentCloudKubernetesNodePoolUpdateTaints(ctx, clusterId, nodePoolId)
717+
if err != nil {
718+
return err
719+
}
720+
710721
// ModifyScalingGroup
711722
if d.HasChange("scaling_group_name") ||
712723
d.HasChange("zones") ||
@@ -1243,3 +1254,95 @@ func desiredCapacityOutRange(d *schema.ResourceData) bool {
12431254
maxSize := d.Get("max_size").(int)
12441255
return capacity > maxSize || capacity < minSize
12451256
}
1257+
1258+
func resourceTencentCloudKubernetesNodePoolUpdateTaints(ctx context.Context, clusterId string, nodePoolId string) error {
1259+
d := tccommon.ResourceDataFromContext(ctx)
1260+
meta := tccommon.ProviderMetaFromContext(ctx)
1261+
logId := tccommon.GetLogId(tccommon.ContextNil)
1262+
1263+
if d.HasChange("taints") {
1264+
_, n := d.GetChange("taints")
1265+
1266+
// clean taints
1267+
if len(n.([]interface{})) == 0 {
1268+
body := map[string]interface{}{
1269+
"ClusterId": clusterId,
1270+
"NodePoolId": nodePoolId,
1271+
"Taints": []interface{}{},
1272+
}
1273+
1274+
client := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOmitNilClient("tke")
1275+
request := tchttp.NewCommonRequest("tke", "2018-05-25", "ModifyClusterNodePool")
1276+
err := request.SetActionParameters(body)
1277+
if err != nil {
1278+
return err
1279+
}
1280+
1281+
response := tchttp.NewCommonResponse()
1282+
err = client.Send(request, response)
1283+
if err != nil {
1284+
fmt.Printf("update kubernetes node pool taints failed: %v \n", err)
1285+
return err
1286+
}
1287+
} else {
1288+
request := tke.NewModifyClusterNodePoolRequest()
1289+
request.ClusterId = helper.String(clusterId)
1290+
request.NodePoolId = helper.String(nodePoolId)
1291+
1292+
if v, ok := d.GetOk("taints"); ok {
1293+
for _, item := range v.([]interface{}) {
1294+
taintsMap := item.(map[string]interface{})
1295+
taint := tke.Taint{}
1296+
if v, ok := taintsMap["key"]; ok {
1297+
taint.Key = helper.String(v.(string))
1298+
}
1299+
1300+
if v, ok := taintsMap["value"]; ok {
1301+
taint.Value = helper.String(v.(string))
1302+
}
1303+
1304+
if v, ok := taintsMap["effect"]; ok {
1305+
taint.Effect = helper.String(v.(string))
1306+
}
1307+
1308+
request.Taints = append(request.Taints, &taint)
1309+
}
1310+
}
1311+
1312+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
1313+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeV20180525Client().ModifyClusterNodePoolWithContext(ctx, request)
1314+
if e != nil {
1315+
return tccommon.RetryError(e)
1316+
} else {
1317+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
1318+
}
1319+
1320+
return nil
1321+
})
1322+
1323+
if err != nil {
1324+
log.Printf("[CRITAL]%s update kubernetes node pool taints failed, reason:%+v", logId, err)
1325+
return err
1326+
}
1327+
}
1328+
1329+
service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
1330+
err := resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError {
1331+
nodePool, _, errRet := service.DescribeNodePool(ctx, clusterId, nodePoolId)
1332+
if errRet != nil {
1333+
return tccommon.RetryError(errRet, tccommon.InternalError)
1334+
}
1335+
if nodePool != nil && *nodePool.LifeState == "normal" {
1336+
return nil
1337+
}
1338+
return resource.RetryableError(fmt.Errorf("node pool status is %s, retry...", *nodePool.LifeState))
1339+
})
1340+
1341+
if err != nil {
1342+
return err
1343+
}
1344+
1345+
return nil
1346+
}
1347+
return nil
1348+
}

0 commit comments

Comments
 (0)