| "console" ->
speclist := Mclu_console.get_arg_speclist ();
subcommand_run := Mclu_console.run
+ | "destroy" ->
+ speclist := Mclu_destroy.get_arg_speclist ();
+ subcommand_run := Mclu_destroy.run
| "list" ->
speclist := Mclu_list.get_arg_speclist ();
subcommand_run := Mclu_list.run
Connect to the serial console console of the named guest.
+=item B<mclu destroy [host:]guest>
+
+Destroy the named guest.
+
+Note this permanently deletes the guest and its data.
+
=item B<mclu list [--active] [--all] [--templates]>
List all active (running) guests and/or templates. You can use
--- /dev/null
+(* mclu: Mini Cloud
+ * Copyright (C) 2014-2015 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+(* Implement 'mclu destroy'. *)
+
+open Printf
+
+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 uri = node.Mclu_conf.libvirt_uri in
+
+ let cmd = sprintf "virsh -c %s destroy %s" (quote uri) (quote name) in
+ if verbose then printf "%s\n%!" cmd;
+ if Sys.command cmd <> 0 then (
+ eprintf "mclu: %s: command failed\n" cmd;
+ exit 1
+ )
+
+let run ~verbose = function
+ | [ name ] ->
+ let host, name = name_parse name in
+ destroy ~verbose ?host name
+ | _ ->
+ eprintf "Usage: mclu destroy <[host:]name>\n";
+ exit 1
--- /dev/null
+(* mclu: Mini Cloud
+ * Copyright (C) 2014-2015 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+val get_arg_speclist : unit -> (Arg.key * Arg.spec * Arg.doc) list
+
+val run : verbose:bool -> string list -> unit