Refactor common code dealing with [host:]name.
authorRichard W.M. Jones <rjones@redhat.com>
Sat, 21 Mar 2015 22:49:01 +0000 (22:49 +0000)
committerRichard W.M. Jones <rjones@redhat.com>
Sat, 21 Mar 2015 22:49:01 +0000 (22:49 +0000)
mclu_console.ml
mclu_destroy.ml
mclu_list.ml
mclu_list.mli

index a92cbf5..dfe012b 100644 (file)
@@ -25,32 +25,7 @@ open Utils
 let get_arg_speclist () = []
 
 let console ~verbose ?host name =
-  let nodes = Mclu_conf.nodes () 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 = Mclu_list.active_guests ~verbose ~nodes () in
-      let node, _ =
-        try
-          List.find (
-            fun (node, doms) ->
-              List.exists (
-                fun dom ->
-                  name = dom.Mclu_list.dom_name
-              ) doms
-          ) guests
-        with
-          Not_found ->
-            eprintf "mclu: guest '%s' not found\n" name;
-            exit 1 in
-      node in
-
+  let node, name = Mclu_list.find_guest ~verbose name in
   let uri = node.Mclu_conf.libvirt_uri in
 
   let cmd = sprintf "virsh -c %s console %s" (quote uri) (quote name) in
@@ -61,9 +36,7 @@ let console ~verbose ?host name =
   )
 
 let run ~verbose = function
-  | [ name ] ->
-    let host, name = name_parse name in
-    console ~verbose ?host name
+  | [ name ] -> console ~verbose name
   | _ ->
     eprintf "Usage: mclu console <[host:]name>\n";
     exit 1
index 550d3d4..a7170d8 100644 (file)
@@ -25,32 +25,7 @@ open Utils
 let get_arg_speclist () = []
 
 let destroy ~verbose ?host name =
-  let nodes = Mclu_conf.nodes () 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 = Mclu_list.active_guests ~verbose ~nodes () in
-      let node, _ =
-        try
-          List.find (
-            fun (node, doms) ->
-              List.exists (
-                fun dom ->
-                  name = dom.Mclu_list.dom_name
-              ) doms
-          ) guests
-        with
-          Not_found ->
-            eprintf "mclu: guest '%s' not found\n" name;
-            exit 1 in
-      node in
-
+  let node, name = Mclu_list.find_guest ~verbose name in
   let uri = node.Mclu_conf.libvirt_uri in
 
   let cmd = sprintf "virsh -c %s destroy %s" (quote uri) (quote name) in
@@ -61,9 +36,7 @@ let destroy ~verbose ?host name =
   )
 
 let run ~verbose = function
-  | [ name ] ->
-    let host, name = name_parse name in
-    destroy ~verbose ?host name
+  | [ name ] -> destroy ~verbose name
   | _ ->
     eprintf "Usage: mclu destroy <[host:]name>\n";
     exit 1
index 3534066..f685f54 100644 (file)
@@ -74,6 +74,31 @@ let active_guests ?(verbose = false) ?(nodes = Mclu_conf.nodes ()) () =
     ) 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
 
index 7a291d6..6416814 100644 (file)
@@ -32,3 +32,8 @@ val active_guests : ?verbose:bool -> ?nodes:Mclu_conf.node list -> unit -> (Mclu
     with.  If not passed, then it examines every node.  This parameter
     is useful if you already know which nodes are up, to avoid trying
     to connect to down nodes a second time. *)
+
+val find_guest : ?verbose:bool -> ?nodes:Mclu_conf.node list -> string -> (Mclu_conf.node * string)
+(** Resolve the [host:name] or [name] string to the [(node, name)].
+
+    Note this calls {!exit} if the named guest does not exist. *)