| Some conn ->
let dominfos = D.get_domains_and_infos conn [D.ListActive] in
(* D.t is abstract so we cannot marshal it. *)
- List.map (
+ filter_map (
fun (dom, info) ->
- { dom_name = D.get_name dom; dom_info = info }
+ let name = D.get_name dom in
+ let name_len = String.length name in
+ if name_len > 8 && String.sub name 0 8 = "guestfs-" then
+ None
+ else
+ Some { dom_name = D.get_name dom; dom_info = info }
) dominfos
| None -> [] in
(node, dominfo)
) nodes in
List.map (fun s -> Marshal.from_bytes s 0) active_guests
+let find_guest ?verbose ?(nodes = Mclu_conf.nodes ()) name =
+ let host, name = name_parse name in
+ let node =
+ match host with
+ | Some host ->
+ (try List.find (fun n -> host = n.Mclu_conf.hostname) nodes
+ with Not_found ->
+ eprintf "mclu: host '%s' not found\n" host;
+ exit 1)
+ | None ->
+ (* No 'host:' prefix given, so we need to find the host. *)
+ let guests = active_guests ?verbose ~nodes () in
+ let node, _ =
+ try
+ List.find (
+ fun (node, doms) ->
+ List.exists (fun dom -> name = dom.dom_name) doms
+ ) guests
+ with
+ Not_found ->
+ eprintf "mclu: guest '%s' not found\n" name;
+ exit 1 in
+ node in
+ node, name
+
let list ~verbose () =
let list_what = !list_what in