1
0
mirror of https://github.com/containers/youki synced 2024-11-23 09:21:57 +01:00

Move subcommand enums to liboci-cli crate

Because we want to allow a final user to add extension commands
easily, it doesn't work to entirely move the enum of runtime
subcommands into the liboci-cli crate.  However, using the
incoporate those into the top-level enum defined by youki.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
David Gibson 2021-11-26 16:55:19 +11:00
parent 88ea432b92
commit 2b66005d93
2 changed files with 62 additions and 28 deletions

@ -1,3 +1,7 @@
use std::fmt::Debug;
use clap::Parser;
// Subcommands that are specified in https://github.com/opencontainers/runtime-tools/blob/master/docs/command-line-interface.md
mod create;
@ -22,3 +26,33 @@ pub use {
events::Events, exec::Exec, list::List, pause::Pause, ps::Ps, resume::Resume, run::Run,
spec::Spec,
};
// Subcommands parsed by liboci-cli, based on the [OCI
// runtime-spec](https://github.com/opencontainers/runtime-spec/blob/master/runtime.md)
// and specifically the [OCI Command Line
// Interface](https://github.com/opencontainers/runtime-tools/blob/master/docs/command-line-interface.md)
#[derive(Parser, Debug)]
pub enum StandardCmd {
Create(Create),
Start(Start),
State(State),
Kill(Kill),
Delete(Delete),
}
// Extra subcommands not documented in the OCI Command Line Interface,
// but found in
// [runc](https://github.com/opencontainers/runc/blob/master/man/runc.8.md)
// and other runtimes.
#[derive(Parser, Debug)]
pub enum CommonCmd {
Events(Events),
Exec(Exec),
List(List),
Pause(Pause),
#[clap(setting=clap::AppSettings::AllowLeadingHyphen)]
Ps(Ps),
Resume(Resume),
Run(Run),
Spec(Spec),
}

@ -19,6 +19,8 @@ use libcontainer::utils::create_dir_all_with_mode;
use nix::sys::stat::Mode;
use nix::unistd::getuid;
use liboci_cli::{CommonCmd, StandardCmd};
// High-level commandline option definition
// This takes global options as well as individual commands as specified in [OCI runtime-spec](https://github.com/opencontainers/runtime-spec/blob/master/runtime.md)
// Also check [runc commandline documentation](https://github.com/opencontainers/runc/blob/master/man/runc.8.md) for more explanation
@ -48,22 +50,13 @@ struct Opts {
// Also for a short information, check [runc commandline documentation](https://github.com/opencontainers/runc/blob/master/man/runc.8.md)
#[derive(Parser, Debug)]
enum SubCommand {
Create(liboci_cli::Create),
Start(liboci_cli::Start),
State(liboci_cli::State),
Kill(liboci_cli::Kill),
Delete(liboci_cli::Delete),
Events(liboci_cli::Events),
Exec(liboci_cli::Exec),
List(liboci_cli::List),
Pause(liboci_cli::Pause),
#[clap(setting=clap::AppSettings::AllowLeadingHyphen)]
Ps(liboci_cli::Ps),
Resume(liboci_cli::Resume),
Run(liboci_cli::Run),
Spec(liboci_cli::Spec),
// Standard and common commands handled by the liboci_cli crate
#[clap(flatten)]
Standard(liboci_cli::StandardCmd),
#[clap(flatten)]
Common(liboci_cli::CommonCmd),
// Youki specific extensions
Info(info::Info),
}
@ -97,20 +90,27 @@ fn main() -> Result<()> {
let systemd_cgroup = opts.systemd_cgroup;
match opts.subcmd {
SubCommand::Create(create) => commands::create::create(create, root_path, systemd_cgroup),
SubCommand::Start(start) => commands::start::start(start, root_path),
SubCommand::Run(run) => commands::run::run(run, root_path, systemd_cgroup),
SubCommand::Exec(exec) => commands::exec::exec(exec, root_path),
SubCommand::Kill(kill) => commands::kill::kill(kill, root_path),
SubCommand::Delete(delete) => commands::delete::delete(delete, root_path),
SubCommand::State(state) => commands::state::state(state, root_path),
SubCommand::Standard(cmd) => match cmd {
StandardCmd::Create(create) => {
commands::create::create(create, root_path, systemd_cgroup)
}
StandardCmd::Start(start) => commands::start::start(start, root_path),
StandardCmd::Kill(kill) => commands::kill::kill(kill, root_path),
StandardCmd::Delete(delete) => commands::delete::delete(delete, root_path),
StandardCmd::State(state) => commands::state::state(state, root_path),
},
SubCommand::Common(cmd) => match cmd {
CommonCmd::Events(events) => commands::events::events(events, root_path),
CommonCmd::Exec(exec) => commands::exec::exec(exec, root_path),
CommonCmd::List(list) => commands::list::list(list, root_path),
CommonCmd::Pause(pause) => commands::pause::pause(pause, root_path),
CommonCmd::Ps(ps) => commands::ps::ps(ps, root_path),
CommonCmd::Resume(resume) => commands::resume::resume(resume, root_path),
CommonCmd::Run(run) => commands::run::run(run, root_path, systemd_cgroup),
CommonCmd::Spec(spec) => commands::spec_json::spec(spec),
},
SubCommand::Info(info) => commands::info::info(info),
SubCommand::List(list) => commands::list::list(list, root_path),
SubCommand::Spec(spec) => commands::spec_json::spec(spec),
SubCommand::Pause(pause) => commands::pause::pause(pause, root_path),
SubCommand::Resume(resume) => commands::resume::resume(resume, root_path),
SubCommand::Events(events) => commands::events::events(events, root_path),
SubCommand::Ps(ps) => commands::ps::ps(ps, root_path),
}
}