Prepare, configure, and manage Firecracker microVMs in seconds!
virtualization linux microvm firecracker

Merge pull request #10 from tsirysndr/feat/rm

feat: add 'rm' command for deleting Firecracker MicroVMs

authored by tsiry-sandratraina.com and committed by

GitHub 6beed4e4 8ba99086

+34 -2
+1
crates/firecracker-up/src/cmd/mod.rs
··· 3 3 pub mod logs; 4 4 pub mod ps; 5 5 pub mod reset; 6 + pub mod rm; 6 7 pub mod serve; 7 8 pub mod ssh; 8 9 pub mod start;
+22
crates/firecracker-up/src/cmd/rm.rs
··· 1 + use std::process; 2 + 3 + use anyhow::Error; 4 + use firecracker_state::repo; 5 + 6 + pub async fn remove(name: &str) -> Result<(), Error> { 7 + let pool = firecracker_state::create_connection_pool().await?; 8 + let vm = repo::virtual_machine::find(&pool, name).await?; 9 + 10 + if vm.is_none() { 11 + println!("[!] No virtual machine found with the name: {}", name); 12 + process::exit(1); 13 + } 14 + let vm = vm.unwrap(); 15 + 16 + firecracker_process::stop(Some(vm.name)).await.ok(); 17 + repo::virtual_machine::delete(&pool, &vm.id).await?; 18 + 19 + println!("{}", vm.id); 20 + 21 + Ok(()) 22 + }
+11 -2
crates/firecracker-up/src/main.rs
··· 4 4 use owo_colors::OwoColorize; 5 5 6 6 use crate::cmd::{ 7 - down::down, init::init, logs::logs, ps::list_all_instances, reset::reset, serve::serve, 8 - ssh::ssh, start::start, status::status, stop::stop, up::up, 7 + down::down, init::init, logs::logs, ps::list_all_instances, reset::reset, rm::remove, 8 + serve::serve, ssh::ssh, start::start, status::status, stop::stop, up::up, 9 9 }; 10 10 11 11 pub mod cmd; ··· 129 129 Command::new("reset") 130 130 .arg(arg!([name] "Name of the Firecracker MicroVM to reset").required(false)) 131 131 .about("Reset the Firecracker MicroVM"), 132 + ) 133 + .subcommand( 134 + Command::new("rm") 135 + .arg(arg!(<name> "Name or ID of the Firecracker MicroVM to delete").required(true)) 136 + .about("Delete the Firecracker MicroVM"), 132 137 ) 133 138 .subcommand( 134 139 Command::new("serve") ··· 282 287 ..Default::default() 283 288 }) 284 289 .await? 290 + } 291 + Some(("rm", args)) => { 292 + let name = args.get_one::<String>("name").cloned().unwrap(); 293 + remove(&name).await? 285 294 } 286 295 Some(("serve", _)) => serve().await?, 287 296 _ => {