Skip to content

Commit 30bb62d

Browse files
authored
Merge branch 'master' into model-custom-upload-path
2 parents b0371c0 + ff97283 commit 30bb62d

File tree

4 files changed

+1230
-10
lines changed

4 files changed

+1230
-10
lines changed

backend/src/v2/driver/k8s.go

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package driver
1717
import (
1818
"context"
1919
"encoding/json"
20+
"errors"
2021
"fmt"
2122
"time"
2223

@@ -178,22 +179,31 @@ func extendPodSpecPatch(
178179
// Get node selector information
179180
if kubernetesExecutorConfig.GetNodeSelector() != nil {
180181
var nodeSelector map[string]string
182+
// skipNodeSelector marks when the node selector input resolved to a null optional
183+
// value. In that case we avoid appending an empty selector to the pod spec.
184+
skipNodeSelector := false
181185
if kubernetesExecutorConfig.GetNodeSelector().GetNodeSelectorJson() != nil {
182186
err := resolveK8sJsonParameter(ctx, opts, dag, pipeline, mlmd,
183187
kubernetesExecutorConfig.GetNodeSelector().GetNodeSelectorJson(), inputParams, &nodeSelector)
184188
if err != nil {
185-
return fmt.Errorf("failed to resolve node selector: %w", err)
189+
if errors.Is(err, ErrResolvedParameterNull) {
190+
skipNodeSelector = true
191+
} else {
192+
return fmt.Errorf("failed to resolve node selector: %w", err)
193+
}
186194
}
187195
} else {
188196
nodeSelector = kubernetesExecutorConfig.GetNodeSelector().GetLabels()
189197
}
190198

191-
if setOnTaskConfig[pipelinespec.TaskConfigPassthroughType_KUBERNETES_NODE_SELECTOR] {
192-
taskConfig.NodeSelector = nodeSelector
193-
}
199+
if !skipNodeSelector {
200+
if setOnTaskConfig[pipelinespec.TaskConfigPassthroughType_KUBERNETES_NODE_SELECTOR] {
201+
taskConfig.NodeSelector = nodeSelector
202+
}
194203

195-
if setOnPod[pipelinespec.TaskConfigPassthroughType_KUBERNETES_NODE_SELECTOR] {
196-
podSpec.NodeSelector = nodeSelector
204+
if setOnPod[pipelinespec.TaskConfigPassthroughType_KUBERNETES_NODE_SELECTOR] {
205+
podSpec.NodeSelector = nodeSelector
206+
}
197207
}
198208
}
199209

@@ -209,6 +219,9 @@ func extendPodSpecPatch(
209219
resolvedParam, err := resolveInputParameter(ctx, dag, pipeline, opts, mlmd,
210220
toleration.GetTolerationJson(), inputParams)
211221
if err != nil {
222+
if errors.Is(err, ErrResolvedParameterNull) {
223+
continue // Skip applying the patch for this null/optional parameter
224+
}
212225
return fmt.Errorf("failed to resolve toleration: %w", err)
213226
}
214227

@@ -278,6 +291,9 @@ func extendPodSpecPatch(
278291
resolvedSecretName, err := resolveInputParameterStr(ctx, dag, pipeline, opts, mlmd,
279292
secretAsVolume.SecretNameParameter, inputParams)
280293
if err != nil {
294+
if errors.Is(err, ErrResolvedParameterNull) {
295+
continue
296+
}
281297
return fmt.Errorf("failed to resolve secret name: %w", err)
282298
}
283299
secretName = resolvedSecretName.GetStringValue()
@@ -337,6 +353,9 @@ func extendPodSpecPatch(
337353
resolvedSecretName, err := resolveInputParameterStr(ctx, dag, pipeline, opts, mlmd,
338354
secretAsEnv.SecretNameParameter, inputParams)
339355
if err != nil {
356+
if errors.Is(err, ErrResolvedParameterNull) {
357+
continue
358+
}
340359
return fmt.Errorf("failed to resolve secret name: %w", err)
341360
}
342361
secretName = resolvedSecretName.GetStringValue()
@@ -363,12 +382,15 @@ func extendPodSpecPatch(
363382
for _, configMapAsVolume := range kubernetesExecutorConfig.GetConfigMapAsVolume() {
364383
var configMapName string
365384
if configMapAsVolume.ConfigMapNameParameter != nil {
366-
resolvedSecretName, err := resolveInputParameterStr(ctx, dag, pipeline, opts, mlmd,
385+
resolvedConfigMapName, err := resolveInputParameterStr(ctx, dag, pipeline, opts, mlmd,
367386
configMapAsVolume.ConfigMapNameParameter, inputParams)
368387
if err != nil {
388+
if errors.Is(err, ErrResolvedParameterNull) {
389+
continue
390+
}
369391
return fmt.Errorf("failed to resolve configmap name: %w", err)
370392
}
371-
configMapName = resolvedSecretName.GetStringValue()
393+
configMapName = resolvedConfigMapName.GetStringValue()
372394
} else if configMapAsVolume.ConfigMapName != "" {
373395
configMapName = configMapAsVolume.ConfigMapName
374396
} else {
@@ -424,12 +446,15 @@ func extendPodSpecPatch(
424446

425447
var configMapName string
426448
if configMapAsEnv.ConfigMapNameParameter != nil {
427-
resolvedSecretName, err := resolveInputParameterStr(ctx, dag, pipeline, opts, mlmd,
449+
resolvedConfigMapName, err := resolveInputParameterStr(ctx, dag, pipeline, opts, mlmd,
428450
configMapAsEnv.ConfigMapNameParameter, inputParams)
429451
if err != nil {
452+
if errors.Is(err, ErrResolvedParameterNull) {
453+
continue
454+
}
430455
return fmt.Errorf("failed to resolve configmap name: %w", err)
431456
}
432-
configMapName = resolvedSecretName.GetStringValue()
457+
configMapName = resolvedConfigMapName.GetStringValue()
433458
} else if configMapAsEnv.ConfigMapName != "" {
434459
configMapName = configMapAsEnv.ConfigMapName
435460
} else {
@@ -456,6 +481,9 @@ func extendPodSpecPatch(
456481
resolvedSecretName, err := resolveInputParameterStr(ctx, dag, pipeline, opts, mlmd,
457482
imagePullSecret.SecretNameParameter, inputParams)
458483
if err != nil {
484+
if errors.Is(err, ErrResolvedParameterNull) {
485+
continue
486+
}
459487
return fmt.Errorf("failed to resolve image pull secret name: %w", err)
460488
}
461489
secretName = resolvedSecretName.GetStringValue()
@@ -588,6 +616,9 @@ func extendPodSpecPatch(
588616
err := resolveK8sJsonParameter(ctx, opts, dag, pipeline, mlmd,
589617
nodeAffinityTerm.GetNodeAffinityJson(), inputParams, &k8sNodeAffinity)
590618
if err != nil {
619+
if errors.Is(err, ErrResolvedParameterNull) {
620+
continue
621+
}
591622
return fmt.Errorf("failed to resolve node affinity json: %w", err)
592623
}
593624

0 commit comments

Comments
 (0)