@@ -17,6 +17,7 @@ package driver
1717import  (
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