Remove protos from Go client API
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
65
task.go
65
task.go
@@ -13,10 +13,13 @@ import (
|
||||
"github.com/containerd/containerd/api/services/containers/v1"
|
||||
eventsapi "github.com/containerd/containerd/api/services/events/v1"
|
||||
"github.com/containerd/containerd/api/services/tasks/v1"
|
||||
"github.com/containerd/containerd/api/types"
|
||||
"github.com/containerd/containerd/content"
|
||||
"github.com/containerd/containerd/linux/runcopts"
|
||||
"github.com/containerd/containerd/rootfs"
|
||||
"github.com/containerd/containerd/runtime"
|
||||
"github.com/containerd/containerd/typeurl"
|
||||
digest "github.com/opencontainers/go-digest"
|
||||
"github.com/opencontainers/image-spec/specs-go/v1"
|
||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||
"google.golang.org/grpc"
|
||||
@@ -34,13 +37,27 @@ const (
|
||||
Pausing TaskStatus = "pausing"
|
||||
)
|
||||
|
||||
type IOCloserOpts func(*tasks.CloseIORequest)
|
||||
type IOCloseInfo struct {
|
||||
Stdin bool
|
||||
}
|
||||
|
||||
func WithStdinCloser(r *tasks.CloseIORequest) {
|
||||
type IOCloserOpts func(*IOCloseInfo)
|
||||
|
||||
func WithStdinCloser(r *IOCloseInfo) {
|
||||
r.Stdin = true
|
||||
}
|
||||
|
||||
type CheckpointOpts func(*tasks.CheckpointTaskRequest) error
|
||||
type CheckpointTaskInfo struct {
|
||||
ParentCheckpoint digest.Digest
|
||||
Options interface{}
|
||||
}
|
||||
|
||||
type CheckpointTaskOpts func(*CheckpointTaskInfo) error
|
||||
|
||||
type TaskInfo struct {
|
||||
Checkpoint *types.Descriptor
|
||||
Options interface{}
|
||||
}
|
||||
|
||||
type Task interface {
|
||||
Pid() uint32
|
||||
@@ -56,7 +73,7 @@ type Task interface {
|
||||
CloseIO(context.Context, ...IOCloserOpts) error
|
||||
Resize(ctx context.Context, w, h uint32) error
|
||||
IO() *IO
|
||||
Checkpoint(context.Context, ...CheckpointOpts) (v1.Descriptor, error)
|
||||
Checkpoint(context.Context, ...CheckpointTaskOpts) (v1.Descriptor, error)
|
||||
Update(context.Context, ...UpdateTaskOpts) error
|
||||
}
|
||||
|
||||
@@ -217,9 +234,11 @@ func (t *task) CloseIO(ctx context.Context, opts ...IOCloserOpts) error {
|
||||
r := &tasks.CloseIORequest{
|
||||
ContainerID: t.id,
|
||||
}
|
||||
var i IOCloseInfo
|
||||
for _, o := range opts {
|
||||
o(r)
|
||||
o(&i)
|
||||
}
|
||||
r.Stdin = i.Stdin
|
||||
_, err := t.client.TaskService().CloseIO(ctx, r)
|
||||
return err
|
||||
}
|
||||
@@ -237,15 +256,24 @@ func (t *task) Resize(ctx context.Context, w, h uint32) error {
|
||||
return err
|
||||
}
|
||||
|
||||
func (t *task) Checkpoint(ctx context.Context, opts ...CheckpointOpts) (d v1.Descriptor, err error) {
|
||||
func (t *task) Checkpoint(ctx context.Context, opts ...CheckpointTaskOpts) (d v1.Descriptor, err error) {
|
||||
request := &tasks.CheckpointTaskRequest{
|
||||
ContainerID: t.id,
|
||||
}
|
||||
var i CheckpointTaskInfo
|
||||
for _, o := range opts {
|
||||
if err := o(request); err != nil {
|
||||
if err := o(&i); err != nil {
|
||||
return d, err
|
||||
}
|
||||
}
|
||||
request.ParentCheckpoint = i.ParentCheckpoint
|
||||
if i.Options != nil {
|
||||
any, err := typeurl.MarshalAny(i.Options)
|
||||
if err != nil {
|
||||
return d, err
|
||||
}
|
||||
request.Options = any
|
||||
}
|
||||
// make sure we pause it and resume after all other filesystem operations are completed
|
||||
if err := t.Pause(ctx); err != nil {
|
||||
return d, err
|
||||
@@ -272,17 +300,29 @@ func (t *task) Checkpoint(ctx context.Context, opts ...CheckpointOpts) (d v1.Des
|
||||
return t.writeIndex(ctx, &index)
|
||||
}
|
||||
|
||||
type UpdateTaskOpts func(context.Context, *Client, *tasks.UpdateTaskRequest) error
|
||||
type UpdateTaskInfo struct {
|
||||
Resources interface{}
|
||||
}
|
||||
|
||||
type UpdateTaskOpts func(context.Context, *Client, *UpdateTaskInfo) error
|
||||
|
||||
func (t *task) Update(ctx context.Context, opts ...UpdateTaskOpts) error {
|
||||
request := &tasks.UpdateTaskRequest{
|
||||
ContainerID: t.id,
|
||||
}
|
||||
var i UpdateTaskInfo
|
||||
for _, o := range opts {
|
||||
if err := o(ctx, t.client, request); err != nil {
|
||||
if err := o(ctx, t.client, &i); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if i.Resources != nil {
|
||||
any, err := typeurl.MarshalAny(i.Resources)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
request.Resources = any
|
||||
}
|
||||
_, err := t.client.TaskService().Update(ctx, request)
|
||||
return err
|
||||
}
|
||||
@@ -359,3 +399,10 @@ func writeContent(ctx context.Context, store content.Store, mediaType, ref strin
|
||||
Size: size,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func WithExit(r *CheckpointTaskInfo) error {
|
||||
r.Options = &runcopts.CheckpointOptions{
|
||||
Exit: true,
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user