X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=mclu_boot.ml;h=a253981803ec12e3ece82523c9788eb22dd404cd;hb=c0d86b007d1dccfe41c1480479191024217769d5;hp=b4fb92f38e2fe02149c6c6127db99be9b9deecd0;hpb=925be79f3065e383cbc532ebd637652999a9671e;p=mclu.git diff --git a/mclu_boot.ml b/mclu_boot.ml index b4fb92f..a253981 100644 --- a/mclu_boot.ml +++ b/mclu_boot.ml @@ -33,13 +33,28 @@ let set_memory s = eprintf "mclu: don't understand --memory parameter '%s' Try something like --memory 1G\n" s; exit 1 +let size = ref 0L (* 0 = default *) +let set_size s = + try size := bytes_of_human_size s + with Not_found -> + eprintf "mclu: don't understand --size parameter '%s' +Try something like --size 20G\n" s; + exit 1 +let timezone = ref "" (* "" = no timezone set *) let vcpus = ref 0 (* 0 = choose for me *) +let open_console = ref false +let open_viewer = ref false + let get_arg_speclist () = Arg.align [ + "--console", Arg.Set open_console, " Open the serial console"; "--cpus", Arg.Set_int vcpus, "n Number of virtual CPUs"; "--memory", Arg.String set_memory, "nnG Amount of RAM to give guest"; "--ram", Arg.String set_memory, "nnG Amount of RAM to give guest"; + "--size", Arg.String set_size, "nnG Size of disk to give guest"; + "--timezone", Arg.Set_string timezone, "TZ Set timezone of guest"; "--vcpus", Arg.Set_int vcpus, "n Number of virtual CPUs"; + "--viewer", Arg.Set open_viewer, " Open the graphical console"; ] let boot ~verbose template name = @@ -239,10 +254,27 @@ Try: `mclu on %s'\n" hostname hostname; ); let cmd = (* XXX Don't hard-code network_bridge here. *) - sprintf "ssh root@%s LIBGUESTFS_BACKEND_SETTINGS=network_bridge=br0 %s build %s %s %s" - (quote hostname) remote_filename - (quote template_info.Template.base_image) (quote remote_image) - format in + sprintf "ssh root@%s \ +LIBGUESTFS_BACKEND_SETTINGS=network_bridge=br0 \ +base_image=%s \ +format=%s \ +name=%s \ +output=%s \ +%s \ +%s \ +%s build" + (quote hostname) + (quote template_info.Template.base_image) (* base_image *) + format (* format *) + name (* name *) + (quote remote_image) (* output *) + (match !size with + | 0L -> "" + | size -> sprintf "size=%Ldb" size) (* size *) + (match !timezone with + | "" -> "" + | tz -> quote "timezone=" ^ tz) (* timezone *) + remote_filename in if verbose then printf "%s\n%!" cmd; if Sys.command cmd <> 0 then ( eprintf "mclu: remote build failed\n"; @@ -250,15 +282,25 @@ Try: `mclu on %s'\n" hostname hostname; ); (* Start the guest. *) - try - let conn = - let name = node.MS.node_status.MS.node.Mclu_conf.libvirt_uri in - C.connect ~name () in - let dom = D.create_xml conn xml [] in - printf "mclu: %s:%s started\n" hostname (D.get_name dom) - with Libvirt.Virterror msg -> - eprintf "mclu: %s: %s\n" hostname (Libvirt.Virterror.to_string msg); - exit 1 + let dom = + try + let conn = + let name = node.MS.node_status.MS.node.Mclu_conf.libvirt_uri in + C.connect ~name () in + let dom = D.create_xml conn xml [] in + printf "mclu: %s:%s started\n" hostname (D.get_name dom); + dom + with Libvirt.Virterror msg -> + eprintf "mclu: %s: %s\n" hostname (Libvirt.Virterror.to_string msg); + exit 1 in + + (* Graphical console? *) + if !open_viewer then + Mclu_viewer.viewer ~verbose ~host:hostname (D.get_name dom); + + (* Serial console? (Interactive, so run it last) *) + if !open_console then + Mclu_console.console ~verbose ~host:hostname (D.get_name dom) let run ~verbose = function | [ template; name ] ->