| 386 | } |
| 387 | |
| 388 | func (e *engineImpl) applyApp(ns string, info specv1.AppInfo) error { |
| 389 | if err := e.syn.SyncResource(info); err != nil { |
| 390 | e.log.Error("failed to sync resource", log.Any("info", info), log.Error(err)) |
| 391 | return errors.Trace(err) |
| 392 | } |
| 393 | key := makeKey(specv1.KindApplication, info.Name, info.Version) |
| 394 | app := new(specv1.Application) |
| 395 | err := e.sto.Get(key, app) |
| 396 | if err != nil { |
| 397 | return errors.Errorf("failed to get app name: (%s) version: (%s) with error: %s", app.Name, app.Version, err.Error()) |
| 398 | } |
| 399 | cfgs := make(map[string]specv1.Configuration) |
| 400 | secs := make(map[string]specv1.Secret) |
| 401 | for _, v := range app.Volumes { |
| 402 | if cfg := v.VolumeSource.Config; cfg != nil { |
| 403 | key := makeKey(specv1.KindConfiguration, cfg.Name, cfg.Version) |
| 404 | if key == "" { |
| 405 | return errors.Errorf("failed to get config name: (%s) version: (%s)", cfg.Name, cfg.Version) |
| 406 | } |
| 407 | var config specv1.Configuration |
| 408 | if err := e.sto.Get(key, &config); err != nil { |
| 409 | return errors.Errorf("failed to get config name: (%s) version: (%s) with error: %s", cfg.Name, cfg.Version, err.Error()) |
| 410 | } |
| 411 | cfgs[config.Name] = config |
| 412 | } else if sec := v.VolumeSource.Secret; sec != nil { |
| 413 | key := makeKey(specv1.KindSecret, sec.Name, sec.Version) |
| 414 | if key == "" { |
| 415 | return errors.Errorf("failed to get secret name: (%s) version: (%s)", sec.Name, sec.Version) |
| 416 | } |
| 417 | var secret specv1.Secret |
| 418 | if err := e.sto.Get(key, &secret); err != nil { |
| 419 | return errors.Errorf("failed to get secret name: (%s) version: (%s) with error: %s", sec.Name, sec.Version, err.Error()) |
| 420 | } |
| 421 | secs[secret.Name] = secret |
| 422 | } |
| 423 | } |
| 424 | if err := sync.PrepareApp(e.hostHostPath, e.objectHostPath, app, cfgs); err != nil { |
| 425 | e.log.Error("failed to revise applications", log.Any("app", app), log.Error(err)) |
| 426 | return errors.Trace(err) |
| 427 | } |
| 428 | // inject system cert |
| 429 | if e.sec != nil && !strings.Contains(app.Name, specv1.BaetylCore) && !strings.Contains(app.Name, specv1.BaetylInit) { |
| 430 | if err := e.injectCert(app, secs); err != nil { |
| 431 | return errors.Trace(err) |
| 432 | } |
| 433 | } |
| 434 | // apply app |
| 435 | return errors.Trace(e.ami.ApplyApp(ns, *app, cfgs, secs)) |
| 436 | } |
| 437 | |
| 438 | func (e *engineImpl) injectCert(app *specv1.Application, secs map[string]specv1.Secret) error { |
| 439 | ca, err := e.sec.GetCA() |