| |
@@ -1,1464 +0,0 @@
|
| |
- From 3b98ff4a9f28118973917ed46c3eee59688fcc8f Mon Sep 17 00:00:00 2001
|
| |
- From: Kazuyoshi Kato <katokazu@amazon.com>
|
| |
- Date: Tue, 22 Mar 2022 00:40:39 +0000
|
| |
- Subject: [PATCH] Use typeurl.Any instead of github.com/gogo/protobuf/types.Any
|
| |
-
|
| |
- This commit upgrades github.com/containerd/typeurl to use typeurl.Any.
|
| |
- The interface hides gogo/protobuf/types.Any from containerd's Go client.
|
| |
-
|
| |
- Signed-off-by: Kazuyoshi Kato <katokazu@amazon.com>
|
| |
- ---
|
| |
- cmd/containerd-shim/main_unix.go | 4 +-
|
| |
- cmd/ctr/commands/containers/containers.go | 2 +-
|
| |
- container.go | 10 +--
|
| |
- container_checkpoint_opts.go | 8 +--
|
| |
- container_opts.go | 10 +--
|
| |
- containers/containers.go | 8 +--
|
| |
- containerstore.go | 19 ++++--
|
| |
- events.go | 5 +-
|
| |
- events/events.go | 3 +-
|
| |
- events/exchange/exchange.go | 8 +--
|
| |
- go.mod | 2 +-
|
| |
- go.sum | 3 +-
|
| |
- integration/client/container_test.go | 8 +--
|
| |
- integration/client/go.mod | 2 +-
|
| |
- integration/client/go.sum | 3 +-
|
| |
- metadata/boltutil/helpers.go | 20 +++---
|
| |
- metadata/containers.go | 3 +-
|
| |
- metadata/containers_test.go | 83 ++++++++++++++---------
|
| |
- metrics/cgroups/metrics_test.go | 6 +-
|
| |
- pkg/cri/server/events.go | 3 +-
|
| |
- pkg/cri/server/helpers.go | 5 +-
|
| |
- pkg/cri/server/helpers_test.go | 13 ++++
|
| |
- pkg/cri/server/restart.go | 4 +-
|
| |
- protobuf/any.go | 47 +++++++++++++
|
| |
- protobuf/any_test.go | 26 +++++++
|
| |
- runtime/runtime.go | 8 +--
|
| |
- runtime/v1/linux/runtime.go | 9 +--
|
| |
- runtime/v1/linux/task.go | 4 +-
|
| |
- runtime/v1/shim/service.go | 3 +-
|
| |
- runtime/v2/manager.go | 7 +-
|
| |
- runtime/v2/runc/container.go | 6 +-
|
| |
- runtime/v2/runc/task/service.go | 5 +-
|
| |
- runtime/v2/runc/v1/service.go | 5 +-
|
| |
- runtime/v2/shim.go | 5 +-
|
| |
- runtime/v2/shim/publisher.go | 4 +-
|
| |
- services/containers/helpers.go | 20 ++++--
|
| |
- services/events/service.go | 3 +-
|
| |
- services/tasks/local.go | 5 +-
|
| |
- task.go | 7 +-
|
| |
- 39 files changed, 270 insertions(+), 126 deletions(-)
|
| |
- create mode 100644 protobuf/any.go
|
| |
- create mode 100644 protobuf/any_test.go
|
| |
-
|
| |
- diff --git a/cmd/containerd-shim/main_unix.go b/cmd/containerd-shim/main_unix.go
|
| |
- index 024611bf3..ef32ae38b 100644
|
| |
- --- a/cmd/containerd-shim/main_unix.go
|
| |
- +++ b/cmd/containerd-shim/main_unix.go
|
| |
- @@ -38,12 +38,12 @@ import (
|
| |
- "github.com/containerd/containerd/events"
|
| |
- "github.com/containerd/containerd/namespaces"
|
| |
- "github.com/containerd/containerd/pkg/process"
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- shimlog "github.com/containerd/containerd/runtime/v1"
|
| |
- "github.com/containerd/containerd/runtime/v1/shim"
|
| |
- shimapi "github.com/containerd/containerd/runtime/v1/shim/v1"
|
| |
- "github.com/containerd/containerd/sys/reaper"
|
| |
- "github.com/containerd/ttrpc"
|
| |
- - "github.com/containerd/typeurl"
|
| |
- ptypes "github.com/gogo/protobuf/types"
|
| |
- "github.com/sirupsen/logrus"
|
| |
- exec "golang.org/x/sys/execabs"
|
| |
- @@ -286,7 +286,7 @@ type remoteEventsPublisher struct {
|
| |
-
|
| |
- func (l *remoteEventsPublisher) Publish(ctx context.Context, topic string, event events.Event) error {
|
| |
- ns, _ := namespaces.Namespace(ctx)
|
| |
- - encoded, err := typeurl.MarshalAny(event)
|
| |
- + encoded, err := protobuf.MarshalAnyToProto(event)
|
| |
- if err != nil {
|
| |
- return err
|
| |
- }
|
| |
- diff --git a/cmd/ctr/commands/containers/containers.go b/cmd/ctr/commands/containers/containers.go
|
| |
- index d1025344e..3f2d55d6c 100644
|
| |
- --- a/cmd/ctr/commands/containers/containers.go
|
| |
- +++ b/cmd/ctr/commands/containers/containers.go
|
| |
- @@ -280,7 +280,7 @@ var infoCommand = cli.Command{
|
| |
- return nil
|
| |
- }
|
| |
-
|
| |
- - if info.Spec != nil && info.Spec.Value != nil {
|
| |
- + if info.Spec != nil && info.Spec.GetValue() != nil {
|
| |
- v, err := typeurl.UnmarshalAny(info.Spec)
|
| |
- if err != nil {
|
| |
- return err
|
| |
- diff --git a/container.go b/container.go
|
| |
- index 7d8d674c8..4236fecd2 100644
|
| |
- --- a/container.go
|
| |
- +++ b/container.go
|
| |
- @@ -32,10 +32,10 @@ import (
|
| |
- "github.com/containerd/containerd/errdefs"
|
| |
- "github.com/containerd/containerd/images"
|
| |
- "github.com/containerd/containerd/oci"
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- "github.com/containerd/containerd/runtime/v2/runc/options"
|
| |
- "github.com/containerd/fifo"
|
| |
- "github.com/containerd/typeurl"
|
| |
- - prototypes "github.com/gogo/protobuf/types"
|
| |
- ver "github.com/opencontainers/image-spec/specs-go"
|
| |
- ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
| |
- "github.com/opencontainers/selinux/go-selinux/label"
|
| |
- @@ -74,7 +74,7 @@ type Container interface {
|
| |
- // SetLabels sets the provided labels for the container and returns the final label set
|
| |
- SetLabels(context.Context, map[string]string) (map[string]string, error)
|
| |
- // Extensions returns the extensions set on the container
|
| |
- - Extensions(context.Context) (map[string]prototypes.Any, error)
|
| |
- + Extensions(context.Context) (map[string]typeurl.Any, error)
|
| |
- // Update a container
|
| |
- Update(context.Context, ...UpdateContainerOpts) error
|
| |
- // Checkpoint creates a checkpoint image of the current container
|
| |
- @@ -120,7 +120,7 @@ func (c *container) Info(ctx context.Context, opts ...InfoOpts) (containers.Cont
|
| |
- return c.metadata, nil
|
| |
- }
|
| |
-
|
| |
- -func (c *container) Extensions(ctx context.Context) (map[string]prototypes.Any, error) {
|
| |
- +func (c *container) Extensions(ctx context.Context) (map[string]typeurl.Any, error) {
|
| |
- r, err := c.get(ctx)
|
| |
- if err != nil {
|
| |
- return nil, err
|
| |
- @@ -163,7 +163,7 @@ func (c *container) Spec(ctx context.Context) (*oci.Spec, error) {
|
| |
- return nil, err
|
| |
- }
|
| |
- var s oci.Spec
|
| |
- - if err := json.Unmarshal(r.Spec.Value, &s); err != nil {
|
| |
- + if err := json.Unmarshal(r.Spec.GetValue(), &s); err != nil {
|
| |
- return nil, err
|
| |
- }
|
| |
- return &s, nil
|
| |
- @@ -284,7 +284,7 @@ func (c *container) NewTask(ctx context.Context, ioCreate cio.Creator, opts ...N
|
| |
- if err != nil {
|
| |
- return nil, err
|
| |
- }
|
| |
- - request.Options = any
|
| |
- + request.Options = protobuf.FromAny(any)
|
| |
- }
|
| |
- t := &task{
|
| |
- client: c.client,
|
| |
- diff --git a/container_checkpoint_opts.go b/container_checkpoint_opts.go
|
| |
- index a64ef618b..ee2fa1b97 100644
|
| |
- --- a/container_checkpoint_opts.go
|
| |
- +++ b/container_checkpoint_opts.go
|
| |
- @@ -28,9 +28,9 @@ import (
|
| |
- "github.com/containerd/containerd/diff"
|
| |
- "github.com/containerd/containerd/images"
|
| |
- "github.com/containerd/containerd/platforms"
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- "github.com/containerd/containerd/rootfs"
|
| |
- "github.com/containerd/containerd/runtime/v2/runc/options"
|
| |
- - "github.com/containerd/typeurl"
|
| |
- imagespec "github.com/opencontainers/image-spec/specs-go/v1"
|
| |
- )
|
| |
-
|
| |
- @@ -56,7 +56,7 @@ func WithCheckpointImage(ctx context.Context, client *Client, c *containers.Cont
|
| |
-
|
| |
- // WithCheckpointTask includes the running task
|
| |
- func WithCheckpointTask(ctx context.Context, client *Client, c *containers.Container, index *imagespec.Index, copts *options.CheckpointOptions) error {
|
| |
- - any, err := typeurl.MarshalAny(copts)
|
| |
- + any, err := protobuf.MarshalAnyToProto(copts)
|
| |
- if err != nil {
|
| |
- return nil
|
| |
- }
|
| |
- @@ -97,8 +97,8 @@ func WithCheckpointTask(ctx context.Context, client *Client, c *containers.Conta
|
| |
-
|
| |
- // WithCheckpointRuntime includes the container runtime info
|
| |
- func WithCheckpointRuntime(ctx context.Context, client *Client, c *containers.Container, index *imagespec.Index, copts *options.CheckpointOptions) error {
|
| |
- - if c.Runtime.Options != nil {
|
| |
- - data, err := c.Runtime.Options.Marshal()
|
| |
- + if c.Runtime.Options != nil && c.Runtime.Options.GetValue() != nil {
|
| |
- + data, err := protobuf.FromAny(c.Runtime.Options).Marshal()
|
| |
- if err != nil {
|
| |
- return err
|
| |
- }
|
| |
- diff --git a/container_opts.go b/container_opts.go
|
| |
- index 4d630ea6c..f005fe1c7 100644
|
| |
- --- a/container_opts.go
|
| |
- +++ b/container_opts.go
|
| |
- @@ -27,9 +27,9 @@ import (
|
| |
- "github.com/containerd/containerd/errdefs"
|
| |
- "github.com/containerd/containerd/images"
|
| |
- "github.com/containerd/containerd/oci"
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- "github.com/containerd/containerd/snapshots"
|
| |
- "github.com/containerd/typeurl"
|
| |
- - "github.com/gogo/protobuf/types"
|
| |
- "github.com/opencontainers/image-spec/identity"
|
| |
- v1 "github.com/opencontainers/image-spec/specs-go/v1"
|
| |
- )
|
| |
- @@ -57,7 +57,7 @@ type InfoConfig struct {
|
| |
- func WithRuntime(name string, options interface{}) NewContainerOpts {
|
| |
- return func(ctx context.Context, client *Client, c *containers.Container) error {
|
| |
- var (
|
| |
- - any *types.Any
|
| |
- + any typeurl.Any
|
| |
- err error
|
| |
- )
|
| |
- if options != nil {
|
| |
- @@ -288,9 +288,9 @@ func WithContainerExtension(name string, extension interface{}) NewContainerOpts
|
| |
- }
|
| |
-
|
| |
- if c.Extensions == nil {
|
| |
- - c.Extensions = make(map[string]types.Any)
|
| |
- + c.Extensions = make(map[string]typeurl.Any)
|
| |
- }
|
| |
- - c.Extensions[name] = *any
|
| |
- + c.Extensions[name] = any
|
| |
- return nil
|
| |
- }
|
| |
- }
|
| |
- @@ -315,7 +315,7 @@ func WithSpec(s *oci.Spec, opts ...oci.SpecOpts) NewContainerOpts {
|
| |
- }
|
| |
-
|
| |
- var err error
|
| |
- - c.Spec, err = typeurl.MarshalAny(s)
|
| |
- + c.Spec, err = protobuf.MarshalAnyToProto(s)
|
| |
- return err
|
| |
- }
|
| |
- }
|
| |
- diff --git a/containers/containers.go b/containers/containers.go
|
| |
- index 7174bbd6a..275f8069e 100644
|
| |
- --- a/containers/containers.go
|
| |
- +++ b/containers/containers.go
|
| |
- @@ -20,7 +20,7 @@ import (
|
| |
- "context"
|
| |
- "time"
|
| |
-
|
| |
- - "github.com/gogo/protobuf/types"
|
| |
- + "github.com/containerd/typeurl"
|
| |
- )
|
| |
-
|
| |
- // Container represents the set of data pinned by a container. Unless otherwise
|
| |
- @@ -53,7 +53,7 @@ type Container struct {
|
| |
- // container.
|
| |
- //
|
| |
- // This field is required but mutable.
|
| |
- - Spec *types.Any
|
| |
- + Spec typeurl.Any
|
| |
-
|
| |
- // SnapshotKey specifies the snapshot key to use for the container's root
|
| |
- // filesystem. When starting a task from this container, a caller should
|
| |
- @@ -75,13 +75,13 @@ type Container struct {
|
| |
- UpdatedAt time.Time
|
| |
-
|
| |
- // Extensions stores client-specified metadata
|
| |
- - Extensions map[string]types.Any
|
| |
- + Extensions map[string]typeurl.Any
|
| |
- }
|
| |
-
|
| |
- // RuntimeInfo holds runtime specific information
|
| |
- type RuntimeInfo struct {
|
| |
- Name string
|
| |
- - Options *types.Any
|
| |
- + Options typeurl.Any
|
| |
- }
|
| |
-
|
| |
- // Store interacts with the underlying container storage
|
| |
- diff --git a/containerstore.go b/containerstore.go
|
| |
- index 2756e2a68..456e3e52a 100644
|
| |
- --- a/containerstore.go
|
| |
- +++ b/containerstore.go
|
| |
- @@ -24,6 +24,8 @@ import (
|
| |
- containersapi "github.com/containerd/containerd/api/services/containers/v1"
|
| |
- "github.com/containerd/containerd/containers"
|
| |
- "github.com/containerd/containerd/errdefs"
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- + "github.com/containerd/typeurl"
|
| |
- ptypes "github.com/gogo/protobuf/types"
|
| |
- "google.golang.org/grpc/codes"
|
| |
- "google.golang.org/grpc/status"
|
| |
- @@ -148,18 +150,22 @@ func (r *remoteContainers) Delete(ctx context.Context, id string) error {
|
| |
- }
|
| |
-
|
| |
- func containerToProto(container *containers.Container) containersapi.Container {
|
| |
- + extensions := make(map[string]ptypes.Any)
|
| |
- + for k, v := range container.Extensions {
|
| |
- + extensions[k] = *protobuf.FromAny(v)
|
| |
- + }
|
| |
- return containersapi.Container{
|
| |
- ID: container.ID,
|
| |
- Labels: container.Labels,
|
| |
- Image: container.Image,
|
| |
- Runtime: &containersapi.Container_Runtime{
|
| |
- Name: container.Runtime.Name,
|
| |
- - Options: container.Runtime.Options,
|
| |
- + Options: protobuf.FromAny(container.Runtime.Options),
|
| |
- },
|
| |
- - Spec: container.Spec,
|
| |
- + Spec: protobuf.FromAny(container.Spec),
|
| |
- Snapshotter: container.Snapshotter,
|
| |
- SnapshotKey: container.SnapshotKey,
|
| |
- - Extensions: container.Extensions,
|
| |
- + Extensions: extensions,
|
| |
- }
|
| |
- }
|
| |
-
|
| |
- @@ -171,6 +177,11 @@ func containerFromProto(containerpb *containersapi.Container) containers.Contain
|
| |
- Options: containerpb.Runtime.Options,
|
| |
- }
|
| |
- }
|
| |
- + extensions := make(map[string]typeurl.Any)
|
| |
- + for k, v := range containerpb.Extensions {
|
| |
- + v := v
|
| |
- + extensions[k] = &v
|
| |
- + }
|
| |
- return containers.Container{
|
| |
- ID: containerpb.ID,
|
| |
- Labels: containerpb.Labels,
|
| |
- @@ -181,7 +192,7 @@ func containerFromProto(containerpb *containersapi.Container) containers.Contain
|
| |
- SnapshotKey: containerpb.SnapshotKey,
|
| |
- CreatedAt: containerpb.CreatedAt,
|
| |
- UpdatedAt: containerpb.UpdatedAt,
|
| |
- - Extensions: containerpb.Extensions,
|
| |
- + Extensions: extensions,
|
| |
- }
|
| |
- }
|
| |
-
|
| |
- diff --git a/events.go b/events.go
|
| |
- index 3577b7c3a..d6499ad3b 100644
|
| |
- --- a/events.go
|
| |
- +++ b/events.go
|
| |
- @@ -22,6 +22,7 @@ import (
|
| |
- eventsapi "github.com/containerd/containerd/api/services/events/v1"
|
| |
- "github.com/containerd/containerd/errdefs"
|
| |
- "github.com/containerd/containerd/events"
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- "github.com/containerd/typeurl"
|
| |
- )
|
| |
-
|
| |
- @@ -51,7 +52,7 @@ func (e *eventRemote) Publish(ctx context.Context, topic string, event events.Ev
|
| |
- }
|
| |
- req := &eventsapi.PublishRequest{
|
| |
- Topic: topic,
|
| |
- - Event: any,
|
| |
- + Event: protobuf.FromAny(any),
|
| |
- }
|
| |
- if _, err := e.client.Publish(ctx, req); err != nil {
|
| |
- return errdefs.FromGRPC(err)
|
| |
- @@ -65,7 +66,7 @@ func (e *eventRemote) Forward(ctx context.Context, envelope *events.Envelope) er
|
| |
- Timestamp: envelope.Timestamp,
|
| |
- Namespace: envelope.Namespace,
|
| |
- Topic: envelope.Topic,
|
| |
- - Event: envelope.Event,
|
| |
- + Event: protobuf.FromAny(envelope.Event),
|
| |
- },
|
| |
- }
|
| |
- if _, err := e.client.Forward(ctx, req); err != nil {
|
| |
- diff --git a/events/events.go b/events/events.go
|
| |
- index b7eb86f1e..8af0ec03a 100644
|
| |
- --- a/events/events.go
|
| |
- +++ b/events/events.go
|
| |
- @@ -21,7 +21,6 @@ import (
|
| |
- "time"
|
| |
-
|
| |
- "github.com/containerd/typeurl"
|
| |
- - "github.com/gogo/protobuf/types"
|
| |
- )
|
| |
-
|
| |
- // Envelope provides the packaging for an event.
|
| |
- @@ -29,7 +28,7 @@ type Envelope struct {
|
| |
- Timestamp time.Time
|
| |
- Namespace string
|
| |
- Topic string
|
| |
- - Event *types.Any
|
| |
- + Event typeurl.Any
|
| |
- }
|
| |
-
|
| |
- // Field returns the value for the given fieldpath as a string, if defined.
|
| |
- diff --git a/events/exchange/exchange.go b/events/exchange/exchange.go
|
| |
- index a1f385d7a..7f085dc91 100644
|
| |
- --- a/events/exchange/exchange.go
|
| |
- +++ b/events/exchange/exchange.go
|
| |
- @@ -30,7 +30,6 @@ import (
|
| |
- "github.com/containerd/containerd/namespaces"
|
| |
- "github.com/containerd/typeurl"
|
| |
- goevents "github.com/docker/go-events"
|
| |
- - "github.com/gogo/protobuf/types"
|
| |
- "github.com/sirupsen/logrus"
|
| |
- )
|
| |
-
|
| |
- @@ -63,7 +62,7 @@ func (e *Exchange) Forward(ctx context.Context, envelope *events.Envelope) (err
|
| |
- logger := log.G(ctx).WithFields(logrus.Fields{
|
| |
- "topic": envelope.Topic,
|
| |
- "ns": envelope.Namespace,
|
| |
- - "type": envelope.Event.TypeUrl,
|
| |
- + "type": envelope.Event.GetTypeUrl(),
|
| |
- })
|
| |
-
|
| |
- if err != nil {
|
| |
- @@ -82,7 +81,6 @@ func (e *Exchange) Forward(ctx context.Context, envelope *events.Envelope) (err
|
| |
- func (e *Exchange) Publish(ctx context.Context, topic string, event events.Event) (err error) {
|
| |
- var (
|
| |
- namespace string
|
| |
- - encoded *types.Any
|
| |
- envelope events.Envelope
|
| |
- )
|
| |
-
|
| |
- @@ -94,7 +92,7 @@ func (e *Exchange) Publish(ctx context.Context, topic string, event events.Event
|
| |
- return fmt.Errorf("envelope topic %q: %w", topic, err)
|
| |
- }
|
| |
-
|
| |
- - encoded, err = typeurl.MarshalAny(event)
|
| |
- + encoded, err := typeurl.MarshalAny(event)
|
| |
- if err != nil {
|
| |
- return err
|
| |
- }
|
| |
- @@ -108,7 +106,7 @@ func (e *Exchange) Publish(ctx context.Context, topic string, event events.Event
|
| |
- logger := log.G(ctx).WithFields(logrus.Fields{
|
| |
- "topic": envelope.Topic,
|
| |
- "ns": envelope.Namespace,
|
| |
- - "type": envelope.Event.TypeUrl,
|
| |
- + "type": envelope.Event.GetTypeUrl(),
|
| |
- })
|
| |
-
|
| |
- if err != nil {
|
| |
- diff --git a/go.mod b/go.mod
|
| |
- index 77f07d3ae..f42acf904 100644
|
| |
- --- a/go.mod
|
| |
- +++ b/go.mod
|
| |
- @@ -17,7 +17,7 @@ require (
|
| |
- github.com/containerd/imgcrypt v1.1.4
|
| |
- github.com/containerd/nri v0.1.0
|
| |
- github.com/containerd/ttrpc v1.1.0
|
| |
- - github.com/containerd/typeurl v1.0.2
|
| |
- + github.com/containerd/typeurl v1.0.3-0.20220324183432-6193a0e03259
|
| |
- github.com/containerd/zfs v1.0.0
|
| |
- github.com/containernetworking/cni v1.1.1
|
| |
- github.com/containernetworking/plugins v1.1.1
|
| |
- diff --git a/go.sum b/go.sum
|
| |
- index eefcc88f7..e4816994f 100644
|
| |
- --- a/go.sum
|
| |
- +++ b/go.sum
|
| |
- @@ -260,8 +260,9 @@ github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Ev
|
| |
- github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc=
|
| |
- github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk=
|
| |
- github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg=
|
| |
- -github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY=
|
| |
- github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s=
|
| |
- +github.com/containerd/typeurl v1.0.3-0.20220324183432-6193a0e03259 h1:bJv9qgjarrsdd4XIIczeRdYXON88Fgn3GdXVfnQjcSo=
|
| |
- +github.com/containerd/typeurl v1.0.3-0.20220324183432-6193a0e03259/go.mod h1:HDkcKOXRnX6yKnXv3P0QrogFi0DoiauK/LpQi961f0A=
|
| |
- github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw=
|
| |
- github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y=
|
| |
- github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY=
|
| |
- diff --git a/integration/client/container_test.go b/integration/client/container_test.go
|
| |
- index d05ebd1ec..c12645e66 100644
|
| |
- --- a/integration/client/container_test.go
|
| |
- +++ b/integration/client/container_test.go
|
| |
- @@ -1440,11 +1440,11 @@ func TestContainerExtensions(t *testing.T) {
|
| |
- if len(cExts) != 1 {
|
| |
- t.Errorf("expected 1 container extension")
|
| |
- }
|
| |
- - if cExts["hello"].TypeUrl != ext.TypeUrl {
|
| |
- - t.Errorf("got unexpected type url for extension: %s", cExts["hello"].TypeUrl)
|
| |
- + if actual := cExts["hello"].GetTypeUrl(); actual != ext.TypeUrl {
|
| |
- + t.Errorf("got unexpected type url for extension: %s", actual)
|
| |
- }
|
| |
- - if !bytes.Equal(cExts["hello"].Value, ext.Value) {
|
| |
- - t.Errorf("expected extension value %q, got: %q", ext.Value, cExts["hello"].Value)
|
| |
- + if actual := cExts["hello"].GetValue(); !bytes.Equal(actual, ext.Value) {
|
| |
- + t.Errorf("expected extension value %q, got: %q", ext.Value, actual)
|
| |
- }
|
| |
- }
|
| |
-
|
| |
- diff --git a/integration/client/go.mod b/integration/client/go.mod
|
| |
- index f49dca653..bfd8b24ba 100644
|
| |
- --- a/integration/client/go.mod
|
| |
- +++ b/integration/client/go.mod
|
| |
- @@ -10,7 +10,7 @@ require (
|
| |
- github.com/containerd/containerd v1.6.1
|
| |
- github.com/containerd/go-runc v1.0.0
|
| |
- github.com/containerd/ttrpc v1.1.0
|
| |
- - github.com/containerd/typeurl v1.0.2
|
| |
- + github.com/containerd/typeurl v1.0.3-0.20220324183432-6193a0e03259
|
| |
- github.com/gogo/protobuf v1.3.2
|
| |
- github.com/opencontainers/go-digest v1.0.0
|
| |
- github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799
|
| |
- diff --git a/integration/client/go.sum b/integration/client/go.sum
|
| |
- index 9ca7044a8..5351d9eb6 100644
|
| |
- --- a/integration/client/go.sum
|
| |
- +++ b/integration/client/go.sum
|
| |
- @@ -146,8 +146,9 @@ github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8h
|
| |
- github.com/containerd/ttrpc v1.1.0 h1:GbtyLRxb0gOLR0TYQWt3O6B0NvT8tMdorEHqIQo/lWI=
|
| |
- github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ=
|
| |
- github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg=
|
| |
- -github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY=
|
| |
- github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s=
|
| |
- +github.com/containerd/typeurl v1.0.3-0.20220324183432-6193a0e03259 h1:bJv9qgjarrsdd4XIIczeRdYXON88Fgn3GdXVfnQjcSo=
|
| |
- +github.com/containerd/typeurl v1.0.3-0.20220324183432-6193a0e03259/go.mod h1:HDkcKOXRnX6yKnXv3P0QrogFi0DoiauK/LpQi961f0A=
|
| |
- github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY=
|
| |
- github.com/containernetworking/cni v1.0.1/go.mod h1:AKuhXbN5EzmD4yTNtfSsX3tPcmtrBI6QcRV0NiNt15Y=
|
| |
- github.com/containernetworking/cni v1.1.1/go.mod h1:sDpYKmGVENF3s6uvMvGgldDWeG8dMxakj/u+i9ht9vw=
|
| |
- diff --git a/metadata/boltutil/helpers.go b/metadata/boltutil/helpers.go
|
| |
- index 4722a5226..2b2b0ad1e 100644
|
| |
- --- a/metadata/boltutil/helpers.go
|
| |
- +++ b/metadata/boltutil/helpers.go
|
| |
- @@ -20,6 +20,8 @@ import (
|
| |
- "fmt"
|
| |
- "time"
|
| |
-
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- + "github.com/containerd/typeurl"
|
| |
- "github.com/gogo/protobuf/proto"
|
| |
- "github.com/gogo/protobuf/types"
|
| |
- bolt "go.etcd.io/bbolt"
|
| |
- @@ -151,7 +153,7 @@ func WriteTimestamps(bkt *bolt.Bucket, created, updated time.Time) error {
|
| |
-
|
| |
- // WriteExtensions will write a KV map to the given bucket,
|
| |
- // where `K` is a string key and `V` is a protobuf's Any type that represents a generic extension.
|
| |
- -func WriteExtensions(bkt *bolt.Bucket, extensions map[string]types.Any) error {
|
| |
- +func WriteExtensions(bkt *bolt.Bucket, extensions map[string]typeurl.Any) error {
|
| |
- if len(extensions) == 0 {
|
| |
- return nil
|
| |
- }
|
| |
- @@ -162,7 +164,8 @@ func WriteExtensions(bkt *bolt.Bucket, extensions map[string]types.Any) error {
|
| |
- }
|
| |
-
|
| |
- for name, ext := range extensions {
|
| |
- - p, err := proto.Marshal(&ext)
|
| |
- + ext := protobuf.FromAny(ext)
|
| |
- + p, err := proto.Marshal(ext)
|
| |
- if err != nil {
|
| |
- return err
|
| |
- }
|
| |
- @@ -176,9 +179,9 @@ func WriteExtensions(bkt *bolt.Bucket, extensions map[string]types.Any) error {
|
| |
- }
|
| |
-
|
| |
- // ReadExtensions will read back a map of extensions from the given bucket, previously written by WriteExtensions
|
| |
- -func ReadExtensions(bkt *bolt.Bucket) (map[string]types.Any, error) {
|
| |
- +func ReadExtensions(bkt *bolt.Bucket) (map[string]typeurl.Any, error) {
|
| |
- var (
|
| |
- - extensions = make(map[string]types.Any)
|
| |
- + extensions = make(map[string]typeurl.Any)
|
| |
- ebkt = bkt.Bucket(bucketKeyExtensions)
|
| |
- )
|
| |
-
|
| |
- @@ -192,7 +195,7 @@ func ReadExtensions(bkt *bolt.Bucket) (map[string]types.Any, error) {
|
| |
- return err
|
| |
- }
|
| |
-
|
| |
- - extensions[string(k)] = t
|
| |
- + extensions[string(k)] = &t
|
| |
- return nil
|
| |
- }); err != nil {
|
| |
- return nil, err
|
| |
- @@ -202,12 +205,13 @@ func ReadExtensions(bkt *bolt.Bucket) (map[string]types.Any, error) {
|
| |
- }
|
| |
-
|
| |
- // WriteAny write a protobuf's Any type to the bucket
|
| |
- -func WriteAny(bkt *bolt.Bucket, name []byte, any *types.Any) error {
|
| |
- - if any == nil {
|
| |
- +func WriteAny(bkt *bolt.Bucket, name []byte, any typeurl.Any) error {
|
| |
- + pbany := protobuf.FromAny(any)
|
| |
- + if pbany == nil {
|
| |
- return nil
|
| |
- }
|
| |
-
|
| |
- - data, err := proto.Marshal(any)
|
| |
- + data, err := proto.Marshal(pbany)
|
| |
- if err != nil {
|
| |
- return err
|
| |
- }
|
| |
- diff --git a/metadata/containers.go b/metadata/containers.go
|
| |
- index 97002e588..b27dc0f87 100644
|
| |
- --- a/metadata/containers.go
|
| |
- +++ b/metadata/containers.go
|
| |
- @@ -30,6 +30,7 @@ import (
|
| |
- "github.com/containerd/containerd/labels"
|
| |
- "github.com/containerd/containerd/metadata/boltutil"
|
| |
- "github.com/containerd/containerd/namespaces"
|
| |
- + "github.com/containerd/typeurl"
|
| |
- "github.com/gogo/protobuf/proto"
|
| |
- "github.com/gogo/protobuf/types"
|
| |
- bolt "go.etcd.io/bbolt"
|
| |
- @@ -211,7 +212,7 @@ func (s *containerStore) Update(ctx context.Context, container containers.Contai
|
| |
-
|
| |
- if strings.HasPrefix(path, "extensions.") {
|
| |
- if updated.Extensions == nil {
|
| |
- - updated.Extensions = map[string]types.Any{}
|
| |
- + updated.Extensions = map[string]typeurl.Any{}
|
| |
- }
|
| |
- key := strings.TrimPrefix(path, "extensions.")
|
| |
- updated.Extensions[key] = container.Extensions[key]
|
| |
- diff --git a/metadata/containers_test.go b/metadata/containers_test.go
|
| |
- index c0192a458..7be6e0f2d 100644
|
| |
- --- a/metadata/containers_test.go
|
| |
- +++ b/metadata/containers_test.go
|
| |
- @@ -32,10 +32,13 @@ import (
|
| |
- "github.com/containerd/containerd/filters"
|
| |
- "github.com/containerd/containerd/log/logtest"
|
| |
- "github.com/containerd/containerd/namespaces"
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- "github.com/containerd/typeurl"
|
| |
- "github.com/gogo/protobuf/types"
|
| |
- + "github.com/google/go-cmp/cmp"
|
| |
- specs "github.com/opencontainers/runtime-spec/specs-go"
|
| |
- bolt "go.etcd.io/bbolt"
|
| |
- + "gotest.tools/v3/assert"
|
| |
- )
|
| |
-
|
| |
- func init() {
|
| |
- @@ -49,7 +52,7 @@ func TestContainersList(t *testing.T) {
|
| |
- store := NewContainerStore(NewDB(db, nil, nil))
|
| |
-
|
| |
- spec := &specs.Spec{}
|
| |
- - encoded, err := typeurl.MarshalAny(spec)
|
| |
- + encoded, err := protobuf.MarshalAnyToProto(spec)
|
| |
- if err != nil {
|
| |
- t.Fatal(err)
|
| |
- }
|
| |
- @@ -180,13 +183,13 @@ func TestContainersCreateUpdateDelete(t *testing.T) {
|
| |
- store := NewContainerStore(NewDB(db, nil, nil))
|
| |
-
|
| |
- spec := &specs.Spec{}
|
| |
- - encoded, err := typeurl.MarshalAny(spec)
|
| |
- + encoded, err := protobuf.MarshalAnyToProto(spec)
|
| |
- if err != nil {
|
| |
- t.Fatal(err)
|
| |
- }
|
| |
-
|
| |
- spec.Annotations = map[string]string{"updated": "true"}
|
| |
- - encodedUpdated, err := typeurl.MarshalAny(spec)
|
| |
- + encodedUpdated, err := protobuf.MarshalAnyToProto(spec)
|
| |
- if err != nil {
|
| |
- t.Fatal(err)
|
| |
- }
|
| |
- @@ -468,8 +471,8 @@ func TestContainersCreateUpdateDelete(t *testing.T) {
|
| |
- Runtime: containers.RuntimeInfo{
|
| |
- Name: "testruntime",
|
| |
- },
|
| |
- - Extensions: map[string]types.Any{
|
| |
- - "hello": {
|
| |
- + Extensions: map[string]typeurl.Any{
|
| |
- + "hello": &types.Any{
|
| |
- TypeUrl: "test.update.extensions",
|
| |
- Value: []byte("hello"),
|
| |
- },
|
| |
- @@ -480,8 +483,8 @@ func TestContainersCreateUpdateDelete(t *testing.T) {
|
| |
- Runtime: containers.RuntimeInfo{
|
| |
- Name: "testruntime",
|
| |
- },
|
| |
- - Extensions: map[string]types.Any{
|
| |
- - "hello": {
|
| |
- + Extensions: map[string]typeurl.Any{
|
| |
- + "hello": &types.Any{
|
| |
- TypeUrl: "test.update.extensions",
|
| |
- Value: []byte("world"),
|
| |
- },
|
| |
- @@ -492,8 +495,8 @@ func TestContainersCreateUpdateDelete(t *testing.T) {
|
| |
- Runtime: containers.RuntimeInfo{
|
| |
- Name: "testruntime",
|
| |
- },
|
| |
- - Extensions: map[string]types.Any{
|
| |
- - "hello": {
|
| |
- + Extensions: map[string]typeurl.Any{
|
| |
- + "hello": &types.Any{
|
| |
- TypeUrl: "test.update.extensions",
|
| |
- Value: []byte("world"),
|
| |
- },
|
| |
- @@ -507,8 +510,8 @@ func TestContainersCreateUpdateDelete(t *testing.T) {
|
| |
- Runtime: containers.RuntimeInfo{
|
| |
- Name: "testruntime",
|
| |
- },
|
| |
- - Extensions: map[string]types.Any{
|
| |
- - "hello": {
|
| |
- + Extensions: map[string]typeurl.Any{
|
| |
- + "hello": &types.Any{
|
| |
- TypeUrl: "test.update.extensions",
|
| |
- Value: []byte("hello"),
|
| |
- },
|
| |
- @@ -519,8 +522,8 @@ func TestContainersCreateUpdateDelete(t *testing.T) {
|
| |
- Runtime: containers.RuntimeInfo{
|
| |
- Name: "testruntime",
|
| |
- },
|
| |
- - Extensions: map[string]types.Any{
|
| |
- - "hello": {
|
| |
- + Extensions: map[string]typeurl.Any{
|
| |
- + "hello": &types.Any{
|
| |
- TypeUrl: "test.update.extensions",
|
| |
- Value: []byte("world"),
|
| |
- },
|
| |
- @@ -532,8 +535,8 @@ func TestContainersCreateUpdateDelete(t *testing.T) {
|
| |
- Runtime: containers.RuntimeInfo{
|
| |
- Name: "testruntime",
|
| |
- },
|
| |
- - Extensions: map[string]types.Any{
|
| |
- - "hello": {
|
| |
- + Extensions: map[string]typeurl.Any{
|
| |
- + "hello": &types.Any{
|
| |
- TypeUrl: "test.update.extensions",
|
| |
- Value: []byte("hello"),
|
| |
- },
|
| |
- @@ -547,8 +550,8 @@ func TestContainersCreateUpdateDelete(t *testing.T) {
|
| |
- Runtime: containers.RuntimeInfo{
|
| |
- Name: "testruntime",
|
| |
- },
|
| |
- - Extensions: map[string]types.Any{
|
| |
- - "hello": {
|
| |
- + Extensions: map[string]typeurl.Any{
|
| |
- + "hello": &types.Any{
|
| |
- TypeUrl: "test.update.extensions",
|
| |
- Value: []byte("hello"),
|
| |
- },
|
| |
- @@ -558,8 +561,8 @@ func TestContainersCreateUpdateDelete(t *testing.T) {
|
| |
- Labels: map[string]string{
|
| |
- "foo": "one",
|
| |
- },
|
| |
- - Extensions: map[string]types.Any{
|
| |
- - "hello": {
|
| |
- + Extensions: map[string]typeurl.Any{
|
| |
- + "hello": &types.Any{
|
| |
- TypeUrl: "test.update.extensions",
|
| |
- Value: []byte("world"),
|
| |
- },
|
| |
- @@ -571,8 +574,8 @@ func TestContainersCreateUpdateDelete(t *testing.T) {
|
| |
- Runtime: containers.RuntimeInfo{
|
| |
- Name: "testruntime",
|
| |
- },
|
| |
- - Extensions: map[string]types.Any{
|
| |
- - "hello": {
|
| |
- + Extensions: map[string]typeurl.Any{
|
| |
- + "hello": &types.Any{
|
| |
- TypeUrl: "test.update.extensions",
|
| |
- Value: []byte("world"),
|
| |
- },
|
| |
- @@ -586,21 +589,21 @@ func TestContainersCreateUpdateDelete(t *testing.T) {
|
| |
- Runtime: containers.RuntimeInfo{
|
| |
- Name: "testruntime",
|
| |
- },
|
| |
- - Extensions: map[string]types.Any{
|
| |
- + Extensions: map[string]typeurl.Any{
|
| |
- // leaves hello in place.
|
| |
- - "hello": {
|
| |
- + "hello": &types.Any{
|
| |
- TypeUrl: "test.update.extensions",
|
| |
- Value: []byte("hello"),
|
| |
- },
|
| |
- },
|
| |
- },
|
| |
- input: containers.Container{
|
| |
- - Extensions: map[string]types.Any{
|
| |
- - "hello": {
|
| |
- + Extensions: map[string]typeurl.Any{
|
| |
- + "hello": &types.Any{
|
| |
- TypeUrl: "test.update.extensions",
|
| |
- Value: []byte("universe"), // this will be ignored
|
| |
- },
|
| |
- - "bar": {
|
| |
- + "bar": &types.Any{
|
| |
- TypeUrl: "test.update.extensions",
|
| |
- Value: []byte("foo"), // this will be added
|
| |
- },
|
| |
- @@ -612,12 +615,12 @@ func TestContainersCreateUpdateDelete(t *testing.T) {
|
| |
- Runtime: containers.RuntimeInfo{
|
| |
- Name: "testruntime",
|
| |
- },
|
| |
- - Extensions: map[string]types.Any{
|
| |
- - "hello": {
|
| |
- + Extensions: map[string]typeurl.Any{
|
| |
- + "hello": &types.Any{
|
| |
- TypeUrl: "test.update.extensions",
|
| |
- Value: []byte("hello"), // remains as world
|
| |
- },
|
| |
- - "bar": {
|
| |
- + "bar": &types.Any{
|
| |
- TypeUrl: "test.update.extensions",
|
| |
- Value: []byte("foo"), // this will be added
|
| |
- },
|
| |
- @@ -703,10 +706,26 @@ func checkContainerTimestamps(t *testing.T, c *containers.Container, now time.Ti
|
| |
- }
|
| |
- }
|
| |
-
|
| |
- -func checkContainersEqual(t *testing.T, a, b *containers.Container, format string, args ...interface{}) {
|
| |
- - if !reflect.DeepEqual(a, b) {
|
| |
- - t.Fatalf("containers not equal \n\t%v != \n\t%v: "+format, append([]interface{}{a, b}, args...)...)
|
| |
- +// isNil returns true if the given parameter is nil or typed nil.
|
| |
- +func isNil(x interface{}) bool {
|
| |
- + if x == nil {
|
| |
- + return true
|
| |
- }
|
| |
- + v := reflect.ValueOf(x)
|
| |
- + return v.Kind() == reflect.Ptr && v.IsNil()
|
| |
- +}
|
| |
- +
|
| |
- +func checkContainersEqual(t *testing.T, a, b *containers.Container, format string, args ...interface{}) {
|
| |
- + // Ignore the difference of nil and typed nil.
|
| |
- + opt := cmp.FilterValues(
|
| |
- + func(x, y interface{}) bool {
|
| |
- + return isNil(x) && isNil(y)
|
| |
- + },
|
| |
- + cmp.Comparer(func(_, _ interface{}) bool {
|
| |
- + return true
|
| |
- + }),
|
| |
- + )
|
| |
- + assert.DeepEqual(t, a, b, opt)
|
| |
- }
|
| |
-
|
| |
- func testEnv(t *testing.T) (context.Context, *bolt.DB, func()) {
|
| |
- diff --git a/metrics/cgroups/metrics_test.go b/metrics/cgroups/metrics_test.go
|
| |
- index c71ea60a5..c362ea3b9 100644
|
| |
- --- a/metrics/cgroups/metrics_test.go
|
| |
- +++ b/metrics/cgroups/metrics_test.go
|
| |
- @@ -32,7 +32,7 @@ import (
|
| |
- v2 "github.com/containerd/containerd/metrics/cgroups/v2"
|
| |
- v1types "github.com/containerd/containerd/metrics/types/v1"
|
| |
- v2types "github.com/containerd/containerd/metrics/types/v2"
|
| |
- - "github.com/containerd/typeurl"
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- "github.com/prometheus/client_golang/prometheus"
|
| |
-
|
| |
- metrics "github.com/docker/go-metrics"
|
| |
- @@ -152,7 +152,7 @@ func (t *mockStatT) Namespace() string {
|
| |
-
|
| |
- func (t *mockStatT) Stats(context.Context) (*types.Any, error) {
|
| |
- if t.isV1 {
|
| |
- - return typeurl.MarshalAny(&v1types.Metrics{})
|
| |
- + return protobuf.MarshalAnyToProto(&v1types.Metrics{})
|
| |
- }
|
| |
- - return typeurl.MarshalAny(&v2types.Metrics{})
|
| |
- + return protobuf.MarshalAnyToProto(&v2types.Metrics{})
|
| |
- }
|
| |
- diff --git a/pkg/cri/server/events.go b/pkg/cri/server/events.go
|
| |
- index c8ffdadbf..fbecb29a0 100644
|
| |
- --- a/pkg/cri/server/events.go
|
| |
- +++ b/pkg/cri/server/events.go
|
| |
- @@ -32,7 +32,6 @@ import (
|
| |
- sandboxstore "github.com/containerd/containerd/pkg/cri/store/sandbox"
|
| |
- ctrdutil "github.com/containerd/containerd/pkg/cri/util"
|
| |
- "github.com/containerd/typeurl"
|
| |
- - gogotypes "github.com/gogo/protobuf/types"
|
| |
- "github.com/sirupsen/logrus"
|
| |
- "golang.org/x/net/context"
|
| |
- "k8s.io/utils/clock"
|
| |
- @@ -207,7 +206,7 @@ func (em *eventMonitor) startContainerExitMonitor(ctx context.Context, id string
|
| |
- return stopCh
|
| |
- }
|
| |
-
|
| |
- -func convertEvent(e *gogotypes.Any) (string, interface{}, error) {
|
| |
- +func convertEvent(e typeurl.Any) (string, interface{}, error) {
|
| |
- id := ""
|
| |
- evt, err := typeurl.UnmarshalAny(e)
|
| |
- if err != nil {
|
| |
- diff --git a/pkg/cri/server/helpers.go b/pkg/cri/server/helpers.go
|
| |
- index a8498116d..2b9c115e7 100644
|
| |
- --- a/pkg/cri/server/helpers.go
|
| |
- +++ b/pkg/cri/server/helpers.go
|
| |
- @@ -375,10 +375,11 @@ func getRuntimeOptionsType(t string) interface{} {
|
| |
-
|
| |
- // getRuntimeOptions get runtime options from container metadata.
|
| |
- func getRuntimeOptions(c containers.Container) (interface{}, error) {
|
| |
- - if c.Runtime.Options == nil {
|
| |
- + from := c.Runtime.Options
|
| |
- + if from == nil || from.GetValue() == nil {
|
| |
- return nil, nil
|
| |
- }
|
| |
- - opts, err := typeurl.UnmarshalAny(c.Runtime.Options)
|
| |
- + opts, err := typeurl.UnmarshalAny(from)
|
| |
- if err != nil {
|
| |
- return nil, err
|
| |
- }
|
| |
- diff --git a/pkg/cri/server/helpers_test.go b/pkg/cri/server/helpers_test.go
|
| |
- index c0c1c6e75..f22c05b56 100644
|
| |
- --- a/pkg/cri/server/helpers_test.go
|
| |
- +++ b/pkg/cri/server/helpers_test.go
|
| |
- @@ -23,6 +23,7 @@ import (
|
| |
- "testing"
|
| |
- "time"
|
| |
-
|
| |
- + "github.com/containerd/containerd/containers"
|
| |
- "github.com/containerd/containerd/errdefs"
|
| |
- "github.com/containerd/containerd/oci"
|
| |
- criconfig "github.com/containerd/containerd/pkg/cri/config"
|
| |
- @@ -32,6 +33,8 @@ import (
|
| |
- "github.com/containerd/containerd/reference/docker"
|
| |
- "github.com/containerd/containerd/runtime/linux/runctypes"
|
| |
- runcoptions "github.com/containerd/containerd/runtime/v2/runc/options"
|
| |
- + "github.com/containerd/typeurl"
|
| |
- + "github.com/gogo/protobuf/types"
|
| |
-
|
| |
- imagedigest "github.com/opencontainers/go-digest"
|
| |
- runtimespec "github.com/opencontainers/runtime-spec/specs-go"
|
| |
- @@ -602,3 +605,13 @@ func TestValidateTargetContainer(t *testing.T) {
|
| |
- }
|
| |
-
|
| |
- }
|
| |
- +
|
| |
- +func TestGetRuntimeOptions(t *testing.T) {
|
| |
- + _, err := getRuntimeOptions(containers.Container{})
|
| |
- + require.NoError(t, err)
|
| |
- +
|
| |
- + var pbany *types.Any // This is nil.
|
| |
- + var typeurlAny typeurl.Any = pbany // This is typed nil.
|
| |
- + _, err = getRuntimeOptions(containers.Container{Runtime: containers.RuntimeInfo{Options: typeurlAny}})
|
| |
- + require.NoError(t, err)
|
| |
- +}
|
| |
- diff --git a/pkg/cri/server/restart.go b/pkg/cri/server/restart.go
|
| |
- index f5f3e5083..f7db3f7b3 100644
|
| |
- --- a/pkg/cri/server/restart.go
|
| |
- +++ b/pkg/cri/server/restart.go
|
| |
- @@ -166,7 +166,7 @@ func (c *criService) loadContainer(ctx context.Context, cntr containerd.Containe
|
| |
- if !ok {
|
| |
- return container, fmt.Errorf("metadata extension %q not found", containerMetadataExtension)
|
| |
- }
|
| |
- - data, err := typeurl.UnmarshalAny(&ext)
|
| |
- + data, err := typeurl.UnmarshalAny(ext)
|
| |
- if err != nil {
|
| |
- return container, fmt.Errorf("failed to unmarshal metadata extension %q: %w", ext, err)
|
| |
- }
|
| |
- @@ -335,7 +335,7 @@ func (c *criService) loadSandbox(ctx context.Context, cntr containerd.Container)
|
| |
- if !ok {
|
| |
- return sandbox, fmt.Errorf("metadata extension %q not found", sandboxMetadataExtension)
|
| |
- }
|
| |
- - data, err := typeurl.UnmarshalAny(&ext)
|
| |
- + data, err := typeurl.UnmarshalAny(ext)
|
| |
- if err != nil {
|
| |
- return sandbox, fmt.Errorf("failed to unmarshal metadata extension %q: %w", ext, err)
|
| |
- }
|
| |
- diff --git a/protobuf/any.go b/protobuf/any.go
|
| |
- new file mode 100644
|
| |
- index 000000000..0f6671765
|
| |
- --- /dev/null
|
| |
- +++ b/protobuf/any.go
|
| |
- @@ -0,0 +1,47 @@
|
| |
- +/*
|
| |
- + Copyright The containerd Authors.
|
| |
- +
|
| |
- + Licensed under the Apache License, Version 2.0 (the "License");
|
| |
- + you may not use this file except in compliance with the License.
|
| |
- + You may obtain a copy of the License at
|
| |
- +
|
| |
- + http://www.apache.org/licenses/LICENSE-2.0
|
| |
- +
|
| |
- + Unless required by applicable law or agreed to in writing, software
|
| |
- + distributed under the License is distributed on an "AS IS" BASIS,
|
| |
- + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| |
- + See the License for the specific language governing permissions and
|
| |
- + limitations under the License.
|
| |
- +*/
|
| |
- +
|
| |
- +package protobuf
|
| |
- +
|
| |
- +import (
|
| |
- + "github.com/containerd/typeurl"
|
| |
- + "github.com/gogo/protobuf/types"
|
| |
- +)
|
| |
- +
|
| |
- +// FromAny converts typeurl.Any to github.com/gogo/protobuf/types.Any.
|
| |
- +func FromAny(from typeurl.Any) *types.Any {
|
| |
- + if from == nil {
|
| |
- + return nil
|
| |
- + }
|
| |
- +
|
| |
- + if pbany, ok := from.(*types.Any); ok {
|
| |
- + return pbany
|
| |
- + }
|
| |
- +
|
| |
- + return &types.Any{
|
| |
- + TypeUrl: from.GetTypeUrl(),
|
| |
- + Value: from.GetValue(),
|
| |
- + }
|
| |
- +}
|
| |
- +
|
| |
- +// FromAny converts an arbitrary interface to github.com/gogo/protobuf/types.Any.
|
| |
- +func MarshalAnyToProto(from interface{}) (*types.Any, error) {
|
| |
- + any, err := typeurl.MarshalAny(from)
|
| |
- + if err != nil {
|
| |
- + return nil, err
|
| |
- + }
|
| |
- + return FromAny(any), nil
|
| |
- +}
|
| |
- diff --git a/protobuf/any_test.go b/protobuf/any_test.go
|
| |
- new file mode 100644
|
| |
- index 000000000..7a74ec16c
|
| |
- --- /dev/null
|
| |
- +++ b/protobuf/any_test.go
|
| |
- @@ -0,0 +1,26 @@
|
| |
- +/*
|
| |
- + Copyright The containerd Authors.
|
| |
- +
|
| |
- + Licensed under the Apache License, Version 2.0 (the "License");
|
| |
- + you may not use this file except in compliance with the License.
|
| |
- + You may obtain a copy of the License at
|
| |
- +
|
| |
- + http://www.apache.org/licenses/LICENSE-2.0
|
| |
- +
|
| |
- + Unless required by applicable law or agreed to in writing, software
|
| |
- + distributed under the License is distributed on an "AS IS" BASIS,
|
| |
- + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| |
- + See the License for the specific language governing permissions and
|
| |
- + limitations under the License.
|
| |
- +*/
|
| |
- +
|
| |
- +package protobuf
|
| |
- +
|
| |
- +import "testing"
|
| |
- +
|
| |
- +func TestFromAny(t *testing.T) {
|
| |
- + actual := FromAny(nil)
|
| |
- + if actual != nil {
|
| |
- + t.Fatalf("expected nil, got %v", actual)
|
| |
- + }
|
| |
- +}
|
| |
- diff --git a/runtime/runtime.go b/runtime/runtime.go
|
| |
- index 84aaa8ac6..1ca22ee2b 100644
|
| |
- --- a/runtime/runtime.go
|
| |
- +++ b/runtime/runtime.go
|
| |
- @@ -21,7 +21,7 @@ import (
|
| |
- "time"
|
| |
-
|
| |
- "github.com/containerd/containerd/mount"
|
| |
- - "github.com/gogo/protobuf/types"
|
| |
- + "github.com/containerd/typeurl"
|
| |
- )
|
| |
-
|
| |
- // IO holds process IO information
|
| |
- @@ -35,7 +35,7 @@ type IO struct {
|
| |
- // CreateOpts contains task creation data
|
| |
- type CreateOpts struct {
|
| |
- // Spec is the OCI runtime spec
|
| |
- - Spec *types.Any
|
| |
- + Spec typeurl.Any
|
| |
- // Rootfs mounts to perform to gain access to the container's filesystem
|
| |
- Rootfs []mount.Mount
|
| |
- // IO for the container's main process
|
| |
- @@ -43,9 +43,9 @@ type CreateOpts struct {
|
| |
- // Checkpoint digest to restore container state
|
| |
- Checkpoint string
|
| |
- // RuntimeOptions for the runtime
|
| |
- - RuntimeOptions *types.Any
|
| |
- + RuntimeOptions typeurl.Any
|
| |
- // TaskOptions received for the task
|
| |
- - TaskOptions *types.Any
|
| |
- + TaskOptions typeurl.Any
|
| |
- // Runtime name to use (e.g. `io.containerd.NAME.VERSION`).
|
| |
- // As an alternative full abs path to binary may be specified instead.
|
| |
- Runtime string
|
| |
- diff --git a/runtime/v1/linux/runtime.go b/runtime/v1/linux/runtime.go
|
| |
- index b6d53820a..ad7a0b67e 100644
|
| |
- --- a/runtime/v1/linux/runtime.go
|
| |
- +++ b/runtime/v1/linux/runtime.go
|
| |
- @@ -41,6 +41,7 @@ import (
|
| |
- "github.com/containerd/containerd/pkg/process"
|
| |
- "github.com/containerd/containerd/platforms"
|
| |
- "github.com/containerd/containerd/plugin"
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- "github.com/containerd/containerd/runtime"
|
| |
- "github.com/containerd/containerd/runtime/linux/runctypes"
|
| |
- v1 "github.com/containerd/containerd/runtime/v1"
|
| |
- @@ -178,7 +179,7 @@ func (r *Runtime) Create(ctx context.Context, id string, opts runtime.CreateOpts
|
| |
- bundle, err := newBundle(id,
|
| |
- filepath.Join(r.state, namespace),
|
| |
- filepath.Join(r.root, namespace),
|
| |
- - opts.Spec.Value)
|
| |
- + opts.Spec.GetValue())
|
| |
- if err != nil {
|
| |
- return nil, err
|
| |
- }
|
| |
- @@ -191,7 +192,7 @@ func (r *Runtime) Create(ctx context.Context, id string, opts runtime.CreateOpts
|
| |
- shimopt := ShimLocal(r.config, r.events)
|
| |
- if !r.config.NoShim {
|
| |
- var cgroup string
|
| |
- - if opts.TaskOptions != nil {
|
| |
- + if opts.TaskOptions != nil && opts.TaskOptions.GetValue() != nil {
|
| |
- v, err := typeurl.UnmarshalAny(opts.TaskOptions)
|
| |
- if err != nil {
|
| |
- return nil, err
|
| |
- @@ -244,7 +245,7 @@ func (r *Runtime) Create(ctx context.Context, id string, opts runtime.CreateOpts
|
| |
- Stderr: opts.IO.Stderr,
|
| |
- Terminal: opts.IO.Terminal,
|
| |
- Checkpoint: opts.Checkpoint,
|
| |
- - Options: opts.TaskOptions,
|
| |
- + Options: protobuf.FromAny(opts.TaskOptions),
|
| |
- }
|
| |
- for _, m := range opts.Rootfs {
|
| |
- sopts.Rootfs = append(sopts.Rootfs, &types.Mount{
|
| |
- @@ -537,7 +538,7 @@ func (r *Runtime) getRuncOptions(ctx context.Context, id string) (*runctypes.Run
|
| |
- return nil, err
|
| |
- }
|
| |
-
|
| |
- - if container.Runtime.Options != nil {
|
| |
- + if container.Runtime.Options != nil && container.Runtime.Options.GetValue() != nil {
|
| |
- v, err := typeurl.UnmarshalAny(container.Runtime.Options)
|
| |
- if err != nil {
|
| |
- return nil, err
|
| |
- diff --git a/runtime/v1/linux/task.go b/runtime/v1/linux/task.go
|
| |
- index 3ac7839ff..44c89e5c2 100644
|
| |
- --- a/runtime/v1/linux/task.go
|
| |
- +++ b/runtime/v1/linux/task.go
|
| |
- @@ -32,11 +32,11 @@ import (
|
| |
- "github.com/containerd/containerd/events/exchange"
|
| |
- "github.com/containerd/containerd/identifiers"
|
| |
- "github.com/containerd/containerd/log"
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- "github.com/containerd/containerd/runtime"
|
| |
- "github.com/containerd/containerd/runtime/v1/shim/client"
|
| |
- "github.com/containerd/containerd/runtime/v1/shim/v1"
|
| |
- "github.com/containerd/ttrpc"
|
| |
- - "github.com/containerd/typeurl"
|
| |
- "github.com/gogo/protobuf/types"
|
| |
- )
|
| |
-
|
| |
- @@ -340,7 +340,7 @@ func (t *Task) Stats(ctx context.Context) (*types.Any, error) {
|
| |
- if err != nil {
|
| |
- return nil, err
|
| |
- }
|
| |
- - return typeurl.MarshalAny(stats)
|
| |
- + return protobuf.MarshalAnyToProto(stats)
|
| |
- }
|
| |
-
|
| |
- // Cgroup returns the underlying cgroup for a linux task
|
| |
- diff --git a/runtime/v1/shim/service.go b/runtime/v1/shim/service.go
|
| |
- index a08757d0a..926134821 100644
|
| |
- --- a/runtime/v1/shim/service.go
|
| |
- +++ b/runtime/v1/shim/service.go
|
| |
- @@ -37,6 +37,7 @@ import (
|
| |
- "github.com/containerd/containerd/namespaces"
|
| |
- "github.com/containerd/containerd/pkg/process"
|
| |
- "github.com/containerd/containerd/pkg/stdio"
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- "github.com/containerd/containerd/runtime"
|
| |
- "github.com/containerd/containerd/runtime/linux/runctypes"
|
| |
- shimapi "github.com/containerd/containerd/runtime/v1/shim/v1"
|
| |
- @@ -412,7 +413,7 @@ func (s *Service) ListPids(ctx context.Context, r *shimapi.ListPidsRequest) (*sh
|
| |
- if err != nil {
|
| |
- return nil, fmt.Errorf("failed to marshal process %d info: %w", pid, err)
|
| |
- }
|
| |
- - pInfo.Info = a
|
| |
- + pInfo.Info = protobuf.FromAny(a)
|
| |
- break
|
| |
- }
|
| |
- }
|
| |
- diff --git a/runtime/v2/manager.go b/runtime/v2/manager.go
|
| |
- index 1927cbb3f..505d5d896 100644
|
| |
- --- a/runtime/v2/manager.go
|
| |
- +++ b/runtime/v2/manager.go
|
| |
- @@ -33,6 +33,7 @@ import (
|
| |
- "github.com/containerd/containerd/pkg/timeout"
|
| |
- "github.com/containerd/containerd/platforms"
|
| |
- "github.com/containerd/containerd/plugin"
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- "github.com/containerd/containerd/runtime"
|
| |
- shimbinary "github.com/containerd/containerd/runtime/v2/shim"
|
| |
- "github.com/containerd/containerd/runtime/v2/task"
|
| |
- @@ -156,7 +157,7 @@ func (m *ShimManager) ID() string {
|
| |
-
|
| |
- // Start launches a new shim instance
|
| |
- func (m *ShimManager) Start(ctx context.Context, id string, opts runtime.CreateOpts) (_ ShimProcess, retErr error) {
|
| |
- - bundle, err := NewBundle(ctx, m.root, m.state, id, opts.Spec.Value)
|
| |
- + bundle, err := NewBundle(ctx, m.root, m.state, id, opts.Spec.GetValue())
|
| |
- if err != nil {
|
| |
- return nil, err
|
| |
- }
|
| |
- @@ -197,7 +198,7 @@ func (m *ShimManager) startShim(ctx context.Context, bundle *Bundle, id string,
|
| |
- }
|
| |
-
|
| |
- topts := opts.TaskOptions
|
| |
- - if topts == nil {
|
| |
- + if topts == nil || topts.GetValue() == nil {
|
| |
- topts = opts.RuntimeOptions
|
| |
- }
|
| |
-
|
| |
- @@ -212,7 +213,7 @@ func (m *ShimManager) startShim(ctx context.Context, bundle *Bundle, id string,
|
| |
- ttrpcAddress: m.containerdTTRPCAddress,
|
| |
- schedCore: m.schedCore,
|
| |
- })
|
| |
- - shim, err := b.Start(ctx, topts, func() {
|
| |
- + shim, err := b.Start(ctx, protobuf.FromAny(topts), func() {
|
| |
- log.G(ctx).WithField("id", id).Info("shim disconnected")
|
| |
-
|
| |
- cleanupAfterDeadShim(context.Background(), id, ns, m.shims, m.events, b)
|
| |
- diff --git a/runtime/v2/runc/container.go b/runtime/v2/runc/container.go
|
| |
- index 4da91d691..3683868e0 100644
|
| |
- --- a/runtime/v2/runc/container.go
|
| |
- +++ b/runtime/v2/runc/container.go
|
| |
- @@ -49,12 +49,14 @@ func NewContainer(ctx context.Context, platform stdio.Platform, r *task.CreateTa
|
| |
- }
|
| |
-
|
| |
- var opts options.Options
|
| |
- - if r.Options != nil && r.Options.GetTypeUrl() != "" {
|
| |
- + if r.Options.GetValue() != nil {
|
| |
- v, err := typeurl.UnmarshalAny(r.Options)
|
| |
- if err != nil {
|
| |
- return nil, err
|
| |
- }
|
| |
- - opts = *v.(*options.Options)
|
| |
- + if v != nil {
|
| |
- + opts = *v.(*options.Options)
|
| |
- + }
|
| |
- }
|
| |
-
|
| |
- var mounts []process.Mount
|
| |
- diff --git a/runtime/v2/runc/task/service.go b/runtime/v2/runc/task/service.go
|
| |
- index 4ad70dad3..1d6ff1714 100644
|
| |
- --- a/runtime/v2/runc/task/service.go
|
| |
- +++ b/runtime/v2/runc/task/service.go
|
| |
- @@ -38,6 +38,7 @@ import (
|
| |
- "github.com/containerd/containerd/pkg/shutdown"
|
| |
- "github.com/containerd/containerd/pkg/stdio"
|
| |
- "github.com/containerd/containerd/pkg/userns"
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- "github.com/containerd/containerd/runtime/v2/runc"
|
| |
- "github.com/containerd/containerd/runtime/v2/runc/options"
|
| |
- "github.com/containerd/containerd/runtime/v2/shim"
|
| |
- @@ -375,7 +376,7 @@ func (s *service) Pids(ctx context.Context, r *taskAPI.PidsRequest) (*taskAPI.Pi
|
| |
- d := &options.ProcessDetails{
|
| |
- ExecID: p.ID(),
|
| |
- }
|
| |
- - a, err := typeurl.MarshalAny(d)
|
| |
- + a, err := protobuf.MarshalAnyToProto(d)
|
| |
- if err != nil {
|
| |
- return nil, fmt.Errorf("failed to marshal process %d info: %w", pid, err)
|
| |
- }
|
| |
- @@ -503,7 +504,7 @@ func (s *service) Stats(ctx context.Context, r *taskAPI.StatsRequest) (*taskAPI.
|
| |
- return nil, err
|
| |
- }
|
| |
- return &taskAPI.StatsResponse{
|
| |
- - Stats: data,
|
| |
- + Stats: protobuf.FromAny(data),
|
| |
- }, nil
|
| |
- }
|
| |
-
|
| |
- diff --git a/runtime/v2/runc/v1/service.go b/runtime/v2/runc/v1/service.go
|
| |
- index 8c473430e..8fdac3f8a 100644
|
| |
- --- a/runtime/v2/runc/v1/service.go
|
| |
- +++ b/runtime/v2/runc/v1/service.go
|
| |
- @@ -41,6 +41,7 @@ import (
|
| |
- "github.com/containerd/containerd/pkg/process"
|
| |
- "github.com/containerd/containerd/pkg/schedcore"
|
| |
- "github.com/containerd/containerd/pkg/stdio"
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- "github.com/containerd/containerd/runtime/v2/runc"
|
| |
- "github.com/containerd/containerd/runtime/v2/runc/options"
|
| |
- "github.com/containerd/containerd/runtime/v2/shim"
|
| |
- @@ -507,7 +508,7 @@ func (s *service) Pids(ctx context.Context, r *taskAPI.PidsRequest) (*taskAPI.Pi
|
| |
- d := &options.ProcessDetails{
|
| |
- ExecID: p.ID(),
|
| |
- }
|
| |
- - a, err := typeurl.MarshalAny(d)
|
| |
- + a, err := protobuf.MarshalAnyToProto(d)
|
| |
- if err != nil {
|
| |
- return nil, fmt.Errorf("failed to marshal process %d info: %w", pid, err)
|
| |
- }
|
| |
- @@ -621,7 +622,7 @@ func (s *service) Stats(ctx context.Context, r *taskAPI.StatsRequest) (*taskAPI.
|
| |
- return nil, err
|
| |
- }
|
| |
- return &taskAPI.StatsResponse{
|
| |
- - Stats: data,
|
| |
- + Stats: protobuf.FromAny(data),
|
| |
- }, nil
|
| |
- }
|
| |
-
|
| |
- diff --git a/runtime/v2/shim.go b/runtime/v2/shim.go
|
| |
- index 456ffb440..18cc9a0ed 100644
|
| |
- --- a/runtime/v2/shim.go
|
| |
- +++ b/runtime/v2/shim.go
|
| |
- @@ -34,6 +34,7 @@ import (
|
| |
- "github.com/containerd/containerd/log"
|
| |
- "github.com/containerd/containerd/namespaces"
|
| |
- "github.com/containerd/containerd/pkg/timeout"
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- "github.com/containerd/containerd/runtime"
|
| |
- client "github.com/containerd/containerd/runtime/v2/shim"
|
| |
- "github.com/containerd/containerd/runtime/v2/task"
|
| |
- @@ -324,7 +325,7 @@ func (s *shimTask) delete(ctx context.Context, removeTask func(ctx context.Conte
|
| |
-
|
| |
- func (s *shimTask) Create(ctx context.Context, opts runtime.CreateOpts) (runtime.Task, error) {
|
| |
- topts := opts.TaskOptions
|
| |
- - if topts == nil {
|
| |
- + if topts == nil || topts.GetValue() == nil {
|
| |
- topts = opts.RuntimeOptions
|
| |
- }
|
| |
- request := &task.CreateTaskRequest{
|
| |
- @@ -335,7 +336,7 @@ func (s *shimTask) Create(ctx context.Context, opts runtime.CreateOpts) (runtime
|
| |
- Stderr: opts.IO.Stderr,
|
| |
- Terminal: opts.IO.Terminal,
|
| |
- Checkpoint: opts.Checkpoint,
|
| |
- - Options: topts,
|
| |
- + Options: protobuf.FromAny(topts),
|
| |
- }
|
| |
- for _, m := range opts.Rootfs {
|
| |
- request.Rootfs = append(request.Rootfs, &types.Mount{
|
| |
- diff --git a/runtime/v2/shim/publisher.go b/runtime/v2/shim/publisher.go
|
| |
- index ed1ebdd58..20856f115 100644
|
| |
- --- a/runtime/v2/shim/publisher.go
|
| |
- +++ b/runtime/v2/shim/publisher.go
|
| |
- @@ -25,8 +25,8 @@ import (
|
| |
- "github.com/containerd/containerd/events"
|
| |
- "github.com/containerd/containerd/namespaces"
|
| |
- "github.com/containerd/containerd/pkg/ttrpcutil"
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- "github.com/containerd/ttrpc"
|
| |
- - "github.com/containerd/typeurl"
|
| |
- "github.com/sirupsen/logrus"
|
| |
- )
|
| |
-
|
| |
- @@ -110,7 +110,7 @@ func (l *RemoteEventsPublisher) Publish(ctx context.Context, topic string, event
|
| |
- if err != nil {
|
| |
- return err
|
| |
- }
|
| |
- - any, err := typeurl.MarshalAny(event)
|
| |
- + any, err := protobuf.MarshalAnyToProto(event)
|
| |
- if err != nil {
|
| |
- return err
|
| |
- }
|
| |
- diff --git a/services/containers/helpers.go b/services/containers/helpers.go
|
| |
- index dde4caed1..0c5b76fea 100644
|
| |
- --- a/services/containers/helpers.go
|
| |
- +++ b/services/containers/helpers.go
|
| |
- @@ -19,6 +19,9 @@ package containers
|
| |
- import (
|
| |
- api "github.com/containerd/containerd/api/services/containers/v1"
|
| |
- "github.com/containerd/containerd/containers"
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- + "github.com/containerd/typeurl"
|
| |
- + "github.com/gogo/protobuf/types"
|
| |
- )
|
| |
-
|
| |
- func containersToProto(containers []containers.Container) []api.Container {
|
| |
- @@ -32,20 +35,24 @@ func containersToProto(containers []containers.Container) []api.Container {
|
| |
- }
|
| |
-
|
| |
- func containerToProto(container *containers.Container) api.Container {
|
| |
- + extensions := make(map[string]types.Any)
|
| |
- + for k, v := range container.Extensions {
|
| |
- + extensions[k] = *protobuf.FromAny(v)
|
| |
- + }
|
| |
- return api.Container{
|
| |
- ID: container.ID,
|
| |
- Labels: container.Labels,
|
| |
- Image: container.Image,
|
| |
- Runtime: &api.Container_Runtime{
|
| |
- Name: container.Runtime.Name,
|
| |
- - Options: container.Runtime.Options,
|
| |
- + Options: protobuf.FromAny(container.Runtime.Options),
|
| |
- },
|
| |
- - Spec: container.Spec,
|
| |
- + Spec: protobuf.FromAny(container.Spec),
|
| |
- Snapshotter: container.Snapshotter,
|
| |
- SnapshotKey: container.SnapshotKey,
|
| |
- CreatedAt: container.CreatedAt,
|
| |
- UpdatedAt: container.UpdatedAt,
|
| |
- - Extensions: container.Extensions,
|
| |
- + Extensions: extensions,
|
| |
- }
|
| |
- }
|
| |
-
|
| |
- @@ -57,6 +64,11 @@ func containerFromProto(containerpb *api.Container) containers.Container {
|
| |
- Options: containerpb.Runtime.Options,
|
| |
- }
|
| |
- }
|
| |
- + extensions := make(map[string]typeurl.Any)
|
| |
- + for k, v := range containerpb.Extensions {
|
| |
- + v := v
|
| |
- + extensions[k] = &v
|
| |
- + }
|
| |
- return containers.Container{
|
| |
- ID: containerpb.ID,
|
| |
- Labels: containerpb.Labels,
|
| |
- @@ -65,6 +77,6 @@ func containerFromProto(containerpb *api.Container) containers.Container {
|
| |
- Spec: containerpb.Spec,
|
| |
- Snapshotter: containerpb.Snapshotter,
|
| |
- SnapshotKey: containerpb.SnapshotKey,
|
| |
- - Extensions: containerpb.Extensions,
|
| |
- + Extensions: extensions,
|
| |
- }
|
| |
- }
|
| |
- diff --git a/services/events/service.go b/services/events/service.go
|
| |
- index 3b5f81138..b1992a1ab 100644
|
| |
- --- a/services/events/service.go
|
| |
- +++ b/services/events/service.go
|
| |
- @@ -26,6 +26,7 @@ import (
|
| |
- "github.com/containerd/containerd/events"
|
| |
- "github.com/containerd/containerd/events/exchange"
|
| |
- "github.com/containerd/containerd/plugin"
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- "github.com/containerd/ttrpc"
|
| |
- ptypes "github.com/gogo/protobuf/types"
|
| |
- "google.golang.org/grpc"
|
| |
- @@ -115,7 +116,7 @@ func toProto(env *events.Envelope) *api.Envelope {
|
| |
- Timestamp: env.Timestamp,
|
| |
- Namespace: env.Namespace,
|
| |
- Topic: env.Topic,
|
| |
- - Event: env.Event,
|
| |
- + Event: protobuf.FromAny(env.Event),
|
| |
- }
|
| |
- }
|
| |
-
|
| |
- diff --git a/services/tasks/local.go b/services/tasks/local.go
|
| |
- index 96ed36ca4..34cb23d16 100644
|
| |
- --- a/services/tasks/local.go
|
| |
- +++ b/services/tasks/local.go
|
| |
- @@ -41,6 +41,7 @@ import (
|
| |
- "github.com/containerd/containerd/mount"
|
| |
- "github.com/containerd/containerd/pkg/timeout"
|
| |
- "github.com/containerd/containerd/plugin"
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- "github.com/containerd/containerd/runtime"
|
| |
- "github.com/containerd/containerd/runtime/linux/runctypes"
|
| |
- "github.com/containerd/containerd/runtime/v2/runc/options"
|
| |
- @@ -461,7 +462,7 @@ func (l *local) ListPids(ctx context.Context, r *api.ListPidsRequest, _ ...grpc.
|
| |
- Pid: p.Pid,
|
| |
- }
|
| |
- if p.Info != nil {
|
| |
- - a, err := typeurl.MarshalAny(p.Info)
|
| |
- + a, err := protobuf.MarshalAnyToProto(p.Info)
|
| |
- if err != nil {
|
| |
- return nil, fmt.Errorf("failed to marshal process %d info: %w", p.Pid, err)
|
| |
- }
|
| |
- @@ -576,7 +577,7 @@ func (l *local) Checkpoint(ctx context.Context, r *api.CheckpointTaskRequest, _
|
| |
- return nil, err
|
| |
- }
|
| |
- // write the config to the content store
|
| |
- - data, err := container.Spec.Marshal()
|
| |
- + data, err := protobuf.FromAny(container.Spec).Marshal()
|
| |
- if err != nil {
|
| |
- return nil, err
|
| |
- }
|
| |
- diff --git a/task.go b/task.go
|
| |
- index 692d92c1d..7d8d477ab 100644
|
| |
- --- a/task.go
|
| |
- +++ b/task.go
|
| |
- @@ -38,6 +38,7 @@ import (
|
| |
- "github.com/containerd/containerd/mount"
|
| |
- "github.com/containerd/containerd/oci"
|
| |
- "github.com/containerd/containerd/plugin"
|
| |
- + "github.com/containerd/containerd/protobuf"
|
| |
- "github.com/containerd/containerd/rootfs"
|
| |
- "github.com/containerd/containerd/runtime/linux/runctypes"
|
| |
- "github.com/containerd/containerd/runtime/v2/runc/options"
|
| |
- @@ -346,7 +347,7 @@ func (t *task) Exec(ctx context.Context, id string, spec *specs.Process, ioCreat
|
| |
- i.Close()
|
| |
- }
|
| |
- }()
|
| |
- - any, err := typeurl.MarshalAny(spec)
|
| |
- + any, err := protobuf.MarshalAnyToProto(spec)
|
| |
- if err != nil {
|
| |
- return nil, err
|
| |
- }
|
| |
- @@ -446,7 +447,7 @@ func (t *task) Checkpoint(ctx context.Context, opts ...CheckpointTaskOpts) (Imag
|
| |
- }
|
| |
- request.ParentCheckpoint = i.ParentCheckpoint
|
| |
- if i.Options != nil {
|
| |
- - any, err := typeurl.MarshalAny(i.Options)
|
| |
- + any, err := protobuf.MarshalAnyToProto(i.Options)
|
| |
- if err != nil {
|
| |
- return nil, err
|
| |
- }
|
| |
- @@ -535,7 +536,7 @@ func (t *task) Update(ctx context.Context, opts ...UpdateTaskOpts) error {
|
| |
- if err != nil {
|
| |
- return err
|
| |
- }
|
| |
- - request.Resources = any
|
| |
- + request.Resources = protobuf.FromAny(any)
|
| |
- }
|
| |
- if i.Annotations != nil {
|
| |
- request.Annotations = i.Annotations
|
| |
- --
|
| |
- 2.37.3
|
| |
-
|
| |
since they didn't cleanly apply anymore
In-progress:
Various upstream dependencies aren't available it seems
Related: