Remove protos from Go client API
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
parent
1a49f5ea79
commit
3b8018d8cf
@ -3,8 +3,6 @@ package containerd
|
|||||||
import (
|
import (
|
||||||
"syscall"
|
"syscall"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/containerd/containerd/linux/runcopts"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCheckpointRestore(t *testing.T) {
|
func TestCheckpointRestore(t *testing.T) {
|
||||||
@ -61,7 +59,7 @@ func TestCheckpointRestore(t *testing.T) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
checkpoint, err := task.Checkpoint(ctx, runcopts.WithExit)
|
checkpoint, err := task.Checkpoint(ctx, WithExit)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
return
|
return
|
||||||
@ -151,7 +149,7 @@ func TestCheckpointRestoreNewContainer(t *testing.T) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
checkpoint, err := task.Checkpoint(ctx, runcopts.WithExit)
|
checkpoint, err := task.Checkpoint(ctx, WithExit)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
return
|
return
|
||||||
|
@ -4,7 +4,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/containerd/containerd"
|
"github.com/containerd/containerd"
|
||||||
"github.com/containerd/containerd/linux/runcopts"
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
@ -41,9 +40,9 @@ var checkpointCommand = cli.Command{
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
var opts []containerd.CheckpointOpts
|
var opts []containerd.CheckpointTaskOpts
|
||||||
if context.Bool("exit") {
|
if context.Bool("exit") {
|
||||||
opts = append(opts, runcopts.WithExit)
|
opts = append(opts, containerd.WithExit)
|
||||||
}
|
}
|
||||||
checkpoint, err := task.Checkpoint(ctx, opts...)
|
checkpoint, err := task.Checkpoint(ctx, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
17
container.go
17
container.go
@ -13,6 +13,7 @@ import (
|
|||||||
"github.com/containerd/containerd/api/services/containers/v1"
|
"github.com/containerd/containerd/api/services/containers/v1"
|
||||||
"github.com/containerd/containerd/api/services/tasks/v1"
|
"github.com/containerd/containerd/api/services/tasks/v1"
|
||||||
"github.com/containerd/containerd/api/types"
|
"github.com/containerd/containerd/api/types"
|
||||||
|
"github.com/containerd/containerd/typeurl"
|
||||||
ptypes "github.com/gogo/protobuf/types"
|
ptypes "github.com/gogo/protobuf/types"
|
||||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
@ -167,7 +168,7 @@ func (c *container) Image(ctx context.Context) (Image, error) {
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type NewTaskOpts func(context.Context, *Client, *tasks.CreateTaskRequest) error
|
type NewTaskOpts func(context.Context, *Client, *TaskInfo) error
|
||||||
|
|
||||||
func (c *container) NewTask(ctx context.Context, ioCreate IOCreation, opts ...NewTaskOpts) (Task, error) {
|
func (c *container) NewTask(ctx context.Context, ioCreate IOCreation, opts ...NewTaskOpts) (Task, error) {
|
||||||
c.mu.Lock()
|
c.mu.Lock()
|
||||||
@ -197,18 +198,26 @@ func (c *container) NewTask(ctx context.Context, ioCreate IOCreation, opts ...Ne
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
var info TaskInfo
|
||||||
for _, o := range opts {
|
for _, o := range opts {
|
||||||
if err := o(ctx, c.client, request); err != nil {
|
if err := o(ctx, c.client, &info); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if info.Options != nil {
|
||||||
|
any, err := typeurl.MarshalAny(info.Options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
request.Options = any
|
||||||
|
}
|
||||||
t := &task{
|
t := &task{
|
||||||
client: c.client,
|
client: c.client,
|
||||||
io: i,
|
io: i,
|
||||||
id: c.ID(),
|
id: c.ID(),
|
||||||
}
|
}
|
||||||
|
if info.Checkpoint != nil {
|
||||||
if request.Checkpoint != nil {
|
request.Checkpoint = info.Checkpoint
|
||||||
// we need to defer the create call to start
|
// we need to defer the create call to start
|
||||||
t.deferred = request
|
t.deferred = request
|
||||||
} else {
|
} else {
|
||||||
|
@ -9,7 +9,6 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
|
||||||
"github.com/containerd/containerd/api/services/containers/v1"
|
"github.com/containerd/containerd/api/services/containers/v1"
|
||||||
"github.com/containerd/containerd/api/services/tasks/v1"
|
|
||||||
"github.com/containerd/containerd/api/types"
|
"github.com/containerd/containerd/api/types"
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
"github.com/containerd/containerd/errdefs"
|
||||||
@ -84,7 +83,7 @@ func WithCheckpoint(desc v1.Descriptor, rootfsID string) NewContainerOpts {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func WithTaskCheckpoint(desc v1.Descriptor) NewTaskOpts {
|
func WithTaskCheckpoint(desc v1.Descriptor) NewTaskOpts {
|
||||||
return func(ctx context.Context, c *Client, r *tasks.CreateTaskRequest) error {
|
return func(ctx context.Context, c *Client, info *TaskInfo) error {
|
||||||
id := desc.Digest
|
id := desc.Digest
|
||||||
index, err := decodeIndex(ctx, c.ContentStore(), id)
|
index, err := decodeIndex(ctx, c.ContentStore(), id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -92,7 +91,7 @@ func WithTaskCheckpoint(desc v1.Descriptor) NewTaskOpts {
|
|||||||
}
|
}
|
||||||
for _, m := range index.Manifests {
|
for _, m := range index.Manifests {
|
||||||
if m.MediaType == images.MediaTypeContainerd1Checkpoint {
|
if m.MediaType == images.MediaTypeContainerd1Checkpoint {
|
||||||
r.Checkpoint = &types.Descriptor{
|
info.Checkpoint = &types.Descriptor{
|
||||||
MediaType: m.MediaType,
|
MediaType: m.MediaType,
|
||||||
Size_: m.Size,
|
Size_: m.Size,
|
||||||
Digest: m.Digest,
|
Digest: m.Digest,
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
package runcopts
|
|
||||||
|
|
||||||
import (
|
|
||||||
tasks "github.com/containerd/containerd/api/services/tasks/v1"
|
|
||||||
"github.com/containerd/containerd/typeurl"
|
|
||||||
)
|
|
||||||
|
|
||||||
func WithExit(r *tasks.CheckpointTaskRequest) error {
|
|
||||||
a, err := typeurl.MarshalAny(&CheckpointOptions{
|
|
||||||
Exit: true,
|
|
||||||
})
|
|
||||||
r.Options = a
|
|
||||||
return err
|
|
||||||
}
|
|
@ -89,9 +89,11 @@ func (p *process) CloseIO(ctx context.Context, opts ...IOCloserOpts) error {
|
|||||||
ContainerID: p.task.id,
|
ContainerID: p.task.id,
|
||||||
ExecID: p.id,
|
ExecID: p.id,
|
||||||
}
|
}
|
||||||
|
var i IOCloseInfo
|
||||||
for _, o := range opts {
|
for _, o := range opts {
|
||||||
o(r)
|
o(&i)
|
||||||
}
|
}
|
||||||
|
r.Stdin = i.Stdin
|
||||||
_, err := p.task.client.TaskService().CloseIO(ctx, r)
|
_, err := p.task.client.TaskService().CloseIO(ctx, r)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/containerd/containerd/api/services/containers/v1"
|
"github.com/containerd/containerd/api/services/containers/v1"
|
||||||
"github.com/containerd/containerd/api/services/tasks/v1"
|
|
||||||
"github.com/containerd/containerd/images"
|
"github.com/containerd/containerd/images"
|
||||||
"github.com/containerd/containerd/typeurl"
|
"github.com/containerd/containerd/typeurl"
|
||||||
"github.com/opencontainers/image-spec/specs-go/v1"
|
"github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
@ -285,12 +284,8 @@ func WithSpec(spec *specs.Spec) NewContainerOpts {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func WithResources(resources *specs.LinuxResources) UpdateTaskOpts {
|
func WithResources(resources *specs.LinuxResources) UpdateTaskOpts {
|
||||||
return func(ctx context.Context, client *Client, r *tasks.UpdateTaskRequest) error {
|
return func(ctx context.Context, client *Client, r *UpdateTaskInfo) error {
|
||||||
any, err := typeurl.MarshalAny(resources)
|
r.Resources = resources
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
r.Resources = any
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/containerd/containerd/api/services/containers/v1"
|
"github.com/containerd/containerd/api/services/containers/v1"
|
||||||
tasks "github.com/containerd/containerd/api/services/tasks/v1"
|
|
||||||
"github.com/containerd/containerd/images"
|
"github.com/containerd/containerd/images"
|
||||||
"github.com/containerd/containerd/typeurl"
|
"github.com/containerd/containerd/typeurl"
|
||||||
"github.com/opencontainers/image-spec/specs-go/v1"
|
"github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
@ -87,12 +86,8 @@ func WithSpec(spec *specs.Spec) NewContainerOpts {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func WithResources(resources *specs.WindowsResources) UpdateTaskOpts {
|
func WithResources(resources *specs.WindowsResources) UpdateTaskOpts {
|
||||||
return func(ctx context.Context, client *Client, r *tasks.UpdateTaskRequest) error {
|
return func(ctx context.Context, client *Client, r *UpdateTaskInfo) error {
|
||||||
any, err := typeurl.MarshalAny(resources)
|
r.Resources = resources
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
r.Resources = any
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
65
task.go
65
task.go
@ -13,10 +13,13 @@ import (
|
|||||||
"github.com/containerd/containerd/api/services/containers/v1"
|
"github.com/containerd/containerd/api/services/containers/v1"
|
||||||
eventsapi "github.com/containerd/containerd/api/services/events/v1"
|
eventsapi "github.com/containerd/containerd/api/services/events/v1"
|
||||||
"github.com/containerd/containerd/api/services/tasks/v1"
|
"github.com/containerd/containerd/api/services/tasks/v1"
|
||||||
|
"github.com/containerd/containerd/api/types"
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
|
"github.com/containerd/containerd/linux/runcopts"
|
||||||
"github.com/containerd/containerd/rootfs"
|
"github.com/containerd/containerd/rootfs"
|
||||||
"github.com/containerd/containerd/runtime"
|
"github.com/containerd/containerd/runtime"
|
||||||
"github.com/containerd/containerd/typeurl"
|
"github.com/containerd/containerd/typeurl"
|
||||||
|
digest "github.com/opencontainers/go-digest"
|
||||||
"github.com/opencontainers/image-spec/specs-go/v1"
|
"github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
@ -34,13 +37,27 @@ const (
|
|||||||
Pausing TaskStatus = "pausing"
|
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
|
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 {
|
type Task interface {
|
||||||
Pid() uint32
|
Pid() uint32
|
||||||
@ -56,7 +73,7 @@ type Task interface {
|
|||||||
CloseIO(context.Context, ...IOCloserOpts) error
|
CloseIO(context.Context, ...IOCloserOpts) error
|
||||||
Resize(ctx context.Context, w, h uint32) error
|
Resize(ctx context.Context, w, h uint32) error
|
||||||
IO() *IO
|
IO() *IO
|
||||||
Checkpoint(context.Context, ...CheckpointOpts) (v1.Descriptor, error)
|
Checkpoint(context.Context, ...CheckpointTaskOpts) (v1.Descriptor, error)
|
||||||
Update(context.Context, ...UpdateTaskOpts) error
|
Update(context.Context, ...UpdateTaskOpts) error
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,9 +234,11 @@ func (t *task) CloseIO(ctx context.Context, opts ...IOCloserOpts) error {
|
|||||||
r := &tasks.CloseIORequest{
|
r := &tasks.CloseIORequest{
|
||||||
ContainerID: t.id,
|
ContainerID: t.id,
|
||||||
}
|
}
|
||||||
|
var i IOCloseInfo
|
||||||
for _, o := range opts {
|
for _, o := range opts {
|
||||||
o(r)
|
o(&i)
|
||||||
}
|
}
|
||||||
|
r.Stdin = i.Stdin
|
||||||
_, err := t.client.TaskService().CloseIO(ctx, r)
|
_, err := t.client.TaskService().CloseIO(ctx, r)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -237,15 +256,24 @@ func (t *task) Resize(ctx context.Context, w, h uint32) error {
|
|||||||
return err
|
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{
|
request := &tasks.CheckpointTaskRequest{
|
||||||
ContainerID: t.id,
|
ContainerID: t.id,
|
||||||
}
|
}
|
||||||
|
var i CheckpointTaskInfo
|
||||||
for _, o := range opts {
|
for _, o := range opts {
|
||||||
if err := o(request); err != nil {
|
if err := o(&i); err != nil {
|
||||||
return d, err
|
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
|
// make sure we pause it and resume after all other filesystem operations are completed
|
||||||
if err := t.Pause(ctx); err != nil {
|
if err := t.Pause(ctx); err != nil {
|
||||||
return d, err
|
return d, err
|
||||||
@ -272,17 +300,29 @@ func (t *task) Checkpoint(ctx context.Context, opts ...CheckpointOpts) (d v1.Des
|
|||||||
return t.writeIndex(ctx, &index)
|
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 {
|
func (t *task) Update(ctx context.Context, opts ...UpdateTaskOpts) error {
|
||||||
request := &tasks.UpdateTaskRequest{
|
request := &tasks.UpdateTaskRequest{
|
||||||
ContainerID: t.id,
|
ContainerID: t.id,
|
||||||
}
|
}
|
||||||
|
var i UpdateTaskInfo
|
||||||
for _, o := range opts {
|
for _, o := range opts {
|
||||||
if err := o(ctx, t.client, request); err != nil {
|
if err := o(ctx, t.client, &i); err != nil {
|
||||||
return err
|
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)
|
_, err := t.client.TaskService().Update(ctx, request)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -359,3 +399,10 @@ func writeContent(ctx context.Context, store content.Store, mediaType, ref strin
|
|||||||
Size: size,
|
Size: size,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func WithExit(r *CheckpointTaskInfo) error {
|
||||||
|
r.Options = &runcopts.CheckpointOptions{
|
||||||
|
Exit: true,
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user