| /* |
| Copyright 2016 The Kubernetes 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 cri |
| |
| import ( |
| "time" |
| |
| runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" |
| ) |
| |
| // RuntimeVersioner contains methods for runtime name, version and API version. |
| type RuntimeVersioner interface { |
| // Version returns the runtime name, runtime version and runtime API version |
| Version(apiVersion string) (*runtimeapi.VersionResponse, error) |
| } |
| |
| // ContainerManager contains methods to manipulate containers managed by a |
| // container runtime. The methods are thread-safe. |
| type ContainerManager interface { |
| // CreateContainer creates a new container in specified PodSandbox. |
| CreateContainer(podSandboxID string, config *runtimeapi.ContainerConfig, sandboxConfig *runtimeapi.PodSandboxConfig) (string, error) |
| // StartContainer starts the container. |
| StartContainer(containerID string) error |
| // StopContainer stops a running container with a grace period (i.e., timeout). |
| StopContainer(containerID string, timeout int64) error |
| // RemoveContainer removes the container. |
| RemoveContainer(containerID string) error |
| // ListContainers lists all containers by filters. |
| ListContainers(filter *runtimeapi.ContainerFilter) ([]*runtimeapi.Container, error) |
| // ContainerStatus returns the status of the container. |
| ContainerStatus(containerID string) (*runtimeapi.ContainerStatus, error) |
| // UpdateContainerResources updates the cgroup resources for the container. |
| UpdateContainerResources(containerID string, resources *runtimeapi.LinuxContainerResources) error |
| // ExecSync executes a command in the container, and returns the stdout output. |
| // If command exits with a non-zero exit code, an error is returned. |
| ExecSync(containerID string, cmd []string, timeout time.Duration) (stdout []byte, stderr []byte, err error) |
| // Exec prepares a streaming endpoint to execute a command in the container, and returns the address. |
| Exec(*runtimeapi.ExecRequest) (*runtimeapi.ExecResponse, error) |
| // Attach prepares a streaming endpoint to attach to a running container, and returns the address. |
| Attach(req *runtimeapi.AttachRequest) (*runtimeapi.AttachResponse, error) |
| // ReopenContainerLog asks runtime to reopen the stdout/stderr log file |
| // for the container. If it returns error, new container log file MUST NOT |
| // be created. |
| ReopenContainerLog(ContainerID string) error |
| } |
| |
| // PodSandboxManager contains methods for operating on PodSandboxes. The methods |
| // are thread-safe. |
| type PodSandboxManager interface { |
| // RunPodSandbox creates and starts a pod-level sandbox. Runtimes should ensure |
| // the sandbox is in ready state. |
| RunPodSandbox(config *runtimeapi.PodSandboxConfig, runtimeHandler string) (string, error) |
| // StopPodSandbox stops the sandbox. If there are any running containers in the |
| // sandbox, they should be force terminated. |
| StopPodSandbox(podSandboxID string) error |
| // RemovePodSandbox removes the sandbox. If there are running containers in the |
| // sandbox, they should be forcibly removed. |
| RemovePodSandbox(podSandboxID string) error |
| // PodSandboxStatus returns the Status of the PodSandbox. |
| PodSandboxStatus(podSandboxID string) (*runtimeapi.PodSandboxStatus, error) |
| // ListPodSandbox returns a list of Sandbox. |
| ListPodSandbox(filter *runtimeapi.PodSandboxFilter) ([]*runtimeapi.PodSandbox, error) |
| // PortForward prepares a streaming endpoint to forward ports from a PodSandbox, and returns the address. |
| PortForward(*runtimeapi.PortForwardRequest) (*runtimeapi.PortForwardResponse, error) |
| } |
| |
| // ContainerStatsManager contains methods for retrieving the container |
| // statistics. |
| type ContainerStatsManager interface { |
| // ContainerStats returns stats of the container. If the container does not |
| // exist, the call returns an error. |
| ContainerStats(containerID string) (*runtimeapi.ContainerStats, error) |
| // ListContainerStats returns stats of all running containers. |
| ListContainerStats(filter *runtimeapi.ContainerStatsFilter) ([]*runtimeapi.ContainerStats, error) |
| } |
| |
| // RuntimeService interface should be implemented by a container runtime. |
| // The methods should be thread-safe. |
| type RuntimeService interface { |
| RuntimeVersioner |
| ContainerManager |
| PodSandboxManager |
| ContainerStatsManager |
| |
| // UpdateRuntimeConfig updates runtime configuration if specified |
| UpdateRuntimeConfig(runtimeConfig *runtimeapi.RuntimeConfig) error |
| // Status returns the status of the runtime. |
| Status() (*runtimeapi.RuntimeStatus, error) |
| } |
| |
| // ImageManagerService interface should be implemented by a container image |
| // manager. |
| // The methods should be thread-safe. |
| type ImageManagerService interface { |
| // ListImages lists the existing images. |
| ListImages(filter *runtimeapi.ImageFilter) ([]*runtimeapi.Image, error) |
| // ImageStatus returns the status of the image. |
| ImageStatus(image *runtimeapi.ImageSpec) (*runtimeapi.Image, error) |
| // PullImage pulls an image with the authentication config. |
| PullImage(image *runtimeapi.ImageSpec, auth *runtimeapi.AuthConfig) (string, error) |
| // RemoveImage removes the image. |
| RemoveImage(image *runtimeapi.ImageSpec) error |
| // ImageFsInfo returns information of the filesystem that is used to store images. |
| ImageFsInfo() ([]*runtimeapi.FilesystemUsage, error) |
| } |