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.10+.

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.10, 3.11, and 3.12.

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.1.tar.gz (100.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

container_runtime_interface_api-2.0.1-py3-none-any.whl (102.7 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for container_runtime_interface_api-2.0.1.tar.gz
Algorithm Hash digest
SHA256 04684bc160c2c5ad1937057f0dbe3b30b58da85cb7ab96bea0b2a037221297aa
MD5 3a81bd05316f8e735963bcb576548720
BLAKE2b-256 8b66beb7eee12926644243c4d1d51e9c9fe88430dc1b3e8b115eb047526ddb6f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for container_runtime_interface_api-2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3c48c7492585b4387bd704ea30907ccd0200dcd845eb89eb2ddee1582c2845df
MD5 708dbdb77be950606389afaf80b391d7
BLAKE2b-256 da81591b7dd9329ad8d26f75a167745985a5b2f67d5258e00a6f7ecd43a9f1da

See more details on using hashes here.

Supported by

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