8282from dstack ._internal .server .services .plugins import apply_plugin_policies
8383from dstack ._internal .server .services .projects import list_project_models , list_user_project_models
8484from dstack ._internal .server .services .resources import set_resources_defaults
85+ from dstack ._internal .server .services .secrets import get_project_secrets_mapping
8586from dstack ._internal .server .services .users import get_user_model_by_name
8687from dstack ._internal .utils .logging import get_logger
8788from dstack ._internal .utils .random_names import generate_name
@@ -311,7 +312,12 @@ async def get_plan(
311312 ):
312313 action = ApplyAction .UPDATE
313314
314- jobs = await get_jobs_from_run_spec (effective_run_spec , replica_num = 0 )
315+ secrets = await get_project_secrets_mapping (session = session , project = project )
316+ jobs = await get_jobs_from_run_spec (
317+ run_spec = effective_run_spec ,
318+ secrets = secrets ,
319+ replica_num = 0 ,
320+ )
315321
316322 volumes = await get_job_configured_volumes (
317323 session = session ,
@@ -462,6 +468,10 @@ async def submit_run(
462468 project = project ,
463469 run_spec = run_spec ,
464470 )
471+ secrets = await get_project_secrets_mapping (
472+ session = session ,
473+ project = project ,
474+ )
465475
466476 lock_namespace = f"run_names_{ project .name } "
467477 if get_db ().dialect_name == "sqlite" :
@@ -513,7 +523,11 @@ async def submit_run(
513523 await services .register_service (session , run_model , run_spec )
514524
515525 for replica_num in range (replicas ):
516- jobs = await get_jobs_from_run_spec (run_spec , replica_num = replica_num )
526+ jobs = await get_jobs_from_run_spec (
527+ run_spec = run_spec ,
528+ secrets = secrets ,
529+ replica_num = replica_num ,
530+ )
517531 for job in jobs :
518532 job_model = create_job_model_for_new_submission (
519533 run_model = run_model ,
@@ -1068,10 +1082,20 @@ async def scale_run_replicas(session: AsyncSession, run_model: RunModel, replica
10681082 await retry_run_replica_jobs (session , run_model , replica_jobs , only_failed = False )
10691083 scheduled_replicas += 1
10701084
1085+ secrets = await get_project_secrets_mapping (
1086+ session = session ,
1087+ project = run_model .project ,
1088+ )
1089+
10711090 for replica_num in range (
10721091 len (active_replicas ) + scheduled_replicas , len (active_replicas ) + replicas_diff
10731092 ):
1074- jobs = await get_jobs_from_run_spec (run_spec , replica_num = replica_num )
1093+ # FIXME: Handle getting image configuration errors or skip it.
1094+ jobs = await get_jobs_from_run_spec (
1095+ run_spec = run_spec ,
1096+ secrets = secrets ,
1097+ replica_num = replica_num ,
1098+ )
10751099 for job in jobs :
10761100 job_model = create_job_model_for_new_submission (
10771101 run_model = run_model ,
@@ -1084,8 +1108,14 @@ async def scale_run_replicas(session: AsyncSession, run_model: RunModel, replica
10841108async def retry_run_replica_jobs (
10851109 session : AsyncSession , run_model : RunModel , latest_jobs : List [JobModel ], * , only_failed : bool
10861110):
1111+ # FIXME: Handle getting image configuration errors or skip it.
1112+ secrets = await get_project_secrets_mapping (
1113+ session = session ,
1114+ project = run_model .project ,
1115+ )
10871116 new_jobs = await get_jobs_from_run_spec (
1088- RunSpec .__response__ .parse_raw (run_model .run_spec ),
1117+ run_spec = RunSpec .__response__ .parse_raw (run_model .run_spec ),
1118+ secrets = secrets ,
10891119 replica_num = latest_jobs [0 ].replica_num ,
10901120 )
10911121 assert len (new_jobs ) == len (latest_jobs ), (
0 commit comments