func (sc *SchedulerCore) Run(mesosMaster string) { sc.schedulerState.MesosMaster = mesosMaster var frameworkId *mesos.FrameworkID if sc.schedulerState.FrameworkID == nil { frameworkId = nil } else { frameworkId = &mesos.FrameworkID{ Value: sc.schedulerState.FrameworkID, } } fwinfo := &mesos.FrameworkInfo{ Name: proto.String(sc.frameworkName), Id: frameworkId, FailoverTimeout: proto.Float64(86400), WebuiUrl: proto.String(sc.schedulerHTTPServer.GetURI()), Checkpoint: proto.Bool(true), Role: proto.String(sc.frameworkRole), } if sc.user != "" { fwinfo.User = proto.String(sc.user) } else { guestUser := "******" fwinfo.User = &guestUser } cred := (*mesos.Credential)(nil) if sc.mesosAuthPrincipal != "" { fwinfo.Principal = proto.String(sc.mesosAuthPrincipal) } if sc.mesosAuthSecretFile != "" && sc.mesosAuthPrincipal != "" { secret, err := ioutil.ReadFile(sc.mesosAuthSecretFile) if err != nil { log.Fatal(err) } cred = &mesos.Credential{ Principal: proto.String(sc.mesosAuthPrincipal), Secret: secret, } } hostname, err := os.Hostname() if err != nil { log.Fatal(err) } config := sched.DriverConfig{ Scheduler: sc, Framework: fwinfo, Master: mesosMaster, Credential: cred, HostnameOverride: hostname, } if sc.schedulerIPAddr != "" { config.BindingAddress = parseIP(sc.schedulerIPAddr) } if sc.authProvider != "" && sc.mesosAuthPrincipal != "" { config.WithAuthContext = func(ctx context.Context) context.Context { ctx = auth.WithLoginProvider(ctx, sc.authProvider) if sc.schedulerIPAddr != "" { ctx = sasl.WithBindingAddress(ctx, parseIP(sc.schedulerIPAddr)) } return ctx } } log.Infof("Running scheduler with FrameworkInfo: %v and DriverConfig: %v", fwinfo, config) driver, err := sched.NewMesosSchedulerDriver(config) if err != nil { log.Error("Unable to create a SchedulerDriver ", err.Error()) } sc.rServer = newReconciliationServer(driver, sc) sc.mgr.SetupFramework(sc.schedulerHTTPServer.URI) if stat, err := driver.Run(); err != nil { log.Infof("Framework stopped with status %s and error: %s\n", stat.String(), err.Error()) } }