mirror of
https://github.com/aljazceru/kata-containers.git
synced 2025-12-26 18:44:47 +01:00
Add the "Create" api support for creating a pod or container. Signed-off-by: fupan <lifupan@gmail.com>
68 lines
1.5 KiB
Go
68 lines
1.5 KiB
Go
// Copyright (c) 2018 HyperHQ Inc.
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
package containerdshim
|
|
|
|
import (
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/containerd/containerd/api/types/task"
|
|
"github.com/containerd/containerd/errdefs"
|
|
taskAPI "github.com/containerd/containerd/runtime/v2/task"
|
|
|
|
vc "github.com/kata-containers/runtime/virtcontainers"
|
|
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
|
)
|
|
|
|
type container struct {
|
|
s *service
|
|
ttyio *ttyIO
|
|
spec *oci.CompatOCISpec
|
|
time time.Time
|
|
execs map[string]*exec
|
|
exitIOch chan struct{}
|
|
exitCh chan uint32
|
|
id string
|
|
stdin string
|
|
stdout string
|
|
stderr string
|
|
bundle string
|
|
cType vc.ContainerType
|
|
mu sync.Mutex
|
|
exit uint32
|
|
status task.Status
|
|
terminal bool
|
|
}
|
|
|
|
func newContainer(s *service, r *taskAPI.CreateTaskRequest, containerType vc.ContainerType, spec *oci.CompatOCISpec) (*container, error) {
|
|
if r == nil {
|
|
return nil, errdefs.ToGRPCf(errdefs.ErrInvalidArgument, " CreateTaskRequest points to nil")
|
|
}
|
|
|
|
// in order to avoid deferencing a nil pointer in test
|
|
if spec == nil {
|
|
spec = &oci.CompatOCISpec{}
|
|
}
|
|
|
|
c := &container{
|
|
s: s,
|
|
spec: spec,
|
|
id: r.ID,
|
|
bundle: r.Bundle,
|
|
stdin: r.Stdin,
|
|
stdout: r.Stdout,
|
|
stderr: r.Stderr,
|
|
terminal: r.Terminal,
|
|
cType: containerType,
|
|
execs: make(map[string]*exec),
|
|
status: task.StatusCreated,
|
|
exitIOch: make(chan struct{}),
|
|
exitCh: make(chan uint32, 1),
|
|
time: time.Now(),
|
|
}
|
|
return c, nil
|
|
}
|