Skip to content

Commit 705679f

Browse files
ludelafodacbd
andauthored
Add support for Kubernetes arbitrary node selector (#747)
* Add support for Kubernetes arbitrary node selector in Terraform provider * Kubernetes node selector is now a map in Terraform provider * Remove default value to reflect the metadata * Set the limits outside the definition of the node selector * Revert changes to task * Move the default value to the Terraform Provider Iterative side --------- Co-authored-by: Daniel Barnes <dabarnes2b@gmail.com>
1 parent 1b2211c commit 705679f

File tree

3 files changed

+37
-9
lines changed

3 files changed

+37
-9
lines changed

iterative/kubernetes/provider.go

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ func ResourceMachineCreate(ctx context.Context, d *terraform_schema.ResourceData
5151
}
5252

5353
// Define the accelerator settings (i.e. GPU type, model, ...)
54-
jobNodeSelector := map[string]string{}
5554
jobAccelerator := instanceType["accelerator"]["model"]
5655
jobGPUType := instanceType["accelerator"]["type"]
5756
jobGPUCount := instanceType["accelerator"]["count"]
@@ -63,6 +62,27 @@ func ResourceMachineCreate(ctx context.Context, d *terraform_schema.ResourceData
6362
if diskAmount := d.Get("instance_hdd_size").(int); diskAmount > 0 {
6463
jobLimits[kubernetes_core.ResourceName("ephemeral-storage")] = kubernetes_resource.MustParse(strconv.Itoa(diskAmount) + "G")
6564
}
65+
if jobGPUCount > "0" && jobGPUType != "" {
66+
jobLimits[kubernetes_core.ResourceName(jobGPUType)] = kubernetes_resource.MustParse(jobGPUCount)
67+
}
68+
69+
// Get the node selector defined by the user
70+
kubernetesNodeSelector := d.Get("kubernetes_node_selector").(map[string]interface{})
71+
72+
// Set the default key value if none is defined
73+
if len(kubernetesNodeSelector) == 0 {
74+
kubernetesNodeSelector["accelerator"] = "infer"
75+
}
76+
77+
// Define the node selector
78+
jobNodeSelector := map[string]string{}
79+
for selector, value := range kubernetesNodeSelector {
80+
if value.(string) != "infer" {
81+
jobNodeSelector[selector] = value.(string)
82+
} else if jobGPUCount > "0" && jobAccelerator != "" {
83+
jobNodeSelector[selector] = jobAccelerator
84+
}
85+
}
6686

6787
// Use the default CML Docker image unless specified otherwise.
6888
jobImageName := jobName
@@ -77,14 +97,6 @@ func ResourceMachineCreate(ctx context.Context, d *terraform_schema.ResourceData
7797
return err
7898
}
7999

80-
// If the resource requires GPU provisioning, determine how many GPUs and the kind of GPU it needs.
81-
if jobGPUCount > "0" {
82-
jobLimits[kubernetes_core.ResourceName(jobGPUType)] = kubernetes_resource.MustParse(jobGPUCount)
83-
if jobAccelerator != "" {
84-
jobNodeSelector = map[string]string{"accelerator": jobAccelerator}
85-
}
86-
}
87-
88100
// Lookup service account if set.
89101
svcAccount, svcTokenAutomount, err := getServiceAccount(ctx, conn, namespace, d.Get("instance_permission_set").(string))
90102
if err != nil {

iterative/resource_machine.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,14 @@ func machineSchema() *map[string]*schema.Schema {
134134
Optional: true,
135135
Default: "",
136136
},
137+
"kubernetes_node_selector": &schema.Schema{
138+
Type: schema.TypeMap,
139+
ForceNew: true,
140+
Optional: true,
141+
Elem: &schema.Schema{
142+
Type: schema.TypeString,
143+
},
144+
},
137145
"metadata": &schema.Schema{
138146
Type: schema.TypeMap,
139147
ForceNew: true,

iterative/resource_runner.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,14 @@ func resourceRunner() *schema.Resource {
175175
Optional: true,
176176
Default: "",
177177
},
178+
"kubernetes_node_selector": &schema.Schema{
179+
Type: schema.TypeMap,
180+
ForceNew: true,
181+
Optional: true,
182+
Elem: &schema.Schema{
183+
Type: schema.TypeString,
184+
},
185+
},
178186
"metadata": &schema.Schema{
179187
Type: schema.TypeMap,
180188
ForceNew: true,

0 commit comments

Comments
 (0)