Merge "Allow to get container logs asynchronously"

This commit is contained in:
Zuul 2021-02-11 21:22:56 +00:00 committed by Gerrit Code Review
commit 56cb8cef20

View File

@ -157,6 +157,9 @@ func (c *clientV1Alpha1) runAirship() error {
c.conf.Spec.Image, c.conf.Spec.Image,
c.conf.Spec.Airship.Cmd) c.conf.Spec.Airship.Cmd)
// write logs asynchronously while waiting for for container to finish
go writeLogs(cont)
err = cont.WaitUntilFinished() err = cont.WaitUntilFinished()
if err != nil { if err != nil {
return err return err
@ -168,20 +171,8 @@ func (c *clientV1Alpha1) runAirship() error {
} }
defer rOut.Close() defer rOut.Close()
rErr, err := cont.GetContainerLogs(GetLogOptions{Stderr: true})
if err != nil {
return err
}
defer rOut.Close()
parsedOut := dlog.NewReader(rOut) parsedOut := dlog.NewReader(rOut)
parsedErr := dlog.NewReader(rErr)
// write container stderr to airship log output
_, err = io.Copy(log.Writer(), parsedErr)
if err != nil {
return err
}
return writeSink(c.resultsDir, parsedOut, c.output) return writeSink(c.resultsDir, parsedOut, c.output)
} }
@ -224,6 +215,22 @@ func (c *clientV1Alpha1) runKRM() error {
return fns.Execute() return fns.Execute()
} }
func writeLogs(cont Container) {
stderr, err := cont.GetContainerLogs(GetLogOptions{
Stderr: true,
Follow: true})
if err != nil {
log.Fatalf("received an error trying to attach to container to retrieve logs %e", err)
return
}
defer stderr.Close()
parsedStdErr := dlog.NewReader(stderr)
_, err = io.Copy(log.Writer(), parsedStdErr)
if err != nil {
log.Fatalf("received an error while copying logs from container %e", err)
}
}
// writeSink output to directory on filesystem sink // writeSink output to directory on filesystem sink
func writeSink(path string, rc io.Reader, out io.Writer) error { func writeSink(path string, rc io.Reader, out io.Writer) error {
inputs := []kio.Reader{&kio.ByteReader{Reader: rc}} inputs := []kio.Reader{&kio.ByteReader{Reader: rc}}