Add 'cmdline' template option.
authorRichard W.M. Jones <rjones@redhat.com>
Sun, 28 Feb 2016 20:36:14 +0000 (20:36 +0000)
committerRichard W.M. Jones <rjones@redhat.com>
Sun, 28 Feb 2016 20:36:14 +0000 (20:36 +0000)
mclu.pod
mclu_boot.ml
template.ml
template.mli

index 63b9b20..fe4710f 100644 (file)
--- a/mclu.pod
+++ b/mclu.pod
@@ -299,6 +299,11 @@ template can choose a default size.
 
 =back
 
 
 =back
 
+=item cmdline
+
+The template MAY print a kernel command line.  This is used to boot
+the guest, but only when C<needs-external-kernel> is set (see below).
+
 =item disk-bus
 
 The template MAY print the disk type supported by this guest.  Possible
 =item disk-bus
 
 The template MAY print the disk type supported by this guest.  Possible
index c1054e5..625aea2 100644 (file)
@@ -243,6 +243,11 @@ Try: `mclu on %s'\n" hostname hostname;
 " remote_external_kernel remote_external_initrd
       else "" in
 
 " remote_external_kernel remote_external_initrd
       else "" in
 
+    let xml = xml ^
+      match template_info.Template.cmdline with
+      | Some cmdline -> sprintf "    <cmdline>%s</cmdline>\n" cmdline
+      | None -> "" in
+
     let xml = xml ^ "\
   </os>
   <features>
     let xml = xml ^ "\
   </os>
   <features>
index 20a5cc7..404ec6b 100644 (file)
@@ -81,6 +81,7 @@ type template_info = {
   network_model : string option;
   has_xml_target : bool;
   needs_external_kernel : bool;
   network_model : string option;
   has_xml_target : bool;
   needs_external_kernel : bool;
+  cmdline : string option;
 }
 
 let probe ?(verbose = false) filename =
 }
 
 let probe ?(verbose = false) filename =
@@ -150,6 +151,16 @@ let probe ?(verbose = false) filename =
     | Some ["1"|"yes"] -> true
     | Some _ -> false in
 
     | 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;
   { base_image = base_image;
     guest_arch = guest_arch;
     minimum_memory = minimum_memory;
@@ -158,4 +169,5 @@ let probe ?(verbose = false) filename =
     disk_bus = disk_bus;
     network_model = network_model;
     has_xml_target = has_xml_target;
     disk_bus = disk_bus;
     network_model = network_model;
     has_xml_target = has_xml_target;
-    needs_external_kernel = needs_external_kernel; }
+    needs_external_kernel = needs_external_kernel;
+    cmdline = cmdline }
index 2cec7b7..3e3c2b0 100644 (file)
@@ -34,6 +34,7 @@ type template_info = {
   network_model : string option;
   has_xml_target : bool;
   needs_external_kernel : bool;
   network_model : string option;
   has_xml_target : bool;
   needs_external_kernel : bool;
+  cmdline : string option;
 }
 
 val probe : ?verbose:bool -> string -> template_info
 }
 
 val probe : ?verbose:bool -> string -> template_info