@@ -98,6 +98,13 @@ def launch_run(self, context: LaunchRunContext) -> None:
9898 context .dagster_run .run_id , {"cloud_run_job_execution_id" : execution_id }
9999 )
100100
101+ def get_container_name_for_code_location_or_default (
102+ self , job_config : dict [str , Any ]
103+ ) -> str | None :
104+ """Returns the specific container_name for multi-container cloud run jobs to override"""
105+ job_config = check .dict_param (job_config , "job_config" )
106+ return job_config .get ("container_name" , None )
107+
101108 def get_project_for_code_location_or_default (
102109 self , job_config : dict [str , Any ]
103110 ) -> str :
@@ -132,6 +139,19 @@ def fully_qualified_job_name(self, code_location_name: str) -> str:
132139 f"projects/{ project_id_for_job } /locations/{ region_for_job } /jobs/{ job_name } "
133140 )
134141
142+ def specific_container_name (self , code_location_name : str ) -> str | None :
143+ try :
144+ job = self .job_name_by_code_location [code_location_name ]
145+ except KeyError :
146+ raise Exception (
147+ f"No run launcher defined for code location: { code_location_name } "
148+ )
149+ # if not specific, then we default to legacy 1 container behavior (no name)
150+ if isinstance (job , str ):
151+ return None
152+
153+ return self .get_container_name_for_code_location_or_default (job )
154+
135155 def resolve_secret (self , secret_name : str ) -> Any :
136156 client = SecretManagerServiceClient ()
137157 latest = AccessSecretVersionRequest (name = secret_name )
@@ -185,13 +205,17 @@ def env_override_for_code_location(
185205 def create_execution (self , code_location_name : str , args : Sequence [str ]):
186206 job_name = self .fully_qualified_job_name (code_location_name )
187207 job_env = self .env_override_for_code_location (code_location_name )
188- return self .execute_job (job_name , args = args , env = job_env )
208+ container_name = self .specific_container_name (code_location_name )
209+ return self .execute_job (
210+ job_name , args = args , env = job_env , container_name = container_name
211+ )
189212
190213 def execute_job (
191214 self ,
192215 fully_qualified_job_name : str ,
193216 args : Sequence [str ] | None = None ,
194217 env : Optional ["dict[str, str]" ] = None ,
218+ container_name : str | None = None ,
195219 ) -> Operation :
196220 request = RunJobRequest (name = fully_qualified_job_name )
197221
@@ -202,6 +226,8 @@ def execute_job(
202226 overrides ["env" ] = [
203227 k8s_min .EnvVar (name = name , value = value ) for name , value in env .items ()
204228 ]
229+ if container_name :
230+ overrides ["name" ] = container_name
205231
206232 container_overrides = [RunJobRequest .Overrides .ContainerOverride (** overrides )]
207233
@@ -280,6 +306,8 @@ def config_type(cls) -> "UserConfigSchema":
280306 " pair where the key is the code location name and the value is the job name. "
281307 "Optionally, each code location key may specifiy the `job_name` and `project_id` "
282308 "override value in order to the code location to a different GCP project ID."
309+ "If using multi-container jobs, you may also specify `container_name` which"
310+ "will be used to override the specific container"
283311 ),
284312 ),
285313 "run_job_retry" : Field (
0 commit comments