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
)
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
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
)
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
) 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
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. *)