Drop the generated libvirt_c.c from the sources
[ocaml-libvirt.git] / examples / list_domains.ml
index c97432c..5cd93c7 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,22 +28,18 @@ let () =
        None in
     let conn = C.connect_readonly ?name () in
 
-    (* List running domains. *)
-    let n = C.num_of_domains conn in
-    let ids = C.list_domains conn n in
-    let domains = Array.map (D.lookup_by_id conn) ids in
-    Array.iter (
-      fun dom ->
-       printf "%8d %s\n%!" (D.get_id dom) (D.get_name dom)
-    ) domains;
-
-    (* List inactive domains. *)
-    let n = C.num_of_defined_domains conn in
-    let names = C.list_defined_domains conn n in
-    Array.iter (
-      fun name ->
-       printf "inactive %s\n%!" name
-    ) names;
+    (* List all domains (running and inactive). *)
+    let domains = D.get_domains_and_infos conn [D.ListAll] in
+    List.iter (
+      fun (dom, info) ->
+       let id = D.get_id dom in
+       let name = D.get_name dom in
+       let state = string_of_state info.D.state in
+       if id >= 0 then
+         printf "%8d %-20s %s\n%!" id name state
+       else
+         printf "%8s %-20s %s\n%!" "inactive" name state
+    ) domains
   with
     Libvirt.Virterror err ->
       eprintf "error: %s\n" (Libvirt.Virterror.to_string err)