[Libguestfs] [PATCH v7 4/6] v2v: Add general mechanism for input and output options (-io/-oo).

Pino Toscano ptoscano at redhat.com
Fri Mar 23 13:09:58 UTC 2018


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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part.
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20180323/b826495c/attachment.sig>


More information about the Libguestfs mailing list