diff --git a/container.go b/container.go index 34c64c9c2..22ba64858 100644 --- a/container.go +++ b/container.go @@ -85,10 +85,12 @@ func (c *Container) NewTask(ctx context.Context, ioCreate IOCreation) (*Task, er if err != nil { return nil, err } - return &Task{ + t := &Task{ client: c.client, io: i, containerID: response.ContainerID, pid: response.Pid, - }, nil + } + c.task = t + return t, nil } diff --git a/task.go b/task.go index 53dd4f90c..132a58b46 100644 --- a/task.go +++ b/task.go @@ -189,6 +189,30 @@ func (t *Task) Kill(ctx context.Context, s syscall.Signal) error { return err } +func (t *Task) Pause(ctx context.Context) error { + _, err := t.client.tasks().Pause(ctx, &execution.PauseRequest{ + ContainerID: t.containerID, + }) + return err +} + +func (t *Task) Resume(ctx context.Context) error { + _, err := t.client.tasks().Resume(ctx, &execution.ResumeRequest{ + ContainerID: t.containerID, + }) + return err +} + +func (t *Task) Status(ctx context.Context) (string, error) { + r, err := t.client.tasks().Info(ctx, &execution.InfoRequest{ + ContainerID: t.containerID, + }) + if err != nil { + return "", err + } + return r.Task.Status.String(), nil +} + // Wait is a blocking call that will wait for the task to exit and return the exit status func (t *Task) Wait(ctx context.Context) (uint32, error) { events, err := t.client.tasks().Events(ctx, &execution.EventsRequest{})