From a5c81badfee011ff1f7c22e83a5ecb8e7b4f87d1 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Sat, 21 Mar 2015 22:49:01 +0000 Subject: [PATCH] Refactor common code dealing with [host:]name. --- mclu_console.ml | 31 ++----------------------------- mclu_destroy.ml | 31 ++----------------------------- mclu_list.ml | 25 +++++++++++++++++++++++++ mclu_list.mli | 5 +++++ 4 files changed, 34 insertions(+), 58 deletions(-) diff --git a/mclu_console.ml b/mclu_console.ml index a92cbf5..dfe012b 100644 --- a/mclu_console.ml +++ b/mclu_console.ml @@ -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 diff --git a/mclu_destroy.ml b/mclu_destroy.ml index 550d3d4..a7170d8 100644 --- a/mclu_destroy.ml +++ b/mclu_destroy.ml @@ -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 diff --git a/mclu_list.ml b/mclu_list.ml index 3534066..f685f54 100644 --- a/mclu_list.ml +++ b/mclu_list.ml @@ -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 diff --git a/mclu_list.mli b/mclu_list.mli index 7a291d6..6416814 100644 --- a/mclu_list.mli +++ b/mclu_list.mli @@ -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. *) -- 1.8.3.1