summaryrefslogtreecommitdiff
path: root/src/cmd/list.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/list.rs')
-rw-r--r--src/cmd/list.rs31
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()
+}