Skip to content

Commit 9ff4323

Browse files
committed
feat: support setting tke gpu args
1 parent 63914f2 commit 9ff4323

File tree

4 files changed

+179
-1
lines changed

4 files changed

+179
-1
lines changed

.changelog/1593.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_kubernetes_scale_worker: feat: support setting tke gpu args
3+
```
4+
```release-note:enhancement
5+
resource/tencentcloud_kubernetes_cluster_attachment: feat: support setting tke gpu args
6+
```
7+
```release-note:enhancement
8+
resource/tencentcloud_kubernetes_node_pool: feat: support setting tke gpu args
9+
```

tencentcloud/resource_tc_kubernetes_cluster_attachment.go

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,101 @@ import (
112112
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit"
113113
)
114114

115+
func TKEGpuArgsSetting() map[string]*schema.Schema {
116+
return map[string]*schema.Schema{
117+
"mig_enable": {
118+
Type: schema.TypeBool,
119+
Optional: true,
120+
Default: false,
121+
Description: "Whether to enable MIG.",
122+
},
123+
"driver": {
124+
Type: schema.TypeMap,
125+
Optional: true,
126+
ValidateFunc: validateTkeGpuDriverVersion,
127+
Elem: &schema.Resource{
128+
Schema: map[string]*schema.Schema{
129+
"version": {
130+
Type: schema.TypeString,
131+
Required: true,
132+
Description: "Version of GPU driver or CUDA.",
133+
},
134+
"name": {
135+
Type: schema.TypeString,
136+
Required: true,
137+
Description: "Name of GPU driver or CUDA.",
138+
},
139+
},
140+
},
141+
Description: "GPU driver version.",
142+
},
143+
"cuda": {
144+
Type: schema.TypeMap,
145+
Optional: true,
146+
ValidateFunc: validateTkeGpuDriverVersion,
147+
Elem: &schema.Resource{
148+
Schema: map[string]*schema.Schema{
149+
"version": {
150+
Type: schema.TypeString,
151+
Required: true,
152+
Description: "Version of GPU driver or CUDA.",
153+
},
154+
"name": {
155+
Type: schema.TypeString,
156+
Required: true,
157+
Description: "Name of GPU driver or CUDA.",
158+
},
159+
},
160+
},
161+
Description: "CUDA version.",
162+
},
163+
"cudnn": {
164+
Type: schema.TypeMap,
165+
Optional: true,
166+
ValidateFunc: validateTkeGpuDriverVersion,
167+
Elem: &schema.Resource{
168+
Schema: map[string]*schema.Schema{
169+
"version": {
170+
Type: schema.TypeString,
171+
Required: true,
172+
Description: "cuDNN version.",
173+
},
174+
"name": {
175+
Type: schema.TypeString,
176+
Required: true,
177+
Description: "cuDNN name.",
178+
},
179+
"doc_name": {
180+
Type: schema.TypeString,
181+
Optional: true,
182+
Description: "Doc name of cuDNN.",
183+
},
184+
"dev_name": {
185+
Type: schema.TypeString,
186+
Optional: true,
187+
Description: "Dev name of cuDNN.",
188+
},
189+
},
190+
},
191+
Description: "cuDNN version.",
192+
},
193+
"custom_driver": {
194+
Type: schema.TypeMap,
195+
Optional: true,
196+
Elem: &schema.Resource{
197+
Schema: map[string]*schema.Schema{
198+
"address": {
199+
Type: schema.TypeString,
200+
Optional: true,
201+
Description: "URL of custom GPU driver address.",
202+
},
203+
},
204+
},
205+
Description: "Custom GPU driver.",
206+
},
207+
}
208+
}
209+
115210
func TkeInstanceAdvancedSetting() map[string]*schema.Schema {
116211
return map[string]*schema.Schema{
117212
"mount_target": {
@@ -206,6 +301,16 @@ func TkeInstanceAdvancedSetting() map[string]*schema.Schema {
206301
Optional: true,
207302
Description: "Indicate to set desired pod number in node. valid when the cluster is podCIDR.",
208303
},
304+
"gpu_args": {
305+
Type: schema.TypeList,
306+
Optional: true,
307+
ForceNew: true,
308+
MaxItems: 1,
309+
Elem: &schema.Resource{
310+
Schema: TKEGpuArgsSetting(),
311+
},
312+
Description: "GPU driver parameters.",
313+
},
209314
}
210315
}
211316

@@ -363,6 +468,47 @@ func tkeGetInstanceAdvancedPara(dMap map[string]interface{}, meta interface{}) (
363468
setting.ExtraArgs = &clusterExtraArgs
364469
}
365470

471+
// get gpu_args
472+
if v, ok := dMap["gpu_args"]; ok {
473+
gpuArgs := v.([]interface{})[0].(map[string]interface{})
474+
475+
var (
476+
migEnable = gpuArgs["mig_enable"].(bool)
477+
driver = gpuArgs["driver"].(map[string]interface{})
478+
cuda = gpuArgs["cuda"].(map[string]interface{})
479+
cudnn = gpuArgs["cudnn"].(map[string]interface{})
480+
customDriver = gpuArgs["custom_driver"].(map[string]interface{})
481+
)
482+
tkeGpuArgs := tke.GPUArgs{}
483+
tkeGpuArgs.MIGEnable = &migEnable
484+
if driver != nil && len(driver) > 0 {
485+
tkeGpuArgs.Driver = &tke.DriverVersion{
486+
Version: helper.String(driver["version"].(string)),
487+
Name: helper.String(driver["name"].(string)),
488+
}
489+
}
490+
if cuda != nil && len(cuda) > 0 {
491+
tkeGpuArgs.CUDA = &tke.DriverVersion{
492+
Version: helper.String(cuda["version"].(string)),
493+
Name: helper.String(cuda["name"].(string)),
494+
}
495+
}
496+
if cudnn != nil && len(cudnn) > 0 {
497+
tkeGpuArgs.CUDNN = &tke.CUDNN{
498+
Version: helper.String(cudnn["version"].(string)),
499+
Name: helper.String(cudnn["name"].(string)),
500+
DocName: helper.String(cudnn["doc_name"].(string)),
501+
DevName: helper.String(cudnn["dev_name"].(string)),
502+
}
503+
}
504+
if customDriver != nil && len(customDriver) > 0 {
505+
tkeGpuArgs.CustomDriver = &tke.CustomDriver{
506+
Address: helper.String(customDriver["address"].(string)),
507+
}
508+
}
509+
setting.GPUArgs = &tkeGpuArgs
510+
}
511+
366512
return setting
367513
}
368514
func resourceTencentCloudTkeClusterAttachmentRead(d *schema.ResourceData, meta interface{}) error {

tencentcloud/resource_tc_kubernetes_scale_worker.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,16 @@ func resourceTencentCloudTkeScaleWorker() *schema.Resource {
155155
Elem: &schema.Schema{Type: schema.TypeString},
156156
Description: "Custom parameter information related to the node.",
157157
},
158+
"gpu_args": {
159+
Type: schema.TypeList,
160+
Optional: true,
161+
ForceNew: true,
162+
MaxItems: 1,
163+
Elem: &schema.Resource{
164+
Schema: TKEGpuArgsSetting(),
165+
},
166+
Description: "GPU driver parameters.",
167+
},
158168
"unschedulable": {
159169
Type: schema.TypeInt,
160170
Optional: true,
@@ -277,7 +287,7 @@ func resourceTencentCloudTkeScaleWorkerCreate(d *schema.ResourceData, meta inter
277287

278288
dMap := make(map[string]interface{}, 5)
279289
//mount_target, docker_graph_path, data_disk, extra_args, desired_pod_num
280-
iAdvancedParas := []string{"mount_target", "docker_graph_path", "extra_args", "data_disk", "desired_pod_num"}
290+
iAdvancedParas := []string{"mount_target", "docker_graph_path", "extra_args", "data_disk", "desired_pod_num", "gpu_args"}
281291
for _, k := range iAdvancedParas {
282292
if v, ok := d.GetOk(k); ok {
283293
dMap[k] = v

tencentcloud/validators.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,3 +378,16 @@ func validateYaml(v interface{}, k string) (ws []string, errors []error) {
378378
}
379379
return
380380
}
381+
382+
func validateTkeGpuDriverVersion(v interface{}, k string) (ws []string, errors []error) {
383+
value := v.(map[string]interface{})
384+
if len(value) > 0 {
385+
keySet := []string{"name", "version"}
386+
for _, paraKey := range keySet {
387+
if value[paraKey] == nil || strings.TrimSpace(value[paraKey].(string)) == "" {
388+
errors = append(errors, fmt.Errorf("%s in %s cannot be empty", paraKey, k))
389+
}
390+
}
391+
}
392+
return
393+
}

0 commit comments

Comments
 (0)