|
6 | 6 | "log" |
7 | 7 | "strings" |
8 | 8 |
|
| 9 | + tchttp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" |
| 10 | + |
9 | 11 | as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" |
10 | 12 | sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" |
11 | 13 |
|
@@ -616,45 +618,49 @@ func resourceTencentCloudKubernetesNodePoolUpdateOnStart(ctx context.Context) er |
616 | 618 | "labels", |
617 | 619 | "tags", |
618 | 620 | ) { |
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 | + } |
622 | 628 |
|
623 | 629 | 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, |
627 | 636 | } |
| 637 | + |
| 638 | + tags := helper.GetTags(d, "tags") |
628 | 639 | if len(tags) > 0 { |
| 640 | + var tmpTags []*tke.Tag |
629 | 641 | for k, v := range tags { |
630 | 642 | key := k |
631 | 643 | val := v |
632 | | - request.Tags = append(request.Tags, &tke.Tag{ |
| 644 | + tmpTags = append(tmpTags, &tke.Tag{ |
633 | 645 | Key: &key, |
634 | 646 | Value: &val, |
635 | 647 | }) |
636 | 648 | } |
| 649 | + |
| 650 | + body["Tags"] = tmpTags |
637 | 651 | } |
638 | 652 |
|
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 |
644 | 658 | } |
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) |
656 | 662 | 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) |
658 | 664 | return err |
659 | 665 | } |
660 | 666 |
|
@@ -707,6 +713,11 @@ func resourceTencentCloudKubernetesNodePoolUpdateOnExit(ctx context.Context) err |
707 | 713 | clusterId := items[0] |
708 | 714 | nodePoolId := items[1] |
709 | 715 |
|
| 716 | + err := resourceTencentCloudKubernetesNodePoolUpdateTaints(ctx, clusterId, nodePoolId) |
| 717 | + if err != nil { |
| 718 | + return err |
| 719 | + } |
| 720 | + |
710 | 721 | // ModifyScalingGroup |
711 | 722 | if d.HasChange("scaling_group_name") || |
712 | 723 | d.HasChange("zones") || |
@@ -1243,3 +1254,95 @@ func desiredCapacityOutRange(d *schema.ResourceData) bool { |
1243 | 1254 | maxSize := d.Get("max_size").(int) |
1244 | 1255 | return capacity > maxSize || capacity < minSize |
1245 | 1256 | } |
| 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