X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=template.ml;h=404ec6b7be72ed6479fb69f0cc44ae039ffb2d05;hb=cb034760e5b05e80ef3e26ed632223e3a00966d3;hp=fffc0e44586d70b519ff136bcf6fe4f4052afa1c;hpb=b29a837444aa5827b683bee5a7457fbb32305ae5;p=mclu.git diff --git a/template.ml b/template.ml index fffc0e4..404ec6b 100644 --- a/template.ml +++ b/template.ml @@ -32,12 +32,14 @@ let templates () = let files = List.map ((//) template_dir) files in let files = List.filter (fun name -> Filename.check_suffix name ".template") files in - List.map ( - fun filename -> - let name = Filename.basename filename in - let name = Filename.chop_suffix name ".template" in - (name, filename) - ) files + let templates = + List.map ( + fun filename -> + let name = Filename.basename filename in + let name = Filename.chop_suffix name ".template" in + (name, filename) + ) files in + List.sort compare templates let template_names () = List.map fst (templates ()) @@ -71,10 +73,15 @@ let run_template ~verbose filename subcmd args = type template_info = { base_image : string; + guest_arch : string option; minimum_memory : int64 option; recommended_memory : int64 option; + minimum_size : int64 option; disk_bus : string option; network_model : string option; + has_xml_target : bool; + needs_external_kernel : bool; + cmdline : string option; } let probe ?(verbose = false) filename = @@ -93,6 +100,10 @@ let probe ?(verbose = false) filename = | _ -> eprintf "mclu: cannot parse '%s base-image'\n" filename; exit 1 in + let guest_arch = + match run_template ~verbose filename "guest-arch" [] with + | Some [arch] -> Some arch + | _ -> None in let minimum_memory = match run_template ~verbose filename "minimum-memory" [] with | Some [memory] -> @@ -113,6 +124,16 @@ let probe ?(verbose = false) filename = exit 1 ); | _ -> None in + let minimum_size = + match run_template ~verbose filename "minimum-size" [] with + | Some [size] -> + (try Some (bytes_of_human_size size) + with Not_found -> + eprintf "mclu: cannot parse output of '%s minimum-size'\n" + filename; + exit 1 + ); + | _ -> None in let disk_bus = match run_template ~verbose filename "disk-bus" [] with | Some [answer] -> Some answer @@ -122,8 +143,31 @@ let probe ?(verbose = false) filename = | Some [answer] -> Some answer | _ -> None in + let has_xml_target = run_template ~verbose filename "xml" [] <> None in + + let needs_external_kernel = + match run_template ~verbose filename "needs-external-kernel" [] with + | None -> false + | Some ["1"|"yes"] -> true + | Some _ -> false in + + let cmdline = + match run_template ~verbose filename "cmdline" [] with + | Some [cmdline] -> Some cmdline + | _ -> None in + + if not needs_external_kernel && cmdline <> None then ( + eprintf "mclu: template cannot set 'cmdline' unless 'needs-external-kernel' is 'yes'.\n"; + exit 1 + ); + { base_image = base_image; + guest_arch = guest_arch; minimum_memory = minimum_memory; recommended_memory = recommended_memory; + minimum_size = minimum_size; disk_bus = disk_bus; - network_model = network_model } + network_model = network_model; + has_xml_target = has_xml_target; + needs_external_kernel = needs_external_kernel; + cmdline = cmdline }