agent-ctl: Unbreak build

The recent switch to an async rust agent broke the `agent-ctl` tool.
However, we didn't notice because that isn't being built by the CI.

Fix the breakage by passing a ttRPC context to all ttRPC API calls and
also build the tool as part of the static checks CI.

Fixes: #1471.

Signed-off-by: James O. D. Hunt <james.o.hunt@intel.com>
This commit is contained in:
James O. D. Hunt 2021-02-26 17:19:07 +00:00
parent efe625dfc1
commit fcd45def53
4 changed files with 274 additions and 291 deletions

View File

@ -66,3 +66,6 @@ jobs:
- name: Run agent unit tests
run: |
cd ${GOPATH}/src/github.com/kata-containers/kata-containers/src/agent && make check
- name: Build agent-ctl tool (must be buildable against current agent)
run: |
cd ${GOPATH}/src/github.com/kata-containers/kata-containers/tools/agent-ctl && make

View File

@ -30,7 +30,7 @@ version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
dependencies = [
"winapi 0.3.8",
"winapi",
]
[[package]]
@ -76,7 +76,7 @@ checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
dependencies = [
"hermit-abi",
"libc",
"winapi 0.3.8",
"winapi",
]
[[package]]
@ -140,19 +140,19 @@ dependencies = [
[[package]]
name = "bytes"
version = "0.5.6"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"
checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040"
[[package]]
name = "caps"
version = "0.3.4"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf6a638a1f7f409f1e545ff0036b8aa5541692c775dd36b48b75bbde50d83d1c"
checksum = "d092fbb6657fb1f98a7da70c14335ac97e5a9477e1a8156d4bbf19a3a7aece51"
dependencies = [
"errno",
"error-chain",
"libc",
"thiserror",
]
[[package]]
@ -267,7 +267,7 @@ checksum = "8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a"
dependencies = [
"libc",
"redox_users",
"winapi 0.3.8",
"winapi",
]
[[package]]
@ -284,7 +284,7 @@ checksum = "b480f641ccf0faf324e20c1d3e53d81b7484c698b42ea677f6907ae4db195371"
dependencies = [
"errno-dragonfly",
"libc",
"winapi 0.3.8",
"winapi",
]
[[package]]
@ -297,15 +297,6 @@ dependencies = [
"libc",
]
[[package]]
name = "error-chain"
version = "0.12.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d371106cc88ffdfb1eabd7111e432da544f16f3e2d7bf1dfe8bf575f1df045cd"
dependencies = [
"version_check",
]
[[package]]
name = "failure"
version = "0.1.8"
@ -321,28 +312,6 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33"
[[package]]
name = "fnv"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "fuchsia-zircon"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
dependencies = [
"bitflags",
"fuchsia-zircon-sys",
]
[[package]]
name = "fuchsia-zircon-sys"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
[[package]]
name = "futures"
version = "0.3.8"
@ -501,7 +470,7 @@ dependencies = [
"futures-core",
"inotify-sys",
"libc",
"tokio 1.0.1",
"tokio",
]
[[package]]
@ -562,16 +531,6 @@ dependencies = [
"ttrpc",
]
[[package]]
name = "kernel32-sys"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
dependencies = [
"winapi 0.2.8",
"winapi-build",
]
[[package]]
name = "lazy_static"
version = "1.4.0"
@ -626,25 +585,6 @@ dependencies = [
"autocfg",
]
[[package]]
name = "mio"
version = "0.6.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
dependencies = [
"cfg-if 0.1.10",
"fuchsia-zircon",
"fuchsia-zircon-sys",
"iovec",
"kernel32-sys",
"libc",
"log",
"miow 0.2.2",
"net2",
"slab",
"winapi 0.2.8",
]
[[package]]
name = "mio"
version = "0.7.7"
@ -653,44 +593,9 @@ checksum = "e50ae3f04d169fcc9bde0b547d1c205219b7157e07ded9c5aff03e0637cb3ed7"
dependencies = [
"libc",
"log",
"miow 0.3.6",
"miow",
"ntapi",
"winapi 0.3.8",
]
[[package]]
name = "mio-named-pipes"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0840c1c50fd55e521b247f949c241c9997709f23bd7f023b9762cd561e935656"
dependencies = [
"log",
"mio 0.6.23",
"miow 0.3.6",
"winapi 0.3.8",
]
[[package]]
name = "mio-uds"
version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "afcb699eb26d4332647cc848492bbc15eafb26f08d0304550d5aa1f612e066f0"
dependencies = [
"iovec",
"libc",
"mio 0.6.23",
]
[[package]]
name = "miow"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
dependencies = [
"kernel32-sys",
"net2",
"winapi 0.2.8",
"ws2_32-sys",
"winapi",
]
[[package]]
@ -700,7 +605,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a33c1b55807fbed163481b5ba66db4b2fa6cde694a5027be10fb724206c5897"
dependencies = [
"socket2",
"winapi 0.3.8",
"winapi",
]
[[package]]
@ -709,17 +614,6 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2eb04b9f127583ed176e163fb9ec6f3e793b87e21deedd5734a69386a18a0151"
[[package]]
name = "net2"
version = "0.2.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae"
dependencies = [
"cfg-if 0.1.10",
"libc",
"winapi 0.3.8",
]
[[package]]
name = "nix"
version = "0.16.1"
@ -758,6 +652,18 @@ dependencies = [
"libc",
]
[[package]]
name = "nix"
version = "0.19.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2ccba0cfe4fdf15982d1674c69b1fd80bad427d293849982668dfe454bd61f2"
dependencies = [
"bitflags",
"cc",
"cfg-if 1.0.0",
"libc",
]
[[package]]
name = "nom"
version = "2.2.1"
@ -770,7 +676,7 @@ version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a31937dea023539c72ddae0e3571deadc1414b300483fa7aaec176168cfa9d2"
dependencies = [
"winapi 0.3.8",
"winapi",
]
[[package]]
@ -792,16 +698,6 @@ dependencies = [
"autocfg",
]
[[package]]
name = "num_cpus"
version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
dependencies = [
"hermit-abi",
"libc",
]
[[package]]
name = "object"
version = "0.21.1"
@ -872,12 +768,6 @@ dependencies = [
"syn 1.0.58",
]
[[package]]
name = "pin-project-lite"
version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b"
[[package]]
name = "pin-project-lite"
version = "0.2.1"
@ -1135,7 +1025,16 @@ version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
dependencies = [
"winapi 0.3.8",
"winapi",
]
[[package]]
name = "rlimit"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e7148757b4951f04391d2b301b2e3597d504c4d2434212d542b73c1a6b3f847"
dependencies = [
"libc",
]
[[package]]
@ -1178,7 +1077,6 @@ dependencies = [
"inotify",
"lazy_static",
"libc",
"mio 0.6.23",
"nix 0.17.0",
"oci",
"path-absolutize",
@ -1186,6 +1084,7 @@ dependencies = [
"protobuf",
"protocols",
"regex",
"rlimit",
"scan_fmt",
"scopeguard",
"serde",
@ -1194,7 +1093,7 @@ dependencies = [
"slog",
"slog-scope",
"tempfile",
"tokio 0.2.24",
"tokio",
]
[[package]]
@ -1334,7 +1233,7 @@ checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
dependencies = [
"cfg-if 1.0.0",
"libc",
"winapi 0.3.8",
"winapi",
]
[[package]]
@ -1382,7 +1281,7 @@ dependencies = [
"rand",
"redox_syscall",
"remove_dir_all",
"winapi 0.3.8",
"winapi",
]
[[package]]
@ -1430,49 +1329,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
dependencies = [
"libc",
"winapi 0.3.8",
"winapi",
]
[[package]]
name = "tokio"
version = "0.2.24"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "099837d3464c16a808060bb3f02263b412f6fafcb5d01c533d309985fbeebe48"
dependencies = [
"bytes 0.5.6",
"fnv",
"futures-core",
"lazy_static",
"libc",
"memchr",
"mio 0.6.23",
"mio-named-pipes",
"mio-uds",
"num_cpus",
"pin-project-lite 0.1.11",
"signal-hook-registry",
"slab",
"tokio-macros",
"winapi 0.3.8",
]
[[package]]
name = "tokio"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d258221f566b6c803c7b4714abadc080172b272090cdc5e244a6d4dd13c3a6bd"
checksum = "e8190d04c665ea9e6b6a0dc45523ade572c088d2e6566244c1122671dbf4ae3a"
dependencies = [
"autocfg",
"bytes 1.0.1",
"libc",
"mio 0.7.7",
"pin-project-lite 0.2.1",
"memchr",
"mio",
"once_cell",
"pin-project-lite",
"signal-hook-registry",
"tokio-macros",
"winapi",
]
[[package]]
name = "tokio-macros"
version = "0.2.6"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e44da00bfc73a25f814cd8d7e57a68a5c31b74b3152a0a1d1f590c97ed06265a"
checksum = "caf7b11a536f46a809a8a9f0bb4237020f70ecbf115b842360afb127ea2fda57"
dependencies = [
"proc-macro2 1.0.24",
"quote 1.0.7",
@ -1481,25 +1363,22 @@ dependencies = [
[[package]]
name = "tokio-vsock"
version = "0.2.2"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "547a35667d4d842422da7f5528612321770f2f640e7fd5df0431de7b717fb2b4"
checksum = "70c401a3d0e82328c6fa900e9e2c4152737a4caa304558b762f0154a8b306456"
dependencies = [
"bytes 0.4.12",
"futures",
"iovec",
"libc",
"mio 0.6.23",
"nix 0.17.0",
"tokio 0.2.24",
"tokio",
"vsock",
]
[[package]]
name = "ttrpc"
version = "0.4.14"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc512242eee1f113eadd48087dd97cbf807ccae4820006e7a890044044399c51"
checksum = "ff9ad10daac7027ac1e4c46326abc301349ab9b4006e931e9f7cb0feeb9a2096"
dependencies = [
"async-trait",
"byteorder",
@ -1510,15 +1389,15 @@ dependencies = [
"protobuf",
"protobuf-codegen-pure",
"thiserror",
"tokio 0.2.24",
"tokio",
"tokio-vsock",
]
[[package]]
name = "ttrpc-codegen"
version = "0.1.2"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12e8844d7a8351fa833bea811f826401bec020b233e60a7c0a8f313f764ce5a5"
checksum = "809eda4e459820237104e4b61d6b41bbe6c9e1ce6adf4057955e6e6722a90408"
dependencies = [
"protobuf",
"protobuf-codegen",
@ -1528,9 +1407,9 @@ dependencies = [
[[package]]
name = "ttrpc-compiler"
version = "0.3.2"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d290e64bdb994926d102f2983cc6550ece0778c8430253dc2de4e71cbf5285d9"
checksum = "8c2f2ce8c9a6e9422d0714bc8058b705d503fc9d028e69fae2236050c4721d75"
dependencies = [
"derive-new",
"prost",
@ -1571,12 +1450,6 @@ version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
[[package]]
name = "version_check"
version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed"
[[package]]
name = "void"
version = "1.0.2"
@ -1585,12 +1458,12 @@ checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
[[package]]
name = "vsock"
version = "0.2.1"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dba063357047c0f2216c7c653879ea4e5e198d0c3cde7efa37ebfd9039b48491"
checksum = "50e2ef09834e1d203d24556512c0e58e66de203440bd9d74c30a33f7240091c6"
dependencies = [
"libc",
"nix 0.17.0",
"nix 0.19.1",
]
[[package]]
@ -1609,12 +1482,6 @@ dependencies = [
"libc",
]
[[package]]
name = "winapi"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
[[package]]
name = "winapi"
version = "0.3.8"
@ -1625,12 +1492,6 @@ dependencies = [
"winapi-x86_64-pc-windows-gnu",
]
[[package]]
name = "winapi-build"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
[[package]]
name = "winapi-i686-pc-windows-gnu"
version = "0.4.0"
@ -1642,13 +1503,3 @@ name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "ws2_32-sys"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
dependencies = [
"winapi 0.2.8",
"winapi-build",
]

View File

@ -29,7 +29,7 @@ protobuf = "2.14.0"
nix = "0.17.0"
libc = "0.2.69"
# XXX: Must be the same as the version used by the agent
ttrpc = { version = "0.4.14" }
ttrpc = { version = "0.5.0" }
# For parsing timeouts
humantime = "2.0.0"

View File

@ -22,6 +22,15 @@ use std::os::unix::net::UnixStream;
use std::thread::sleep;
use std::time::Duration;
use ttrpc;
use ttrpc::context::Context;
// Hack until the actual Context type supports this.
fn clone_context(ctx: &Context) -> Context {
Context {
metadata: ctx.metadata.clone(),
timeout_nano: ctx.timeout_nano,
}
}
// Agent command handler type
//
@ -35,6 +44,7 @@ type AgentCmdFp = fn(
cfg: &Config,
client: &AgentServiceClient,
health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()>;
@ -521,6 +531,8 @@ pub fn client(cfg: &Config, commands: Vec<&str>) -> Result<()> {
let mut options = Options::new();
let ttrpc_ctx = ttrpc::context::with_timeout(cfg.timeout_nano);
// Special-case loading the OCI config file so it is accessible
// to all commands.
let oci_spec_json = utils::get_oci_spec_json(cfg)?;
@ -533,7 +545,7 @@ pub fn client(cfg: &Config, commands: Vec<&str>) -> Result<()> {
"server-address" => cfg.server_address.to_string());
if cfg.interactive {
return interactive_client_loop(&cfg, &mut options, &client, &health);
return interactive_client_loop(&cfg, &mut options, &client, &health, &ttrpc_ctx);
}
let mut repeat_count = 1;
@ -544,8 +556,15 @@ pub fn client(cfg: &Config, commands: Vec<&str>) -> Result<()> {
continue;
}
let (result, shutdown) =
handle_cmd(&cfg, &client, &health, repeat_count, &mut options, &cmd);
let (result, shutdown) = handle_cmd(
&cfg,
&client,
&health,
&ttrpc_ctx,
repeat_count,
&mut options,
&cmd,
);
if result.is_err() {
return result;
}
@ -566,6 +585,7 @@ fn handle_cmd(
cfg: &Config,
client: &AgentServiceClient,
health: &HealthClient,
ctx: &Context,
repeat_count: i64,
options: &mut Options,
cmdline: &str,
@ -611,7 +631,7 @@ fn handle_cmd(
if first.is_lowercase() {
result = handle_builtin_cmd(cfg, options, cmd, &args);
} else {
result = handle_agent_cmd(cfg, client, health, options, cmd, &args);
result = handle_agent_cmd(cfg, client, health, ctx, options, cmd, &args);
}
if result.0.is_err() {
@ -665,6 +685,7 @@ fn handle_agent_cmd(
cfg: &Config,
client: &AgentServiceClient,
health: &HealthClient,
ctx: &Context,
options: &mut Options,
cmd: &str,
args: &str,
@ -674,7 +695,8 @@ fn handle_agent_cmd(
Err(e) => return (Err(e), false),
};
let result = f(cfg, client, health, options, &args);
// BUG: FIXME: clone ctx here?
let result = f(cfg, client, health, ctx, options, &args);
if result.is_err() {
return (result, false);
}
@ -689,6 +711,7 @@ fn interactive_client_loop(
options: &mut Options,
client: &AgentServiceClient,
health: &HealthClient,
ctx: &Context,
) -> Result<()> {
let result = builtin_cmd_list(cfg, options, "");
if result.0.is_err() {
@ -710,7 +733,8 @@ fn interactive_client_loop(
continue;
}
let (result, shutdown) = handle_cmd(cfg, client, health, repeat_count, options, &cmdline);
let (result, shutdown) =
handle_cmd(cfg, client, health, ctx, repeat_count, options, &cmdline);
if result.is_err() {
return result;
}
@ -744,21 +768,24 @@ fn readline(prompt: &str) -> std::result::Result<String, String> {
}
fn agent_cmd_health_check(
cfg: &Config,
_cfg: &Config,
_client: &AgentServiceClient,
health: &HealthClient,
ctx: &Context,
_options: &mut Options,
_args: &str,
) -> Result<()> {
let mut req = CheckRequest::default();
let ctx = clone_context(ctx);
// value unused
req.set_service("".to_string());
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = health
.check(&req, cfg.timeout_nano)
.check(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -768,22 +795,25 @@ fn agent_cmd_health_check(
}
fn agent_cmd_health_version(
cfg: &Config,
_cfg: &Config,
_client: &AgentServiceClient,
health: &HealthClient,
ctx: &Context,
_options: &mut Options,
_args: &str,
) -> Result<()> {
// XXX: Yes, the API is actually broken!
let mut req = CheckRequest::default();
let ctx = clone_context(ctx);
// value unused
req.set_service("".to_string());
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = health
.version(&req, cfg.timeout_nano)
.version(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -793,21 +823,24 @@ fn agent_cmd_health_version(
}
fn agent_cmd_sandbox_create(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
let mut req = CreateSandboxRequest::default();
let ctx = clone_context(ctx);
let sid = utils::get_option("sid", options, args);
req.set_sandbox_id(sid);
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.create_sandbox(&req, cfg.timeout_nano)
.create_sandbox(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -817,18 +850,21 @@ fn agent_cmd_sandbox_create(
}
fn agent_cmd_sandbox_destroy(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
_options: &mut Options,
_args: &str,
) -> Result<()> {
let req = DestroySandboxRequest::default();
let ctx = clone_context(ctx);
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.destroy_sandbox(&req, cfg.timeout_nano)
.destroy_sandbox(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -838,14 +874,17 @@ fn agent_cmd_sandbox_destroy(
}
fn agent_cmd_container_create(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
let mut req = CreateContainerRequest::default();
let ctx = clone_context(ctx);
let cid = utils::get_option("cid", options, args);
let exec_id = utils::get_option("exec_id", options, args);
@ -860,7 +899,7 @@ fn agent_cmd_container_create(
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.create_container(&req, cfg.timeout_nano)
.create_container(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -870,9 +909,10 @@ fn agent_cmd_container_create(
}
fn agent_cmd_container_remove(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
@ -880,12 +920,14 @@ fn agent_cmd_container_remove(
let cid = utils::get_option("cid", options, args);
let ctx = clone_context(ctx);
req.set_container_id(cid);
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.remove_container(&req, cfg.timeout_nano)
.remove_container(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -898,11 +940,14 @@ fn agent_cmd_container_exec(
cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
let mut req = ExecProcessRequest::default();
let ctx = clone_context(ctx);
let cid = utils::get_option("cid", options, args);
let exec_id = utils::get_option("exec_id", options, args);
@ -924,7 +969,7 @@ fn agent_cmd_container_exec(
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.exec_process(&req, cfg.timeout_nano)
.exec_process(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -934,14 +979,17 @@ fn agent_cmd_container_exec(
}
fn agent_cmd_container_stats(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
let mut req = StatsContainerRequest::default();
let ctx = clone_context(ctx);
let cid = utils::get_option("cid", options, args);
req.set_container_id(cid);
@ -949,7 +997,7 @@ fn agent_cmd_container_stats(
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.stats_container(&req, cfg.timeout_nano)
.stats_container(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -959,14 +1007,17 @@ fn agent_cmd_container_stats(
}
fn agent_cmd_container_pause(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
let mut req = PauseContainerRequest::default();
let ctx = clone_context(ctx);
let cid = utils::get_option("cid", options, args);
req.set_container_id(cid);
@ -974,7 +1025,7 @@ fn agent_cmd_container_pause(
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.pause_container(&req, cfg.timeout_nano)
.pause_container(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -984,9 +1035,10 @@ fn agent_cmd_container_pause(
}
fn agent_cmd_container_resume(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
@ -994,12 +1046,14 @@ fn agent_cmd_container_resume(
let cid = utils::get_option("cid", options, args);
let ctx = clone_context(ctx);
req.set_container_id(cid);
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.resume_container(&req, cfg.timeout_nano)
.resume_container(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1009,14 +1063,17 @@ fn agent_cmd_container_resume(
}
fn agent_cmd_container_start(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
let mut req = StartContainerRequest::default();
let ctx = clone_context(ctx);
let cid = utils::get_option("cid", options, args);
req.set_container_id(cid);
@ -1024,7 +1081,7 @@ fn agent_cmd_container_start(
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.start_container(&req, cfg.timeout_nano)
.start_container(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1034,20 +1091,23 @@ fn agent_cmd_container_start(
}
fn agent_cmd_sandbox_get_guest_details(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
_options: &mut Options,
_args: &str,
) -> Result<()> {
let mut req = GuestDetailsRequest::default();
let ctx = clone_context(ctx);
req.set_mem_block_size(true);
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.get_guest_details(&req, cfg.timeout_nano)
.get_guest_details(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1057,14 +1117,17 @@ fn agent_cmd_sandbox_get_guest_details(
}
fn agent_cmd_container_list_processes(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
let mut req = ListProcessesRequest::default();
let ctx = clone_context(ctx);
let cid = utils::get_option("cid", options, args);
let mut list_format = utils::get_option("format", options, args);
@ -1079,7 +1142,7 @@ fn agent_cmd_container_list_processes(
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.list_processes(&req, cfg.timeout_nano)
.list_processes(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1089,14 +1152,17 @@ fn agent_cmd_container_list_processes(
}
fn agent_cmd_container_wait_process(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
let mut req = WaitProcessRequest::default();
let ctx = clone_context(ctx);
let cid = utils::get_option("cid", options, args);
let exec_id = utils::get_option("exec_id", options, args);
@ -1106,7 +1172,7 @@ fn agent_cmd_container_wait_process(
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.wait_process(&req, cfg.timeout_nano)
.wait_process(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1116,14 +1182,17 @@ fn agent_cmd_container_wait_process(
}
fn agent_cmd_container_signal_process(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
let mut req = SignalProcessRequest::default();
let ctx = clone_context(ctx);
let cid = utils::get_option("cid", options, args);
let exec_id = utils::get_option("exec_id", options, args);
@ -1143,7 +1212,7 @@ fn agent_cmd_container_signal_process(
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.signal_process(&req, cfg.timeout_nano)
.signal_process(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1153,18 +1222,21 @@ fn agent_cmd_container_signal_process(
}
fn agent_cmd_sandbox_tracing_start(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
_options: &mut Options,
_args: &str,
) -> Result<()> {
let req = StartTracingRequest::default();
let ctx = clone_context(ctx);
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.start_tracing(&req, cfg.timeout_nano)
.start_tracing(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1174,18 +1246,21 @@ fn agent_cmd_sandbox_tracing_start(
}
fn agent_cmd_sandbox_tracing_stop(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
_options: &mut Options,
_args: &str,
) -> Result<()> {
let req = StopTracingRequest::default();
let ctx = clone_context(ctx);
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.stop_tracing(&req, cfg.timeout_nano)
.stop_tracing(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1195,17 +1270,20 @@ fn agent_cmd_sandbox_tracing_stop(
}
fn agent_cmd_sandbox_update_interface(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
_options: &mut Options,
_args: &str,
) -> Result<()> {
let req = UpdateInterfaceRequest::default();
let ctx = clone_context(ctx);
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.update_interface(&req, cfg.timeout_nano)
.update_interface(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
// FIXME: Implement 'UpdateInterface' fully.
@ -1218,18 +1296,21 @@ fn agent_cmd_sandbox_update_interface(
}
fn agent_cmd_sandbox_update_routes(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
_options: &mut Options,
_args: &str,
) -> Result<()> {
let req = UpdateRoutesRequest::default();
let ctx = clone_context(ctx);
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.update_routes(&req, cfg.timeout_nano)
.update_routes(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
// FIXME: Implement 'UpdateRoutes' fully.
@ -1242,18 +1323,21 @@ fn agent_cmd_sandbox_update_routes(
}
fn agent_cmd_sandbox_list_interfaces(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
_options: &mut Options,
_args: &str,
) -> Result<()> {
let req = ListInterfacesRequest::default();
let ctx = clone_context(ctx);
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.list_interfaces(&req, cfg.timeout_nano)
.list_interfaces(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1263,18 +1347,21 @@ fn agent_cmd_sandbox_list_interfaces(
}
fn agent_cmd_sandbox_list_routes(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
_options: &mut Options,
_args: &str,
) -> Result<()> {
let req = ListRoutesRequest::default();
let ctx = clone_context(ctx);
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.list_routes(&req, cfg.timeout_nano)
.list_routes(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1284,14 +1371,17 @@ fn agent_cmd_sandbox_list_routes(
}
fn agent_cmd_container_tty_win_resize(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
let mut req = TtyWinResizeRequest::default();
let ctx = clone_context(ctx);
let cid = utils::get_option("cid", options, args);
let exec_id = utils::get_option("exec_id", options, args);
@ -1320,7 +1410,7 @@ fn agent_cmd_container_tty_win_resize(
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.tty_win_resize(&req, cfg.timeout_nano)
.tty_win_resize(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1330,14 +1420,17 @@ fn agent_cmd_container_tty_win_resize(
}
fn agent_cmd_container_close_stdin(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
let mut req = CloseStdinRequest::default();
let ctx = clone_context(ctx);
let cid = utils::get_option("cid", options, args);
let exec_id = utils::get_option("exec_id", options, args);
@ -1347,7 +1440,7 @@ fn agent_cmd_container_close_stdin(
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.close_stdin(&req, cfg.timeout_nano)
.close_stdin(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1357,14 +1450,17 @@ fn agent_cmd_container_close_stdin(
}
fn agent_cmd_container_read_stdout(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
let mut req = ReadStreamRequest::default();
let ctx = clone_context(ctx);
let cid = utils::get_option("cid", options, args);
let exec_id = utils::get_option("exec_id", options, args);
@ -1383,7 +1479,7 @@ fn agent_cmd_container_read_stdout(
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.read_stdout(&req, cfg.timeout_nano)
.read_stdout(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1393,14 +1489,17 @@ fn agent_cmd_container_read_stdout(
}
fn agent_cmd_container_read_stderr(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
let mut req = ReadStreamRequest::default();
let ctx = clone_context(ctx);
let cid = utils::get_option("cid", options, args);
let exec_id = utils::get_option("exec_id", options, args);
@ -1419,7 +1518,7 @@ fn agent_cmd_container_read_stderr(
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.read_stderr(&req, cfg.timeout_nano)
.read_stderr(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1429,14 +1528,17 @@ fn agent_cmd_container_read_stderr(
}
fn agent_cmd_container_write_stdin(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
let mut req = WriteStreamRequest::default();
let ctx = clone_context(ctx);
let cid = utils::get_option("cid", options, args);
let exec_id = utils::get_option("exec_id", options, args);
@ -1450,7 +1552,7 @@ fn agent_cmd_container_write_stdin(
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.write_stdin(&req, cfg.timeout_nano)
.write_stdin(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1460,18 +1562,21 @@ fn agent_cmd_container_write_stdin(
}
fn agent_cmd_sandbox_get_metrics(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
_options: &mut Options,
_args: &str,
) -> Result<()> {
let req = GetMetricsRequest::default();
let ctx = clone_context(ctx);
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.get_metrics(&req, cfg.timeout_nano)
.get_metrics(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1481,18 +1586,21 @@ fn agent_cmd_sandbox_get_metrics(
}
fn agent_cmd_sandbox_get_oom_event(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
_options: &mut Options,
_args: &str,
) -> Result<()> {
let req = GetOOMEventRequest::default();
let ctx = clone_context(ctx);
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.get_oom_event(&req, cfg.timeout_nano)
.get_oom_event(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1502,14 +1610,17 @@ fn agent_cmd_sandbox_get_oom_event(
}
fn agent_cmd_sandbox_copy_file(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
let mut req = CopyFileRequest::default();
let ctx = clone_context(ctx);
let path = utils::get_option("path", options, args);
if path != "" {
req.set_path(path);
@ -1582,7 +1693,7 @@ fn agent_cmd_sandbox_copy_file(
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.copy_file(&req, cfg.timeout_nano)
.copy_file(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1592,14 +1703,17 @@ fn agent_cmd_sandbox_copy_file(
}
fn agent_cmd_sandbox_reseed_random_dev(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
let mut req = ReseedRandomDevRequest::default();
let ctx = clone_context(ctx);
let str_data = utils::get_option("data", options, args);
let data = utils::str_to_bytes(&str_data)?;
@ -1608,7 +1722,7 @@ fn agent_cmd_sandbox_reseed_random_dev(
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.reseed_random_dev(&req, cfg.timeout_nano)
.reseed_random_dev(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1618,14 +1732,17 @@ fn agent_cmd_sandbox_reseed_random_dev(
}
fn agent_cmd_sandbox_online_cpu_mem(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
let mut req = OnlineCPUMemRequest::default();
let ctx = clone_context(ctx);
let wait_str = utils::get_option("wait", options, args);
if wait_str != "" {
@ -1659,7 +1776,7 @@ fn agent_cmd_sandbox_online_cpu_mem(
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.online_cpu_mem(&req, cfg.timeout_nano)
.online_cpu_mem(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1669,14 +1786,17 @@ fn agent_cmd_sandbox_online_cpu_mem(
}
fn agent_cmd_sandbox_set_guest_date_time(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
let mut req = SetGuestDateTimeRequest::default();
let ctx = clone_context(ctx);
let secs_str = utils::get_option("sec", options, args);
if secs_str != "" {
@ -1700,7 +1820,7 @@ fn agent_cmd_sandbox_set_guest_date_time(
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.set_guest_date_time(&req, cfg.timeout_nano)
.set_guest_date_time(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1710,21 +1830,24 @@ fn agent_cmd_sandbox_set_guest_date_time(
}
fn agent_cmd_sandbox_add_arp_neighbors(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
_options: &mut Options,
_args: &str,
) -> Result<()> {
let req = AddARPNeighborsRequest::default();
let ctx = clone_context(ctx);
// FIXME: Implement fully.
eprintln!("FIXME: 'AddARPNeighbors' not fully implemented");
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.add_arp_neighbors(&req, cfg.timeout_nano)
.add_arp_neighbors(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1734,14 +1857,17 @@ fn agent_cmd_sandbox_add_arp_neighbors(
}
fn agent_cmd_sandbox_update_container(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
let mut req = UpdateContainerRequest::default();
let ctx = clone_context(ctx);
let cid = utils::get_option("cid", options, args);
req.set_container_id(cid);
@ -1752,7 +1878,7 @@ fn agent_cmd_sandbox_update_container(
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.update_container(&req, cfg.timeout_nano)
.update_container(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";
@ -1762,14 +1888,17 @@ fn agent_cmd_sandbox_update_container(
}
fn agent_cmd_sandbox_mem_hotplug_by_probe(
cfg: &Config,
_cfg: &Config,
client: &AgentServiceClient,
_health: &HealthClient,
ctx: &Context,
options: &mut Options,
args: &str,
) -> Result<()> {
let mut req = MemHotplugByProbeRequest::default();
let ctx = clone_context(ctx);
// Expected to be a comma separated list of hex addresses
let addr_list = utils::get_option("memHotplugProbeAddr", options, args);
@ -1796,7 +1925,7 @@ fn agent_cmd_sandbox_mem_hotplug_by_probe(
debug!(sl!(), "sending request"; "request" => format!("{:?}", req));
let reply = client
.mem_hotplug_by_probe(&req, cfg.timeout_nano)
.mem_hotplug_by_probe(ctx, &req)
.map_err(|e| anyhow!("{:?}", e).context(ERR_API_FAILED))?;
info!(sl!(), "response received";