diff --git a/dysche-cli/Cargo.toml b/dysche-cli/Cargo.toml index d3e541fdc1a7272018e3f7fa0ed5a4de2f00bac1..d4c1cddee2fa86c1d8ad6ccb8c13e33f72c6dd57 100644 --- a/dysche-cli/Cargo.toml +++ b/dysche-cli/Cargo.toml @@ -7,3 +7,4 @@ edition = "2018" [dependencies] clap = { version = "~2.27.0", features = ["suggestions", "color", "yaml"] } +nix = "0.22.0" diff --git a/dysche-cli/src/main.rs b/dysche-cli/src/main.rs index f5c032aa9ff323ce34a5dc2fc95e132497a45eea..1ed2137863be466bec67a5737d40d3e8cd095c02 100644 --- a/dysche-cli/src/main.rs +++ b/dysche-cli/src/main.rs @@ -10,7 +10,7 @@ const DYSCHE_STS : &str = "/sys/modules/dysche/status"; fn main() { let yml = clap::load_yaml!("param.yml"); let matches = clap::App::from_yaml(yml).get_matches(); - let mut ret = 0; + let mut ret : Result = Ok(0); if let Some(_sc) = matches.subcommand_matches("list") { let mut verb = false; @@ -28,23 +28,29 @@ fn main() { let kernel = sc.value_of("kernel").unwrap_or(""); if cpus == "" { - ret = 1; + ret = Err(1); println!("Core (lists) is needed."); } if kernel == "" { - ret = 1; + ret = Err(2); println!("kernel for the newly created partition is needed."); } - if ret <= 0 { - println!(" creating a new partition, running {} on cores {}", kernel, + match ret { + Ok(_) => { + println!(" creating a new partition, running {} on cores {}", kernel, cpus); - ret = create_partition(cpus, kernel, "console=ttyS0, 115200", "acpi_devs: "); + let _ret = create_partition(cpus, kernel, "console=ttyS0, 115200", "acpi_devs: "); + }, + Err(_) => {}, } } else if let Some(sc) = matches.subcommand_matches("destroy") { let pid = sc.value_of("pid").unwrap_or("-1"); ret = destroy_partition(pid); + } else if let Some(sc) = matches.subcommand_matches("show") { + let pid = sc.value_of("pid").unwrap_or("-1"); + ret = show_partition(pid); } else if let Some(sc) = matches.subcommand_matches("migrate") { println!("migrate resources between partitions:"); @@ -53,24 +59,35 @@ fn main() { let dp = sc.value_of("dest_partition").unwrap_or(""); if cpus == "" { - ret = 1; + ret = Err(3); println!("Core (lists) is needed."); } if sp == "" || dp == "" { - ret = 1; + ret = Err(4); println!("source & dest partitions need be specified."); } - if ret <= 0 { - println!(" migrate cpu {} from partition {} to partition {}", cpus, + match ret { + Ok(_) => { + println!(" migrate cpu {} from partition {} to partition {}", cpus, sp, dp); - ret = migrate_partition(sp, dp, cpus); + ret = migrate_partition(sp, dp, cpus); + }, + Err(_) => {}, } } - if ret > 0 { - let _ = clap::App::from_yaml(yml).print_long_help(); + match ret { + Ok(_) => println!("success."), + Err(e) => { + println!("errcode {}", e); + match e { + 1 => {}, + _ => {}, + } + let _ = clap::App::from_yaml(yml).print_long_help(); + }, } } @@ -95,7 +112,7 @@ fn list_partitions(_verbose: bool) -> i32 { return ret; } -fn create_partition(cpus: &str, kernel_img: &str, kernel_param: &str, dev_list: &str) -> i32 { +fn create_partition(cpus: &str, kernel_img: &str, kernel_param: &str, dev_list: &str) -> Result { let mut ret = 0; println!("Info: cpu: {}, kernel: {}, kernel_param: {}, dev_list: {}", cpus, kernel_img, kernel_param, dev_list); @@ -113,10 +130,13 @@ fn create_partition(cpus: &str, kernel_img: &str, kernel_param: &str, dev_list: ret = 1; } - return ret; + match ret { + 0 => Ok(ret), + _ => Err(ret), + } } -fn destroy_partition(pid: &str) -> i32 { +fn destroy_partition(pid: &str) -> Result { let mut _ret = 0; println!("Will force destroy partition {}", pid); @@ -133,13 +153,20 @@ fn destroy_partition(pid: &str) -> i32 { _ret = 1; } - return _ret; + return Ok(_ret); +} + +fn show_partition(pid: &str) -> Result { + println!("The details of the partition {}", pid); + println!("place holder. need impl later."); + + return Ok(0); } -fn migrate_partition(_sp: &str, _dp: &str, _cpus: &str) -> i32 { +fn migrate_partition(_sp: &str, _dp: &str, _cpus: &str) -> Result { println!("place holder. need impl later."); - return 0; + return Ok(0); } fn write_line(filename: &str, line: &str) -> i32 { diff --git a/dysche-cli/src/param.yml b/dysche-cli/src/param.yml index 650cb94b12e5cbed5d6fc2559122a81d000e4294..b692395e4a24a92cd124958343ced5870f87c7ee 100644 --- a/dysche-cli/src/param.yml +++ b/dysche-cli/src/param.yml @@ -61,4 +61,13 @@ subcommands: args: - verbose: help: "show partition info verbosely" - short: v \ No newline at end of file + short: v + + - show: + about: "show details of a partition" + multiple: false + args: + - pid: + help: "specify partition id that details need be shown." + takes_value: true + short: p