From f2a17d80287a2afc8f2204035536c81950649e2e Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Mon, 30 Mar 2015 13:40:43 +0100 Subject: [PATCH] mclu: boot: Allow template to specify a minimum disk size. --- mclu_boot.ml | 14 +++++++++++++- template.ml | 12 ++++++++++++ template.mli | 1 + 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/mclu_boot.ml b/mclu_boot.ml index 5bf742f..451beb8 100644 --- a/mclu_boot.ml +++ b/mclu_boot.ml @@ -71,6 +71,18 @@ Try `mclu list --templates' to list all known templates.\n" template; (* Probe the template for various features. *) let template_info = Template.probe ~verbose template_filename in + (* Check --size is not too small. *) + let size = + match !size, template_info.Template.minimum_size with + | 0L, None -> 0L (* virt-builder default *) + | 0L, Some min_size -> (* go with template minimum size *) + min_size + | size, Some min_size when size < min_size -> + eprintf "mclu: --size parameter is smaller than the minimum specified by the template (%s).\n" + (human_size min_size); + exit 1 + | size, _ -> size in (* go with user-specified size *) + (* Decide how much RAM we will give the guest. This affects our * choice of node, so do it early. *) @@ -267,7 +279,7 @@ Try: `mclu on %s'\n" hostname hostname; fpf "export format=%s\n" (quote format); fpf "export name=%s\n" (quote name); fpf "export output=%s\n" (quote remote_image); - (match !size with + (match size with | 0L -> () | size -> fpf "export size=%s\n" (quote (sprintf "--size %Ldb" size)) ); diff --git a/template.ml b/template.ml index dfeae3f..29af293 100644 --- a/template.ml +++ b/template.ml @@ -75,6 +75,7 @@ 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; } @@ -115,6 +116,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 @@ -127,5 +138,6 @@ let probe ?(verbose = false) filename = { base_image = base_image; minimum_memory = minimum_memory; recommended_memory = recommended_memory; + minimum_size = minimum_size; disk_bus = disk_bus; network_model = network_model } diff --git a/template.mli b/template.mli index 748abbc..635ca55 100644 --- a/template.mli +++ b/template.mli @@ -28,6 +28,7 @@ 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; } -- 1.8.3.1