in pkg/dnsmasq/nanny.go [123:169]
func (n *Nanny) Start() error {
klog.V(0).Infof("Starting dnsmasq %v", n.args)
n.cmd = exec.Command(n.Exec, n.args...)
stderrReader, err := n.cmd.StderrPipe()
if err != nil {
return err
}
stdoutReader, err := n.cmd.StdoutPipe()
if err != nil {
return err
}
if err := n.cmd.Start(); err != nil {
return err
}
logToGlog := func(stream string, reader io.Reader) {
bufReader := bufio.NewReader(reader)
for {
bytes, err := bufReader.ReadBytes('\n')
if len(bytes) > 0 {
klog.V(1).Infof("%v", string(bytes))
}
if err == io.EOF {
klog.V(1).Infof("%v", string(bytes))
klog.Warningf("Got EOF from %v", stream)
return
} else if err != nil {
klog.V(1).Infof("%v", string(bytes))
klog.Errorf("Error reading from %v: %v", stream, err)
return
}
}
}
go logToGlog("stderr", stderrReader)
go logToGlog("stdout", stdoutReader)
n.ExitChannel = make(chan error)
go func() {
n.ExitChannel <- n.cmd.Wait()
}()
return nil
}