X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=template.ml;h=4db0b66d0c62aca2e6f3beeb81ffc330fa3b091f;hb=737ffdb932c89d8ec0b2c3d9731ca325da9d84f3;hp=fffc0e44586d70b519ff136bcf6fe4f4052afa1c;hpb=b29a837444aa5827b683bee5a7457fbb32305ae5;p=mclu.git diff --git a/template.ml b/template.ml index fffc0e4..4db0b66 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 ()) @@ -73,8 +75,11 @@ type template_info = { base_image : string; 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; } let probe ?(verbose = false) filename = @@ -113,6 +118,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 +137,19 @@ 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 + { base_image = base_image; 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; }