changeset 4:668a91cd7be8

impl virsh list --all filter
author AnaTofuZ <anatofuz@gmail.com>
date Fri, 23 Oct 2020 17:42:57 +0900
parents 5bdb02e05c86
children ef1358b993e1
files src/main.rs
diffstat 1 files changed, 24 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/src/main.rs	Thu Oct 22 17:40:16 2020 +0900
+++ b/src/main.rs	Fri Oct 23 17:42:57 2020 +0900
@@ -1,22 +1,19 @@
 use nix;
 use std::process::Command;
-//use libc;
 
 fn main() {
-    let uid       = getuid();
-    let gid       = getgid();
+    let uid = getuid();
+    let gid = getgid();
     let user_name = getlogin(uid);
     println!("uid: {} gid: {} name: {}", uid, gid, user_name);
     set_root_id();
-
-    list_command();
+    list_command(user_name);
 }
 
-
 fn getlogin(uid: u32) -> &'static str {
     use std::ffi::CStr;
-    let user_passwd = unsafe { nix::libc::getpwuid(uid)};
-    let c_str  = unsafe { CStr::from_ptr((*user_passwd).pw_name)} ;
+    let user_passwd = unsafe { nix::libc::getpwuid(uid) };
+    let c_str = unsafe { CStr::from_ptr((*user_passwd).pw_name) };
     return c_str.to_str().unwrap();
 }
 
@@ -30,12 +27,26 @@
     return gid_struct.into();
 }
 
-fn list_command() {
-    Command::new("virsh").arg("list").arg("--all").status().expect("failed to virsh");
+fn list_command(user_id: &'static str) {
+    let output = Command::new("virsh")
+        .arg("list")
+        .arg("--all")
+        .output()
+        .expect("failed to virsh");
+    let virsh_list = String::from_utf8_lossy(&output.stdout);
+    let mut virsh_list = virsh_list.split("\n");
+    let info_msg = virsh_list.next().unwrap();
+    let border_line = virsh_list.next().unwrap();
+
+    let vm_list = virsh_list.filter(|&x| x.contains(user_id));
+
+    println!("{}\n{}", info_msg, border_line);
+    for vm in vm_list {
+        println!("{}", vm);
+    }
 }
 
-
-fn set_root_id(){
+fn set_root_id() {
     let id = 0;
     match nix::unistd::seteuid(nix::unistd::Uid::from_raw(id)) {
         Err(err) => panic!("failed seteuid {}", err),
@@ -55,4 +66,4 @@
         Err(err) => panic!("failed setdid{}", err),
         Ok(_) => {}
     }
-}
\ No newline at end of file
+}