On Thursday, 22 March 2018 16:24:23 CET Richard W.M. Jones wrote: > + (* Input transport affects whether some input options should or > + * should not be used. > + *) > + let input_transport = > + let is_query = input_options = ["?", ""] in > + let no_options () = > + if is_query then ( > + printf (f_"No -io (input options) are supported with this input > transport.\n"); > + exit 0 > + ) > + else if input_options <> [] then > + error (f_"no -io (input options) are allowed here"); > + in > + match input_transport with > + | None -> no_options (); None > + | Some `SSH -> no_options (); Some `SSH > + | Some `VDDK -> > + if is_query then ( > + Input_libvirt_vddk.print_vddk_input_options (); > + exit 0 > + ) > + else ( > + let vddk_options = > + Input_libvirt_vddk.parse_vddk_input_options input_options in > + Some (`VDDK vddk_options) > + ) in > + > + (* Output mode affects whether some output options should or > + * should not be used. > + *) > + let output_mode = > + let is_query = output_options = ["?", ""] in > + let no_options () = > + if is_query then ( > + printf (f_"No -oo (output options) are supported in this output > mode.\n"); > + exit 0 > + ) > + else if output_options <> [] then > + error (f_"no -oo (output options) are allowed here"); > + in > + match output_mode with > + | `Not_set -> no_options (); `Not_set > + | `Glance -> no_options (); `Glance > + | `Libvirt -> no_options (); `Libvirt > + | `Local -> no_options (); `Local > + | `Null -> no_options (); `Null > + | `RHV -> no_options (); `RHV > + | `QEmu -> no_options (); `QEmu > + | `VDSM -> > + if is_query then ( > + Output_vdsm.print_vdsm_output_options (); > + exit 0 > + ) > + else ( > + let vdsm_options = > + Output_vdsm.parse_vdsm_output_options output_options in > + `VDSM vdsm_options > + ) in
Here I'd do the check of the options (both input and output) by
prefixes, i.e. things like:
List.iter (
fun key ->
if not (String.is_prefix key "vddk-") ||
not (List.mem key vddk_option_keys) then
error (f_"-it vddk: ‘-io %s’ is not a valid input option") key
) keys;
So most probably adding a simple function to get the prefix of options
per-input and per-output mode, and using it to check.
The rest LGTM.
--
Pino Toscano
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ Libguestfs mailing list [email protected] https://www.redhat.com/mailman/listinfo/libguestfs
