11 releases (7 breaking)

0.8.0 Jan 28, 2025
0.7.2 Oct 4, 2024
0.7.0 Mar 13, 2024
0.6.0 Oct 30, 2023
0.1.2 Dec 30, 2021

#699 in Asynchronous

Download history 1344/week @ 2025-02-02 1713/week @ 2025-02-09 1877/week @ 2025-02-16 2220/week @ 2025-02-23 1797/week @ 2025-03-02 1593/week @ 2025-03-09 1043/week @ 2025-03-16 1459/week @ 2025-03-23 1179/week @ 2025-03-30 1349/week @ 2025-04-06 976/week @ 2025-04-13 1215/week @ 2025-04-20 1899/week @ 2025-04-27 1748/week @ 2025-05-04 1246/week @ 2025-05-11 1107/week @ 2025-05-18

6,073 downloads per month
Used in 5 crates (via containerd-shim)

Apache-2.0

39KB
297 lines

Shim protos and client for containerd

Crates.io docs.rs Crates.io CI

containerd-shim-protos contains TTRPC bindings and client/server code to interact with containerd's runtime v2 shims.

Runtime

This crate is mainly expected to be useful to interact with containerd's shim runtime. Runtime v2 introduces a first class shim API for runtime authors to integrate with containerd. The shim API is minimal and scoped to the execution lifecycle of a container.

To learn how containerd's shim v2 runtime works in details, please refer to the documentation.

Design

The containerd-shim-protos crate provides Protobuf message and TTRPC service definitions for the Containerd shim v2 protocol.

The message and service definitions are auto-generated from protobuf source files under vendor/ by using ttrpc-codegen. So please do not edit those auto-generated source files.

If upgrading/modification is needed, please follow the steps:

  • Synchronize the latest protobuf source files from the upstream projects into directory 'vendor/'.
  • Re-generate the source files by cargo build --features=generate_bindings.
  • Commit the synchronized protobuf source files and auto-generated source files, keeping them in synchronization.

Usage

Add containerd-shim-client as a dependency in your Cargo.toml

[dependencies]
containerd-shim-protos = "0.4"

Basic client code looks as follows:

use containerd_shim_protos as client;

let client = client::Client::connect("unix:///containerd-shim/shim.sock").expect("Failed to connect to shim");
let task_client = client::TaskClient::new(client);

let context = client::ttrpc::context::with_timeout(0);

let req = client::api::ConnectRequest {
    id: String::from("1"),
    ..Default::default()
};

let resp = task_client.connect(context, &req).expect("Connect request failed");

Example

The way to build the example:

# build sync connect, client and server
$ cargo build --example shim-proto-connect
$ sudo ./shim-proto-connect unix:///containerd-shim/shim_socket_path.sock
$ cargo build --example shim-proto-client
$ cargo build --example shim-proto-server

# build async connect, client and server
$ cargo build --example shim-proto-connect-async --features async
$ cargo build --example shim-proto-client-async --features async
$ cargo build --example shim-proto-server-async --features async

Dependencies

~4–14MB
~186K SLoC