Implement version 3 of virConnectListAllDomains.
[ocaml-libvirt.git] / examples / list_domains.ml
index 2e9e436..6b04932 100644 (file)
@@ -10,6 +10,15 @@ module C = Libvirt.Connect
 module D = Libvirt.Domain
 module N = Libvirt.Network
 
+let string_of_state = function
+  | D.InfoNoState -> "no state"
+  | D.InfoRunning -> "running"
+  | D.InfoBlocked -> "blocked"
+  | D.InfoPaused -> "paused"
+  | D.InfoShutdown -> "shutdown"
+  | D.InfoShutoff -> "shutoff"
+  | D.InfoCrashed -> "crashed"
+
 let () =
   try
     let name =
@@ -19,21 +28,16 @@ let () =
        None in
     let conn = C.connect_readonly ?name () in
 
-    (* List running domains. *)
-    let domains =
-      fst (Libvirt.get_domains conn ~want_info:false [D.ListActive]) in
-    List.iter (
-      fun dom ->
-       printf "%8d %s\n%!" (D.get_id dom) (D.get_name dom)
-    ) domains;
-
-    (* List inactive domains. *)
-    let domains =
-      fst (Libvirt.get_domains conn ~want_info:false [D.ListInactive]) in
+    (* List all domains (running and inactive). *)
+    let domains = D.get_domains_and_infos conn [D.ListAll] in
     List.iter (
-      fun dom ->
-       printf "inactive %s\n%!" (D.get_name dom)
-    ) domains;
+      fun (dom, info) ->
+       if info.D.state <> D.InfoShutoff then
+         printf "%8d %-20s %s\n%!"
+           (D.get_id dom) (D.get_name dom) (string_of_state info.D.state)
+       else
+         printf "%8s %-20s shutoff\n%!" "" (D.get_name dom)
+    ) domains
   with
     Libvirt.Virterror err ->
       eprintf "error: %s\n" (Libvirt.Virterror.to_string err)