mirror of
https://github.com/containers/podman.git
synced 2025-05-22 09:36:57 +08:00
Changes to attach to enable per-stream attaching
This allows us to attach to attach to just stdout or stderr or stdin, or any combination of these. Signed-off-by: Matthew Heon <matthew.heon@gmail.com> Closes: #608 Approved by: baude
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
package libpod
|
||||
|
||||
import (
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"strconv"
|
||||
@ -14,6 +15,7 @@ import (
|
||||
"github.com/projectatomic/libpod/pkg/inspect"
|
||||
"github.com/sirupsen/logrus"
|
||||
"k8s.io/apimachinery/pkg/util/wait"
|
||||
"k8s.io/client-go/tools/remotecommand"
|
||||
)
|
||||
|
||||
// Init creates a container in the OCI runtime
|
||||
@ -123,7 +125,7 @@ func (c *Container) Start() (err error) {
|
||||
// attach call.
|
||||
// The channel will be closed automatically after the result of attach has been
|
||||
// sent
|
||||
func (c *Container) StartAndAttach(noStdin bool, keys string) (attachResChan <-chan error, err error) {
|
||||
func (c *Container) StartAndAttach(outputStream, errorStream io.WriteCloser, inputStream io.Reader, keys string, resize <-chan remotecommand.TerminalSize) (attachResChan <-chan error, err error) {
|
||||
if !c.locked {
|
||||
c.lock.Lock()
|
||||
defer c.lock.Unlock()
|
||||
@ -176,7 +178,7 @@ func (c *Container) StartAndAttach(noStdin bool, keys string) (attachResChan <-c
|
||||
|
||||
// Attach to the container before starting it
|
||||
go func() {
|
||||
if err := c.attach(noStdin, keys); err != nil {
|
||||
if err := c.attach(outputStream, errorStream, inputStream, keys, resize); err != nil {
|
||||
attachChan <- err
|
||||
}
|
||||
close(attachChan)
|
||||
@ -404,8 +406,7 @@ func (c *Container) Exec(tty, privileged bool, env, cmd []string, user string) e
|
||||
}
|
||||
|
||||
// Attach attaches to a container
|
||||
// Returns fully qualified URL of streaming server for the container
|
||||
func (c *Container) Attach(noStdin bool, keys string) error {
|
||||
func (c *Container) Attach(outputStream, errorStream io.WriteCloser, inputStream io.Reader, keys string, resize <-chan remotecommand.TerminalSize) error {
|
||||
if !c.locked {
|
||||
c.lock.Lock()
|
||||
if err := c.syncContainer(); err != nil {
|
||||
@ -420,7 +421,7 @@ func (c *Container) Attach(noStdin bool, keys string) error {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "can only attach to created or running containers")
|
||||
}
|
||||
|
||||
return c.attach(noStdin, keys)
|
||||
return c.attach(outputStream, errorStream, inputStream, keys, resize)
|
||||
}
|
||||
|
||||
// Mount mounts a container's filesystem on the host
|
||||
|
Reference in New Issue
Block a user