Update MANIFEST
[ocaml-libvirt.git] / examples / list_domains.ml
1 (* Simple demo program showing how to list out domains.
2    Usage: list_domains [URI]
3    (C) Copyright 2007 Richard W.M. Jones, Red Hat Inc.
4    http://libvirt.org/
5  *)
6
7 open Printf
8
9 module C = Libvirt.Connect
10 module D = Libvirt.Domain
11 module N = Libvirt.Network
12
13 let string_of_state = function
14   | D.InfoNoState -> "no state"
15   | D.InfoRunning -> "running"
16   | D.InfoBlocked -> "blocked"
17   | D.InfoPaused -> "paused"
18   | D.InfoShutdown -> "shutdown"
19   | D.InfoShutoff -> "shutoff"
20   | D.InfoCrashed -> "crashed"
21
22 let () =
23   try
24     let name =
25       if Array.length Sys.argv >= 2 then
26         Some (Sys.argv.(1))
27       else
28         None in
29     let conn = C.connect_readonly ?name () in
30
31     (* List all domains (running and inactive). *)
32     let domains = D.get_domains_and_infos conn [D.ListAll] in
33     List.iter (
34       fun (dom, info) ->
35         let id = D.get_id dom in
36         let name = D.get_name dom in
37         let state = string_of_state info.D.state in
38         if id >= 0 then
39           printf "%8d %-20s %s\n%!" id name state
40         else
41           printf "%8s %-20s %s\n%!" "inactive" name state
42     ) domains
43   with
44     Libvirt.Virterror err ->
45       eprintf "error: %s\n" (Libvirt.Virterror.to_string err)
46
47 let () =
48   (* Run the garbage collector which is a good way to check for
49    * memory corruption errors and reference counting issues in libvirt.
50    *)
51   Gc.compact ()