feat: stopping the vm

This commit is contained in:
Oskar Manhart 2023-09-12 15:47:08 +02:00
parent 984fcc8da7
commit 6b730e8cb1
2 changed files with 73 additions and 15 deletions

View File

@ -1,6 +1,6 @@
use clap::Command;
use winapps::freerdp::freerdp_back::Freerdp;
use winapps::quickemu::{create_vm, run_vm};
use winapps::quickemu::{create_vm, kill_vm, start_vm};
use winapps::RemoteClient;
fn cli() -> Command {
@ -11,8 +11,16 @@ fn cli() -> Command {
.allow_external_subcommands(true)
.subcommand(Command::new("check").about("Checks remote connection"))
.subcommand(Command::new("connect").about("Connects to remote"))
.subcommand(Command::new("create-vm").about("Create a windows 10 vm using quickemu"))
.subcommand(Command::new("run-vm").about("Start the vm using quickemu"))
.subcommand(
Command::new("vm")
.about("Manage a windows 10 vm using quickemu")
.subcommand_required(true)
.arg_required_else_help(true)
.allow_external_subcommands(true)
.subcommand(Command::new("create").about("Create a windows 10 vm using quickget"))
.subcommand(Command::new("start").about("Start the vm"))
.subcommand(Command::new("kill").about("Kill the running VM")),
)
}
fn main() {
@ -34,14 +42,32 @@ fn main() {
let config = winapps::load_config(None);
client.run_app(config, "explorer");
}
Some(("create-vm", _)) => {
println!("Creating windows 10 vm..");
create_vm();
}
Some(("run-vm", _)) => {
println!("Starting vm..");
run_vm();
Some(("vm", command)) => {
match command.subcommand() {
Some(("create", _)) => {
println!("Creating windows 10 vm..");
create_vm();
}
Some(("start", _)) => {
println!("Starting vm..");
start_vm();
}
Some(("kill", _)) => {
println!("Killing vm..");
kill_vm();
}
Some((_, _)) => {
cli.about("Command not found, try existing ones!")
.print_help()
.expect("Couldn't print help");
}
_ => unreachable!(),
};
}
Some((_, _)) => {
cli.about("Command not found, try existing ones!")
.print_help()

View File

@ -1,5 +1,6 @@
use home::home_dir;
use std::env;
use std::fs;
use std::path::PathBuf;
use std::process::exit;
use std::process::Command;
@ -51,17 +52,15 @@ pub fn create_vm() {
println!("{}", String::from_utf8_lossy(&output.stdout));
}
pub fn run_vm() {
pub fn start_vm() {
let data_dir = get_data_dir();
let output = match Command::new("quickemu")
let command = match Command::new("quickemu")
.current_dir(data_dir)
.args(["--vm", "windows-10-22H2.conf", "--display", "none"])
.spawn()
.unwrap()
.wait_with_output()
{
Ok(o) => o,
Ok(c) => c,
Err(e) => {
println!("Failed to execute quickemu: {}", e);
println!("Please make sure quickemu is installed and in your PATH");
@ -69,5 +68,38 @@ pub fn run_vm() {
}
};
let output = match command.wait_with_output() {
Ok(o) => o,
Err(e) => {
println!("Failed to gather output from quickemu: {}", e);
println!("Please make sure quickemu is installed and in your PATH");
exit(1);
}
};
println!("{}", String::from_utf8_lossy(&output.stdout));
}
pub fn kill_vm() {
let data_dir = get_data_dir();
match fs::read_to_string(data_dir.join("windows-10/windows-10-22H2.pid")) {
Ok(pid) => {
let pid = pid.trim();
println!("Killing VM with PID {}", pid);
match Command::new("kill").arg(pid).spawn() {
Ok(_) => (),
Err(e) => {
println!("Failed to kill VM: {}", e);
exit(1);
}
}
}
Err(e) => {
println!("Failed to read PID file: {}", e);
exit(1);
}
}
}