diff --git a/containerd-shim-v2/service.go b/containerd-shim-v2/service.go index 2715c19a67..f23d2ec46b 100644 --- a/containerd-shim-v2/service.go +++ b/containerd-shim-v2/service.go @@ -6,6 +6,7 @@ package containerdshim import ( "context" + "encoding/json" "os" sysexec "os/exec" "path/filepath" @@ -24,6 +25,7 @@ import ( "github.com/kata-containers/runtime/pkg/katautils" vc "github.com/kata-containers/runtime/virtcontainers" "github.com/kata-containers/runtime/virtcontainers/pkg/oci" + "github.com/opencontainers/runtime-spec/specs-go" "github.com/containerd/containerd/api/types/task" ptypes "github.com/gogo/protobuf/types" @@ -574,7 +576,20 @@ func (s *service) Stats(ctx context.Context, r *taskAPI.StatsRequest) (*taskAPI. // Update a running container func (s *service) Update(ctx context.Context, r *taskAPI.UpdateTaskRequest) (*ptypes.Empty, error) { - return nil, errdefs.ErrNotImplemented + s.Lock() + defer s.Unlock() + + var resources specs.LinuxResources + if err := json.Unmarshal(r.Resources.Value, &resources); err != nil { + return empty, err + } + + err := s.sandbox.UpdateContainer(r.ID, resources) + if err != nil { + return nil, errdefs.ToGRPC(err) + } + + return empty, nil } // Wait for a process to exit