mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-10-22 04:18:53 +00:00
runtime: support different cri container type check
To support handle image-guest-pull block volume from different CRIs, including cri-o and containerd. Signed-off-by: ChengyuZhu6 <chengyu.zhu@intel.com>
This commit is contained in:
committed by
Fabiano Fidêncio
parent
874d83b510
commit
ba242b0198
@@ -36,6 +36,8 @@ import (
|
||||
|
||||
"context"
|
||||
|
||||
ctrAnnotations "github.com/containerd/containerd/pkg/cri/annotations"
|
||||
podmanAnnotations "github.com/containers/podman/v4/pkg/annotations"
|
||||
"github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/opencontainers/selinux/go-selinux"
|
||||
"github.com/sirupsen/logrus"
|
||||
@@ -1580,25 +1582,48 @@ func handleBlockVolume(c *Container, device api.Device) (*grpc.Storage, error) {
|
||||
return vol, nil
|
||||
}
|
||||
|
||||
// getContainerTypeforCRI get container type from different CRI annotations
|
||||
func getContainerTypeforCRI(c *Container) (string, string) {
|
||||
|
||||
// CRIContainerTypeKeyList lists all the CRI keys that could define
|
||||
// the container type from annotations in the config.json.
|
||||
CRIContainerTypeKeyList := []string{ctrAnnotations.ContainerType, podmanAnnotations.ContainerType}
|
||||
containerType := c.config.Annotations[vcAnnotations.ContainerTypeKey]
|
||||
for _, key := range CRIContainerTypeKeyList {
|
||||
_, ok := c.config.CustomSpec.Annotations[key]
|
||||
if ok {
|
||||
return containerType, key
|
||||
}
|
||||
}
|
||||
return "", ""
|
||||
}
|
||||
|
||||
func handleImageGuestPullBlockVolume(c *Container, virtualVolumeInfo *types.KataVirtualVolume, vol *grpc.Storage) (*grpc.Storage, error) {
|
||||
container_annotations := c.GetAnnotations()
|
||||
container_type := container_annotations["io.kubernetes.cri.container-type"]
|
||||
if virtualVolumeInfo.Source == "" {
|
||||
var image_ref string
|
||||
if container_type == "sandbox" {
|
||||
image_ref = "pause"
|
||||
} else {
|
||||
image_ref = container_annotations["io.kubernetes.cri.image-name"]
|
||||
if image_ref == "" {
|
||||
return nil, fmt.Errorf("Failed to get image name from annotations")
|
||||
}
|
||||
}
|
||||
virtualVolumeInfo.Source = image_ref
|
||||
containerType, criContainerType := getContainerTypeforCRI(c)
|
||||
|
||||
//merge virtualVolumeInfo.ImagePull.Metadata and container_annotations
|
||||
for k, v := range container_annotations {
|
||||
virtualVolumeInfo.ImagePull.Metadata[k] = v
|
||||
var image_ref string
|
||||
if containerType == string(PodSandbox) {
|
||||
image_ref = "pause"
|
||||
} else {
|
||||
switch criContainerType {
|
||||
case ctrAnnotations.ContainerType:
|
||||
image_ref = container_annotations["io.kubernetes.cri.image-name"]
|
||||
case podmanAnnotations.ContainerType:
|
||||
image_ref = container_annotations["io.kubernetes.cri-o.ImageName"]
|
||||
default:
|
||||
image_ref = ""
|
||||
}
|
||||
|
||||
if image_ref == "" {
|
||||
return nil, fmt.Errorf("Failed to get image name from annotations")
|
||||
}
|
||||
}
|
||||
virtualVolumeInfo.Source = image_ref
|
||||
|
||||
//merge virtualVolumeInfo.ImagePull.Metadata and container_annotations
|
||||
for k, v := range container_annotations {
|
||||
virtualVolumeInfo.ImagePull.Metadata[k] = v
|
||||
}
|
||||
|
||||
no, err := json.Marshal(virtualVolumeInfo.ImagePull)
|
||||
|
Reference in New Issue
Block a user