ctr: exec handle pty resize after Start

Handle initial pty resize after the exec process has started and the pty
is available, consistent with the behavior of ctr run.

Signed-off-by: Samuel Karp <me@samuelkarp.com>
This commit is contained in:
Samuel Karp 2021-05-25 00:12:21 -07:00
parent b9378b4529
commit 5dec27b6f1
No known key found for this signature in database
GPG Key ID: AAA3FE8A831FC087

View File

@ -117,30 +117,31 @@ var execCommand = cli.Command{
con console.Console con console.Console
) )
ioOpts := []cio.Opt{cio.WithFIFODir(context.String("fifo-dir"))} fifoDir := context.String("fifo-dir")
if tty { logURI := context.String("log-uri")
ioOpts := []cio.Opt{cio.WithFIFODir(fifoDir)}
switch {
case tty && logURI != "":
return errors.New("can't use log-uri with tty")
case logURI != "" && fifoDir != "":
return errors.New("can't use log-uri with fifo-dir")
case tty:
con = console.Current() con = console.Current()
defer con.Reset() defer con.Reset()
if err := con.SetRaw(); err != nil { if err := con.SetRaw(); err != nil {
return err return err
} }
ioCreator = cio.NewCreator(append([]cio.Opt{cio.WithStreams(con, con, nil), cio.WithTerminal}, ioOpts...)...) ioCreator = cio.NewCreator(append([]cio.Opt{cio.WithStreams(con, con, nil), cio.WithTerminal}, ioOpts...)...)
} else if logURI := context.String("log-uri"); logURI != "" {
case logURI != "":
uri, err := url.Parse(logURI) uri, err := url.Parse(logURI)
if err != nil { if err != nil {
return err return err
} }
if dir := context.String("fifo-dir"); dir != "" {
return errors.New("can't use log-uri with fifo-dir")
}
if tty {
return errors.New("can't use log-uri with tty")
}
ioCreator = cio.LogURI(uri) ioCreator = cio.LogURI(uri)
} else {
default:
ioCreator = cio.NewCreator(append([]cio.Opt{cio.WithStreams(stdinC, os.Stdout, os.Stderr)}, ioOpts...)...) ioCreator = cio.NewCreator(append([]cio.Opt{cio.WithStreams(stdinC, os.Stdout, os.Stderr)}, ioOpts...)...)
} }
@ -161,7 +162,12 @@ var execCommand = cli.Command{
return err return err
} }
if !detach { if err := process.Start(ctx); err != nil {
return err
}
if detach {
return nil
}
if tty { if tty {
if err := HandleConsoleResize(ctx, process, con); err != nil { if err := HandleConsoleResize(ctx, process, con); err != nil {
logrus.WithError(err).Error("console resize") logrus.WithError(err).Error("console resize")
@ -170,14 +176,6 @@ var execCommand = cli.Command{
sigc := commands.ForwardAllSignals(ctx, process) sigc := commands.ForwardAllSignals(ctx, process)
defer commands.StopCatch(sigc) defer commands.StopCatch(sigc)
} }
}
if err := process.Start(ctx); err != nil {
return err
}
if detach {
return nil
}
status := <-statusC status := <-statusC
code, _, err := status.Result() code, _, err := status.Result()
if err != nil { if err != nil {