Am 15.06.2010 15:44, schrieb Avi Kivity:
> On 06/10/2010 08:45 PM, Markus Armbruster wrote:
>>
>>
>>     * Our config file format is in INI syntax.  QemuOpts correspond to
>>       INI sections.  Sections can't be nested, so recursive QemuOpts
>>       don't translate.
>>    
> 
> git (and probably others) use
> 
> [a "b"]
>      c = d
> 
> for
> 
>     a.b.c=d
> 
>>     Examples:
>>
>>     * Single protocol:
>>
>>       -blockdev id=blk1,format=raw,protocol=[file,file=fedora.img]
>>
>>       Requires suitable syntactic sugar to get the simple form (*).
>>
>>     * blkdebug
>>
>>       -blockdev id=blk2,format=qcow2,\
>>       protocol=[blkdebug,config=test.blkdebug,\
>>       protocol=[file,file=test.qcow2]]
>>
>>     * Avi's mirror:
>>
>>       -blockdev id=blk3,format=raw,\
>>       protocol=[mirror,\
>>       [file,file=local.img],\
>>       [nbd,domain=unix,sockert=nbd-sock]]
>>
>> 2. We already have a syntax to specify trees, namely JSON, so use it
>>
>>     If -blockdev's argument starts with '{', it's a JSON object suitable
>>     as argument of blockdev_add in QMP.
>>
>>     We still provide ordinary QemuOpts syntax for the cases that can be
>>     expressed with it, i.e. single protocol.
>>
>>     I figure we'd want syntactic sugar for blkdebug, to permit its use
>>     from the command line without having to resort to JSON.
>>    
> 
> Might be nice as a general extension to QemuOpts.

I agree.

> 
>> 3. Stack protocols through named references
>>
>>     The first protocol is "inlined" into -blockdev.  Any further
>>     protocols need to be referenced by name.
>>
>>     Best explained by example:
>>
>>     * Single protocol:
>>
>>       -blockdev id=blk1,format=raw,protocol=file,file=fedora.img
>>
>>       To get the simple form (*), make protocol optional with a suitable
>>       default.
>>
>>     * blkdebug
>>
>>       -blockdev id=blk2,format=qcow2,protocol=blkdebug,config=test.blkdebug,\
>>       base=blk2-base
>>       -blockproto id=blk2-base,protocol=file,file=test.qcow2
>>
>>     * Avi's mirror:
>>
>>       -blockdev id=blk3,format=raw,protocol=mirror,\
>>       base=blk3-base1,base=blk3=base2
>>       -blockproto id=blk3-base1,protocol=file,file=local.img
>>       -blockproto id=blk3-base2,protocol=nbd,domain=unix,sockert=nbd-sock
>>
>>     Anything but a single protocol becomes pretty verbose.  Syntactic
>>     sugar for the blkdebug case would be possible; not sure it's worth
>>     it.
>>
>>     No QemuOpts syntax changes.  INI can handle this just fine.
>>
>>    
> 
> Looks like the least painful option as no new infrastructure is needed.  
> I'd go with this.

But it's painful to type for the user. After all -blockdev on the
command line is for the user, as tools should use QMP. Also note that
this syntax mixes format and protocol options on one line which I
consider confusing at best.

As I told Markus already in private before he posted this, I prefer the
bracket solution for its clarity and simplicity, even though it comes at
the cost of having additional characters that need to be escaped.

Kevin

Reply via email to