Fixes to allow (32 bit) arm guests to run on aarch64 hosts.
[mclu.git] / mclu_list.ml
index 3534066..21d55d0 100644 (file)
@@ -65,15 +65,45 @@ let active_guests ?(verbose = false) ?(nodes = Mclu_conf.nodes ()) () =
           | 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