Skip to main content

Python library for interaction with the Kubernetes container runtime interface API.

Project description

container-runtime-interface-api

Python library for communication with the Kubernetes Container Runtime Interface API.

Usage

Install container-runtime-interface-api with pipenv or pip:

$ pipenv install container-runtime-interface-api
Adding container-runtime-interface-api to Pipfile's [packages]…
✔ Installation Succeeded
...

This project currently supports Python 3.7+.

Connection

Connection to the CRI API is generally done through a UNIX socket, but any gRPC address supported by insecure_channel will work.

from cri_api.channel import Channel
channel = Channel.from_env() # Loads from RUNTIME_SOCK
channel = Channel("unix:///var/run/dockershim.sock") # Explicit argument

Images

The Images class is a thin wrapper around the existing ImageService API:

from cri_api.images import Images

channel = Channel.from_env()
images = Images(channel)

images.list_images()
images.pull_image("busybox")

busybox_images = [i["id"] for i in images.list_images() if any("busybox" in r for r in i["repoTags"])]
[images.remove_image(i) for i in busybox_images]

Containers

The Containers class is a thin wrapper around the existing RuntimeService API:

from cri_api.images import Images
from cri_api import ContainerFilter, ContainerState, ContainerStateValue

channel = Channel.from_env()
images = Containers(channel)

containers.list_containers()
containers.list_containers(ContainerFilter(state=ContainerStateValue(state=ContainerState.CONTAINER_EXITED)))

containers.get_container("9d81052cc027a1fb2ec61b898ea0fd6fc88216ce730ad75f4c52b29849cb440f")

Raw

Raw access to the underlying CRI API objects can be done by importing from cri_api:

from os import getenv
from grpc import insecure_channel
from cri_api import RuntimeServiceStub, ListContainersRequest

stub = RuntimeServiceStub(insecure_channel(getenv("RUNTIME_SOCK")))
response = stub.ListContainers(ListContainersRequest())
containers = response.containers

Updating Protobuf Python Generated Code

$ bin/update-proto.sh

Commit & create a new pull request!

Development

Interactive development on MacOS can be done by leveraging minikube:

$ minikube start --container-runtime=cri-o
$ minikube ssh
$ socat -d -d TCP4-LISTEN:15432,fork UNIX-CONNECT:/var/run/crio/crio.sock

# In another window, you can now connect on $(minikube ip):15432
$ export RUNTIME_SOCK=$(minikube ip):15432
...

Testing

Unit tests are run against all supported Python versions: 3.7, 3.8, and 3.9.

A basic set of integration tests is included alongside the unit tests, but are only run if the RUNTIME_SOCK environment variable is set correctly. They are verified in CI against a minikube installation running Docker and dockershim.

Run unit tests with:

$ pytest

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

container_runtime_interface_api-2.0.0.tar.gz (87.8 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file container_runtime_interface_api-2.0.0.tar.gz.

File metadata

File hashes

Hashes for container_runtime_interface_api-2.0.0.tar.gz
Algorithm Hash digest
SHA256 7674037121eac2be6f645e961c5d64c965ce357927d8b5cb2b77d33997e3903c
MD5 da66533051026f53c79443dc7b6c6a6c
BLAKE2b-256 410d4c369aa37992a55221bdb37faf73e6d4cea78da9f1d1ea736fccbe66b662

See more details on using hashes here.

File details

Details for the file container_runtime_interface_api-2.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for container_runtime_interface_api-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0ce49d600e8ffcf733097d12820a02e72759415e937e6055ab23d05b73f51a2e
MD5 99d999089a4bd3baca97aaa2c6162767
BLAKE2b-256 5e2d1a11cace2e074b02db0c65e56a5ef7ef8d9c0ae0b6dae60d1e08c1e94323

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page