Documentation ¶
Index ¶
- Constants
- func NewCRILogger(path string, w io.Writer, stream StreamType, maxLen int) (io.WriteCloser, <-chan struct{})
- func NewDiscardLogger() io.WriteCloser
- type AttachOptions
- type ContainerIO
- func (c *ContainerIO) AddOutput(name string, stdout, stderr io.WriteCloser) (io.WriteCloser, io.WriteCloser)
- func (c *ContainerIO) Attach(opts AttachOptions)
- func (c *ContainerIO) Cancel()
- func (c *ContainerIO) Close() error
- func (c *ContainerIO) Config() cio.Config
- func (c *ContainerIO) Pipe()
- func (c *ContainerIO) Wait()
- type ContainerIOOpts
- type ExecIO
- type StreamType
Constants ¶
const ( // Stdin stream type. Stdin StreamType = "stdin" // Stdout stream type. Stdout = StreamType(runtime.Stdout) // Stderr stream type. Stderr = StreamType(runtime.Stderr) )
Variables ¶
This section is empty.
Functions ¶
func NewCRILogger ¶
func NewCRILogger(path string, w io.Writer, stream StreamType, maxLen int) (io.WriteCloser, <-chan struct{})
NewCRILogger returns a write closer which redirect container log into log file, and decorate the log line into CRI defined format. It also returns a channel which indicates whether the logger is stopped. maxLen is the max length limit of a line. A line longer than the limit will be cut into multiple lines.
func NewDiscardLogger ¶
func NewDiscardLogger() io.WriteCloser
NewDiscardLogger creates logger which discards all the input.
Types ¶
type AttachOptions ¶
type AttachOptions struct { Stdin io.Reader Stdout io.WriteCloser Stderr io.WriteCloser Tty bool StdinOnce bool // CloseStdin is the function to close container stdin. CloseStdin func() error }
AttachOptions specifies how to attach to a container.
type ContainerIO ¶
type ContainerIO struct {
// contains filtered or unexported fields
}
ContainerIO holds the container io.
func NewContainerIO ¶
func NewContainerIO(id string, opts ...ContainerIOOpts) (_ *ContainerIO, err error)
NewContainerIO creates container io.
func (*ContainerIO) AddOutput ¶
func (c *ContainerIO) AddOutput(name string, stdout, stderr io.WriteCloser) (io.WriteCloser, io.WriteCloser)
AddOutput adds new write closers to the container stream, and returns existing write closers if there are any.
func (*ContainerIO) Attach ¶
func (c *ContainerIO) Attach(opts AttachOptions)
Attach attaches container stdio. TODO(random-liu): Use pools.Copy in docker to reduce memory usage?
func (*ContainerIO) Pipe ¶
func (c *ContainerIO) Pipe()
Pipe creates container fifos and pipe container output to output stream.
type ContainerIOOpts ¶
type ContainerIOOpts func(*ContainerIO) error
ContainerIOOpts sets specific information to newly created ContainerIO.
func WithFIFOs ¶
func WithFIFOs(fifos *cio.FIFOSet) ContainerIOOpts
WithFIFOs specifies existing fifos for the container io.
func WithNewFIFOs ¶
func WithNewFIFOs(root string, tty, stdin bool) ContainerIOOpts
WithNewFIFOs creates new fifos for the container io.
func WithStreams ¶
func WithStreams(address string, tty, stdin bool) ContainerIOOpts
WithStreams creates new streams for the container io. The stream address is in format of `protocol://address?stream_id=xyz`. It allocates ContainerID-stdin, ContainerID-stdout and ContainerID-stderr as streaming IDs. For example, that advertiser address of shim is `ttrpc+unix:///run/demo.sock` and container ID is `app`. There are three streams if stdin is enabled and TTY is disabled.
- Stdin: ttrpc+unix:///run/demo.sock?stream_id=app-stdin
- Stdout: ttrpc+unix:///run/demo.sock?stream_id=app-stdout
- stderr: ttrpc+unix:///run/demo.sock?stream_id=app-stderr
The streaming IDs will be used as unique key to establish stream tunnel. And it should support reconnection with the same streaming ID if containerd restarts.
type ExecIO ¶
type ExecIO struct {
// contains filtered or unexported fields
}
ExecIO holds the exec io.
func NewFifoExecIO ¶
NewFifoExecIO creates exec io by named pipes.
func NewStreamExecIO ¶
NewStreamExecIO creates exec io with streaming. The stream address is in format of `protocol://address?stream_id=xyz`. It allocates ExecID-stdin, ExecID-stdout and ExecID-stderr as streaming IDs. For example, that advertiser address of shim is `ttrpc+unix:///run/demo.sock` and exec ID is `app`. There are three streams if stdin is enabled and TTY is disabled.
- Stdin: ttrpc+unix:///run/demo.sock?stream_id=app-stdin
- Stdout: ttrpc+unix:///run/demo.sock?stream_id=app-stdout
- stderr: ttrpc+unix:///run/demo.sock?stream_id=app-stderr
The streaming IDs will be used as unique key to establish stream tunnel. And it should support reconnection with the same streaming ID if containerd restarts.
func (*ExecIO) Attach ¶
func (e *ExecIO) Attach(opts AttachOptions) <-chan struct{}
Attach attaches exec stdio. The logic is similar with container io attach.