diff options
Diffstat (limited to 'src/cmd/list.rs')
-rw-r--r-- | src/cmd/list.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/cmd/list.rs b/src/cmd/list.rs new file mode 100644 index 0000000..e58db3d --- /dev/null +++ b/src/cmd/list.rs @@ -0,0 +1,31 @@ +use crate::config::Configuration; + +use virt::connect::Connect; + +pub fn list(_config: &Configuration) -> anyhow::Result<()> { + let conn = Connect::open("qemu:///system")?; + let domains = conn.list_all_domains(0)?; + for domain in domains { + let name = domain.get_name()?; + let (state, _) = domain.get_state()?; + let state = state_name(state); + println!("{} {}", name, state); + } + + Ok(()) +} + +fn state_name(state: virt::domain::DomainState) -> String { + let name = match state { + virt::domain::VIR_DOMAIN_NOSTATE => "none", + virt::domain::VIR_DOMAIN_RUNNING => "running", + virt::domain::VIR_DOMAIN_BLOCKED => "blocked", + virt::domain::VIR_DOMAIN_PAUSED => "paused", + virt::domain::VIR_DOMAIN_SHUTDOWN => "shutdown", + virt::domain::VIR_DOMAIN_SHUTOFF => "shutoff", + virt::domain::VIR_DOMAIN_CRASHED => "crashed", + virt::domain::VIR_DOMAIN_PMSUSPENDED => "power management suspended", + _ => "unknown", + }; + name.to_string() +} |