func waitConsoleOutput(ctx *VmContext) { conn, err := utils.UnixSocketConnect(ctx.ConsoleSockName) if err != nil { glog.Error("failed to connected to ", ctx.ConsoleSockName, " ", err.Error()) return } glog.V(1).Info("connected to ", ctx.ConsoleSockName) tc, err := telnet.NewConn(conn) if err != nil { glog.Error("fail to init telnet connection to ", ctx.ConsoleSockName, ": ", err.Error()) return } glog.V(1).Infof("connected %s as telnet mode.", ctx.ConsoleSockName) cout := make(chan string, 128) go TtyLiner(tc, cout) for { line, ok := <-cout if ok { glog.V(1).Info("[console] ", line) } else { glog.Info("console output end") break } } }
func waitConsoleOutput(ctx *VmContext) { conn, err := utils.UnixSocketConnect(ctx.ConsoleSockName) if err != nil { glog.Error("failed to connected to ", ctx.ConsoleSockName, " ", err.Error()) return } glog.V(1).Info("connected to ", ctx.ConsoleSockName) tc, err := telnet.NewConn(conn) if err != nil { glog.Error("fail to init telnet connection to ", ctx.ConsoleSockName, ": ", err.Error()) return } glog.V(1).Infof("connected %s as telnet mode.", ctx.ConsoleSockName) cout := make(chan string, 128) go TtyLiner(tc, cout) const ignoreLines = 128 for consoleLines := 0; consoleLines < ignoreLines; consoleLines++ { line, ok := <-cout if ok { ctx.Log(EXTRA, "[CNL] %s", line) } else { ctx.Log(INFO, "console output end") return } } if !ctx.LogLevel(EXTRA) { ctx.Log(DEBUG, "[CNL] omit the first %d line of console logs", ignoreLines) } for { line, ok := <-cout if ok { ctx.Log(DEBUG, "[CNL] %s", line) } else { ctx.Log(INFO, "console output end") return } } }