Add NewTask support to client

Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
Michael Crosby
2017-05-24 11:31:58 -07:00
parent 31a3bda41b
commit 3ba06e48ed
3 changed files with 235 additions and 1 deletions

View File

@@ -5,6 +5,8 @@ import (
"encoding/json"
"github.com/containerd/containerd/api/services/containers"
"github.com/containerd/containerd/api/services/execution"
"github.com/containerd/containerd/api/types/mount"
specs "github.com/opencontainers/runtime-spec/specs-go"
)
@@ -18,7 +20,8 @@ func containerFromProto(client *Client, c containers.Container) *Container {
type Container struct {
client *Client
c containers.Container
c containers.Container
task *Task
}
// ID returns the container's unique id
@@ -45,3 +48,43 @@ func (c *Container) Delete(ctx context.Context) error {
})
return err
}
func (c *Container) Task() *Task {
return c.task
}
func (c *Container) NewTask(ctx context.Context, ioCreate IOCreation) (*Task, error) {
i, err := ioCreate()
if err != nil {
return nil, err
}
request := &execution.CreateRequest{
ContainerID: c.c.ID,
Terminal: i.Terminal,
Stdin: i.Stdin,
Stdout: i.Stdout,
Stderr: i.Stderr,
}
// get the rootfs from the snapshotter and add it to the request
mounts, err := c.client.snapshotter().Mounts(ctx, c.c.RootFS)
if err != nil {
return nil, err
}
for _, m := range mounts {
request.Rootfs = append(request.Rootfs, &mount.Mount{
Type: m.Type,
Source: m.Source,
Options: m.Options,
})
}
response, err := c.client.tasks().Create(ctx, request)
if err != nil {
return nil, err
}
return &Task{
client: c.client,
io: i,
containerID: response.ContainerID,
pid: response.Pid,
}, nil
}