• E
    virsh: list required options first · 6b75a1a5
    Eric Blake 提交于
    The current state of virsh parsing is that:
    
    $ virsh vol-info /path/to/image
    $ virsh vol-info --pool default /path/to/image
    $ virsh vol-info --pool default --vol /path/to/image
    
    all lookup the volume by path (technically, the last two also attempt
    a name lookup within a pool, whereas the first skips that step, but
    the end result is the same); meanwhile:
    
    $ virsh vol-info default /path/to/image
    
    complains about unexpected data.  Why?  Because the --pool option is
    optional, so default was parsed as the --vol argument, and
    /path/to/image.img doesn't match up with any remaining options that
    require an argument.  For proof, note that:
    
    $ virsh vol-info default --vol /path/to/image
    
    complains about looking up 'default' - the parser mis-associated both
    arguments with --vol.  Given the above, the only way to specify pool
    is with an explicit "--pool" argument (you can't specify it
    positionally).  However, named arguments can appear in any order, so:
    
    $ virsh vol-info /path/to/image --pool default
    $ virsh vol-info --vol /path/to/image --pool default
    
    have also always worked.  Therefore, this patch has no functional
    change on vol-info option parsing, but only on 'virsh help vol-info'
    synopsis layout.  However, it also allows the next patch to 1) enforce
    that required options are always first (without this patch, the next
    patch would fail the testsuite), and 2) allow the user to omit the
    "--pool" argument.  That is, the next patch makes it possible to do:
    
    $ virsh vol-info /path/to/image default
    
    which to date was not possible.
    
    * tools/virsh.c (opts_vol_create_from, opts_vol_clone)
    (opts_vol_upload, opts_vol_download, opts_vol_delete)
    (opts_vol_wipe, opts_vol_info, opts_vol_dumpxml, opts_vol_key)
    (opts_vol_path): List optional pool parameter after required
    arguments.
    6b75a1a5
virsh.c 359.2 KB