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
Built Distribution
File details
Details for the file container_runtime_interface_api-2.0.0.tar.gz
.
File metadata
- Download URL: container_runtime_interface_api-2.0.0.tar.gz
- Upload date:
- Size: 87.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.14
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7674037121eac2be6f645e961c5d64c965ce357927d8b5cb2b77d33997e3903c |
|
MD5 | da66533051026f53c79443dc7b6c6a6c |
|
BLAKE2b-256 | 410d4c369aa37992a55221bdb37faf73e6d4cea78da9f1d1ea736fccbe66b662 |
File details
Details for the file container_runtime_interface_api-2.0.0-py3-none-any.whl
.
File metadata
- Download URL: container_runtime_interface_api-2.0.0-py3-none-any.whl
- Upload date:
- Size: 89.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.14
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0ce49d600e8ffcf733097d12820a02e72759415e937e6055ab23d05b73f51a2e |
|
MD5 | 99d999089a4bd3baca97aaa2c6162767 |
|
BLAKE2b-256 | 5e2d1a11cace2e074b02db0c65e56a5ef7ef8d9c0ae0b6dae60d1e08c1e94323 |