Skip to content

Commit abbfc2d

Browse files
authored
Merge pull request #658 from tencentcloudstack/feature/tke-node-pool-backup-instances
feature: TKE node pool support backup instance types
2 parents b099052 + af5022b commit abbfc2d

37 files changed

+2532
-109
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 1.58.4 (Aug 24, 2021)
2+
3+
ENHANCEMENTS:
4+
* Resource `resource_tc_kubernetes_node_pool.go` support `backup_instance_type` for `auto_scaling_config`
5+
16
## 1.58.3 (Aug 18, 2021)
27

38
ENHANCEMENTS:

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ require (
2525
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.199
2626
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.199
2727
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.199
28-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.199
28+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.234
2929
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.199
3030
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.199
3131
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.199
@@ -45,7 +45,7 @@ require (
4545
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag v1.0.199
4646
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcaplusdb v1.0.199
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr v1.0.199
48-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke v1.0.199
48+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke v1.0.234
4949
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.199
5050
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.199
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss v1.0.199

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.199 h1:
460460
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.199/go.mod h1:b7dNjabPys0/iLwRFd8MVE5EkJTNAh4qtaHQOOLchx4=
461461
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.199 h1:TeLKOemumLTjWpkRKNVNhpb7VMDlOPaVEuukrWmab30=
462462
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.199/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
463+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.234 h1:yAtw4jVBsQZ/KcM2nMHRzcpIfSXRw0Alt7wVTR9OodM=
464+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.234/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
463465
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.199 h1:ajgJogYSIQ5u1PIbiV5nsvr5K0fYpm1/T7Dy+mxEM6U=
464466
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.199/go.mod h1:AqyM/ZZMD7q5mHBqNY9YImbSpEpoEe7E/vrTbUWX+po=
465467
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.199 h1:L0twFkJMOZzLkX08w8S14nX6oanD8YxMQDIaYXVim6A=
@@ -500,6 +502,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr v1.0.199 h1:ku4oDXW
500502
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr v1.0.199/go.mod h1:SEUO10oGtg+4AGCfpJDn9ynf47P+ZiyvhzOyXLt0mOY=
501503
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke v1.0.199 h1:AHlrfOhAZnmwQOZ4aitzOb3Tzzw3LBKViPtI40F+ldI=
502504
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke v1.0.199/go.mod h1:ij3CHdPvqI2aSMcl7+jdI0yCO7oOiywKTAa55qmO2iI=
505+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke v1.0.234 h1:bJU0a3yEir4BHTiIHgLvsVqDAFeuHe/r3PML3V92R/o=
506+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke v1.0.234/go.mod h1:ij3CHdPvqI2aSMcl7+jdI0yCO7oOiywKTAa55qmO2iI=
503507
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.199 h1:6Yt74l4pA5QtzhwMNIEUt0spXdSBKH744DDqTHJOCP0=
504508
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.199/go.mod h1:Yw6OQ33z3s4k0HVYTNSffB12qOzEJ2Zf1Vj4+5S3sRs=
505509
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.199 h1:UDZ59pvaqjDy2QIsMsv9hxm0BEJLmPIbHF1ms0MqaRk=

tencentcloud/resource_tc_kubernetes_node_pool.go

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,30 @@ import (
108108
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
109109
)
110110

111+
func getNodePoolInstanceTypes(d *schema.ResourceData) []*string {
112+
configParas := d.Get("auto_scaling_config").([]interface{})
113+
dMap := configParas[0].(map[string]interface{})
114+
instanceType, _ := dMap["instance_type"]
115+
currInsType := instanceType.(string)
116+
v, ok := dMap["backup_instance_types"]
117+
backupInstanceTypes := v.([]interface{})
118+
instanceTypes := make([]*string, 0)
119+
if !ok || len(backupInstanceTypes) == 0 {
120+
instanceTypes = append(instanceTypes, &currInsType)
121+
return instanceTypes
122+
}
123+
headType := backupInstanceTypes[0].(string)
124+
if headType != currInsType {
125+
instanceTypes = append(instanceTypes, &currInsType)
126+
}
127+
for i := range backupInstanceTypes {
128+
insType := backupInstanceTypes[i].(string)
129+
instanceTypes = append(instanceTypes, &insType)
130+
}
131+
132+
return instanceTypes
133+
}
134+
111135
func composedKubernetesAsScalingConfigPara() map[string]*schema.Schema {
112136
needSchema := map[string]*schema.Schema{
113137
"instance_type": {
@@ -116,6 +140,12 @@ func composedKubernetesAsScalingConfigPara() map[string]*schema.Schema {
116140
ForceNew: true,
117141
Description: "Specified types of CVM instance.",
118142
},
143+
"backup_instance_types": {
144+
Type: schema.TypeList,
145+
Optional: true,
146+
Description: "Backup CVM instance types if specified instance type sold out or mismatch.",
147+
Elem: &schema.Schema{Type: schema.TypeString},
148+
},
119149
"system_disk_type": {
120150
Type: schema.TypeString,
121151
Optional: true,
@@ -457,7 +487,7 @@ func composeParameterToAsScalingGroupParaSerial(d *schema.ResourceData) (string,
457487
}
458488

459489
//this function is similar to kubernetesAsScalingConfigParaSerial, but less parameter
460-
func comosedKubernetesAsScalingConfigParaSerial(dMap map[string]interface{}, meta interface{}) (string, error) {
490+
func composedKubernetesAsScalingConfigParaSerial(dMap map[string]interface{}, meta interface{}) (string, error) {
461491
var (
462492
result string
463493
errRet error
@@ -687,7 +717,7 @@ func resourceKubernetesNodePoolCreate(d *schema.ResourceData, meta interface{})
687717
return err
688718
}
689719

690-
configParaStr, err := comosedKubernetesAsScalingConfigParaSerial(configParas[0].(map[string]interface{}), meta)
720+
configParaStr, err := composedKubernetesAsScalingConfigParaSerial(configParas[0].(map[string]interface{}), meta)
691721
if err != nil {
692722
return err
693723
}
@@ -742,7 +772,16 @@ func resourceKubernetesNodePoolCreate(d *schema.ResourceData, meta interface{})
742772
return err
743773
}
744774

745-
//modify os and image
775+
instanceTypes := getNodePoolInstanceTypes(d)
776+
777+
if len(instanceTypes) != 0 {
778+
err := service.ModifyClusterNodePoolInstanceTypes(ctx, clusterId, nodePoolId, instanceTypes)
779+
if err != nil {
780+
return err
781+
}
782+
}
783+
784+
//modify os, instanceTypes and image
746785
err = resourceKubernetesNodePoolUpdate(d, meta)
747786
if err != nil {
748787
return err
@@ -811,6 +850,21 @@ func resourceKubernetesNodePoolUpdate(d *schema.ResourceData, meta interface{})
811850
}
812851
d.SetPartial("desired_capacity")
813852
}
853+
854+
if d.HasChange("auto_scaling_config.0.backup_instance_types") {
855+
instanceTypes := getNodePoolInstanceTypes(d)
856+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
857+
errRet := service.ModifyClusterNodePoolInstanceTypes(ctx, clusterId, nodePoolId, instanceTypes)
858+
if errRet != nil {
859+
return retryError(errRet)
860+
}
861+
return nil
862+
})
863+
if err != nil {
864+
return err
865+
}
866+
d.Set("auto_scaling_config.0.backup_instance_types", instanceTypes)
867+
}
814868
d.Partial(false)
815869

816870
return resourceKubernetesNodePoolRead(d, meta)

tencentcloud/service_tencentcloud_tke.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1227,6 +1227,28 @@ func (me *TkeService) ModifyClusterNodePoolDesiredCapacity(ctx context.Context,
12271227
return
12281228
}
12291229

1230+
func (me *TkeService) ModifyClusterNodePoolInstanceTypes(ctx context.Context, clusterId, nodePoolId string, instanceTypes []*string) (errRet error) {
1231+
logId := getLogId(ctx)
1232+
request := tke.NewModifyNodePoolInstanceTypesRequest()
1233+
1234+
defer func() {
1235+
if errRet != nil {
1236+
log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error())
1237+
}
1238+
}()
1239+
request.ClusterId = &clusterId
1240+
request.NodePoolId = &nodePoolId
1241+
request.InstanceTypes = instanceTypes
1242+
1243+
ratelimit.Check(request.GetAction())
1244+
_, err := me.client.UseTkeClient().ModifyNodePoolInstanceTypes(request)
1245+
if err != nil {
1246+
errRet = err
1247+
return
1248+
}
1249+
return
1250+
}
1251+
12301252
func (me *TkeService) DeleteClusterNodePool(ctx context.Context, id, nodePoolId string, deleteKeepInstance bool) (errRet error) {
12311253

12321254
logId := getLogId(ctx)

0 commit comments

Comments
 (0)