Add shim client example

Signed-off-by: Maksym Pavlenko <pavlenko.maksym@gmail.com>
This commit is contained in:
Maksym Pavlenko 2021-07-26 15:41:40 -07:00
parent 68a651b0e4
commit baf8effb21
4 changed files with 68 additions and 1 deletions

View File

@ -9,7 +9,9 @@ description = "TTRPC bindings for containerd shim interfaces"
[dependencies]
protobuf = "2.23.0"
ttrpc = "0.5.1"
# Needs `Client::connect` to be published on crates.io
# PR: https://github.com/containerd/ttrpc-rust/pull/93
ttrpc = { git = "https://github.com/containerd/ttrpc-rust.git", rev = "da67137a8b89d6b796cb7e826ba2f6db2eed8f9e" }
[build-dependencies]
ttrpc-codegen = "0.2"

View File

@ -1,3 +1,30 @@
# Shim protos
TTRPC bindings for containerd's shim events and interfaces.
## Look and feel
Basic client code looks as follows:
```rust
let client = client::Client::connect(socket_path)?;
let task_client = client::TaskClient::new(client);
let context = client::ttrpc::context::with_timeout(0);
let req = client::api::ConnectRequest {
id: pid,
..Default::default()
};
let resp = task_client.connect(context, &req)?;
```
## Example
Have a look on example [here](./examples/connect.rs).
```bash
$ cargo build --example connect
$ sudo ./connect unix:///containerd-shim/shim_socket_path.sock
```

View File

@ -0,0 +1,34 @@
use std::env;
use containerd_shim_protos as client;
fn main() {
let args: Vec<String> = env::args().collect();
let socket_path = args
.get(1)
.ok_or_else(|| "First argument must be shim socket path")
.unwrap();
let pid = args
.get(2)
.and_then(|str| Some(str.to_owned()))
.unwrap_or(String::new());
let client = client::Client::connect(socket_path).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: pid,
..Default::default()
};
let resp = task_client
.connect(context, &req)
.expect("Connect request failed");
println!("Resp: {:?}", resp);
}

View File

@ -8,3 +8,7 @@ pub use ttrpc;
pub mod events;
#[rustfmt::skip]
pub mod shim;
pub use shim::shim as api;
pub use shim::shim_ttrpc::{Task, TaskClient};
pub use ttrpc::Client;