@@ -14,28 +14,31 @@ import (
1414 "opencsg.com/csghub-server/builder/deploy/imagerunner"
1515 "opencsg.com/csghub-server/builder/store/database"
1616 "opencsg.com/csghub-server/common/types"
17+ hubcom "opencsg.com/csghub-server/common/utils/common"
1718)
1819
1920// DeployRunner defines a k8s image running task
2021type DeployRunner struct {
21- repo * RepoInfo
22- task * database.DeployTask
23- ir imagerunner.Runner
24- store database.DeployTaskStore
25- tokenStore database.AccessTokenStore
26- deployStartTime time.Time
27- deployCfg common.DeployConfig
22+ repo * RepoInfo
23+ task * database.DeployTask
24+ ir imagerunner.Runner
25+ store database.DeployTaskStore
26+ tokenStore database.AccessTokenStore
27+ deployStartTime time.Time
28+ deployCfg common.DeployConfig
29+ runtimeFrameworksStore database.RuntimeFrameworksStore
2830}
2931
3032func NewDeployRunner (ir imagerunner.Runner , r * RepoInfo , t * database.DeployTask , deployCfg common.DeployConfig ) Runner {
3133 return & DeployRunner {
32- repo : r ,
33- task : t ,
34- ir : ir ,
35- store : database .NewDeployTaskStore (),
36- deployStartTime : time .Now (),
37- tokenStore : database .NewAccessTokenStore (),
38- deployCfg : deployCfg ,
34+ repo : r ,
35+ task : t ,
36+ ir : ir ,
37+ store : database .NewDeployTaskStore (),
38+ deployStartTime : time .Now (),
39+ tokenStore : database .NewAccessTokenStore (),
40+ deployCfg : deployCfg ,
41+ runtimeFrameworksStore : database .NewRuntimeFrameworksStore (),
3942 }
4043
4144}
@@ -209,17 +212,34 @@ func (t *DeployRunner) runtimeError(msg string) {
209212}
210213
211214func (t * DeployRunner ) makeDeployRequest () (* types.RunRequest , error ) {
212- token , err := t .tokenStore .FindByUID (context .Background (), t .task .Deploy .UserID )
215+ ctx , cancel := context .WithTimeout (context .Background (), 30 * time .Second )
216+ defer cancel ()
217+
218+ token , err := t .tokenStore .FindByUID (ctx , t .task .Deploy .UserID )
213219 if err != nil {
214220 return nil , fmt .Errorf ("cant get git access token:%w" , err )
215221 }
216222 fields := strings .Split (t .repo .Path , "/" )
217- deploy , err := t .store .GetDeployByID (context . Background () , t .task .DeployID )
223+ deploy , err := t .store .GetDeployByID (ctx , t .task .DeployID )
218224 if err != nil {
219- return nil , fmt .Errorf ("fail to get deploy with error : %w" , err )
225+ return nil , fmt .Errorf ("fail to get deploy with error: %w" , err )
220226 }
221227
222- annoMap , err := common .JsonStrToMap (deploy .Annotation )
228+ var engineArgsTemplate []types.EngineArg
229+ if len (deploy .RuntimeFramework ) > 0 {
230+ frame , err := t .runtimeFrameworksStore .FindEnabledByName (ctx , deploy .RuntimeFramework )
231+ if err != nil {
232+ return nil , fmt .Errorf ("get runtime framework by name %s error: %w" , deploy .RuntimeFramework , err )
233+ }
234+ if len (strings .TrimSpace (frame .EngineArgs )) > 0 {
235+ err = json .Unmarshal ([]byte (frame .EngineArgs ), & engineArgsTemplate )
236+ if err != nil {
237+ return nil , fmt .Errorf ("unmarshal engine args error: %w" , err )
238+ }
239+ }
240+ }
241+
242+ annoMap , err := hubcom .JsonStrToMap (deploy .Annotation )
223243 if err != nil {
224244 slog .Error ("deploy annotation is invalid json data" , slog .Any ("Annotation" , deploy .Annotation ))
225245 return nil , err
@@ -233,7 +253,7 @@ func (t *DeployRunner) makeDeployRequest() (*types.RunRequest, error) {
233253 return nil , err
234254 }
235255
236- envMap := t .makeDeployEnv (hardware , token , deploy )
256+ envMap := t .makeDeployEnv (hardware , token , deploy , engineArgsTemplate )
237257
238258 targetID := deploy .SpaceID
239259 // deployID is unique for space and model
@@ -267,14 +287,16 @@ func (t *DeployRunner) makeDeployRequest() (*types.RunRequest, error) {
267287
268288func (t * DeployRunner ) makeDeployEnv (
269289 hardware types.HardWare ,
270- token * database.AccessToken , deploy * database.Deploy ,
290+ token * database.AccessToken ,
291+ deploy * database.Deploy ,
292+ engineArgsTemplate []types.EngineArg ,
271293) map [string ]string {
272- envMap , err := common .JsonStrToMap (deploy .Env )
294+ envMap , err := hubcom .JsonStrToMap (deploy .Env )
273295 if err != nil {
274296 slog .Error ("deploy env is invalid json data" , slog .Any ("deploy" , deploy ))
275297 }
276298
277- varMap , err := common .JsonStrToMap (deploy .Variables )
299+ varMap , err := hubcom .JsonStrToMap (deploy .Variables )
278300 if err != nil {
279301 slog .Error ("deploy variables is invalid json data" , slog .Any ("deploy" , deploy ))
280302 } else {
@@ -289,7 +311,22 @@ func (t *DeployRunner) makeDeployEnv(
289311 envMap ["ACCESS_TOKEN" ] = token .Token
290312 envMap ["REPO_ID" ] = t .repo .Path // "namespace/name"
291313 envMap ["REVISION" ] = deploy .GitBranch // branch
292- envMap ["ENGINE_ARGS" ] = deploy .EngineArgs
314+ if len (engineArgsTemplate ) > 0 {
315+ ENGINE_ARGS := ""
316+ argValuesMap , err := hubcom .JsonStrToMap (deploy .EngineArgs )
317+ if err != nil {
318+ slog .Error ("deploy engine args is invalid json data" , slog .Any ("deploy" , * deploy ), slog .Any ("error" , err ))
319+ } else {
320+ for _ , arg := range engineArgsTemplate {
321+ if value , ok := argValuesMap [arg .Name ]; ok {
322+ ENGINE_ARGS += " " + fmt .Sprintf (arg .Format , value )
323+ }
324+ }
325+ }
326+ slog .Debug ("makeDeployEnv" , slog .Any ("ENGINE_ARGS" , ENGINE_ARGS ))
327+ envMap ["ENGINE_ARGS" ] = ENGINE_ARGS
328+ }
329+
293330 if hardware .Gpu .Num != "" {
294331 envMap ["GPU_NUM" ] = hardware .Gpu .Num
295332 }
0 commit comments