func main() { // XXX Uncomment the following line to run the profiler //runProfiler(5 * time.Minute) log.Info("Minion Start") log.SetFormatter(util.Formatter{}) conn := db.New() dk := docker.New("unix:///var/run/docker.sock") go minionServerRun(conn) go supervisor.Run(conn, dk) go scheduler.Run(conn) go network.Run(conn, dk) go etcd.Run(conn) for range conn.Trigger(db.MinionTable).C { conn.Transact(func(view db.Database) error { minion, err := view.MinionSelf() if err != nil { return err } updatePolicy(view, minion.Role, minion.Spec) return nil }) } }
// Run blocks executing the minion. func Run() { // XXX Uncomment the following line to run the profiler //runProfiler(5 * time.Minute) log.Info("Minion Start") conn := db.New() dk := docker.New("unix:///var/run/docker.sock") // Not in a goroutine, want the plugin to start before the scheduler plugin.Run() go minionServerRun(conn) go supervisor.Run(conn, dk) go scheduler.Run(conn, dk) go network.Run(conn, dk) go etcd.Run(conn) go syncAuthorizedKeys(conn) go apiServer.Run(conn, fmt.Sprintf("tcp://0.0.0.0:%d", api.DefaultRemotePort)) loopLog := util.NewEventTimer("Minion-Update") for range conn.Trigger(db.MinionTable).C { loopLog.LogStart() conn.Transact(func(view db.Database) error { minion, err := view.MinionSelf() if err != nil { return err } updatePolicy(view, minion.Role, minion.Spec) return nil }) loopLog.LogEnd() } }