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 =
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)