Does Libvirt's json parser support single quoted string in qmp json string?

Peter Krempa pkrempa at redhat.com
Fri Jan 31 10:51:45 UTC 2020


On Fri, Jan 31, 2020 at 18:38:33 +0800, Peter Luo wrote:
> Hi All, 
> 
>  
> 
> I’m using qmp command via “virsh qemu-monitor-command” to perform block related jobs. 
> 
> And in my case, I execute block-commit to commit the changes in the top image to the base image which is encrypted. 
> 
> So in the base parameter, I need a json string which is single quoted to support the encryption parameters. 
> 
> However, the virsh is failed to parse the whole json qmp command. 

None of the above should be required with libvirt-5.10 and later when
using qemu-4.2. Those two versions start using blockdev way of
specifying images and encrypted images are supported.

Please consider using libvirt-6.0 though as there are few fixes for
blockdev.

> 
>  
> 
> Attempt 1: Single quote without backflash, failed 
> 
> root at host:~# virsh qemu-monitor-command i-9wdfw2x8  "{\"execute\": \"block-commit\", \"arguments\": { \"device\": \"drive-virtio-disk2\", \"job-id\": \"job100\", \"base\":'json:{\"encrypt.key-secret\":\"vol-38973xjl.secret\",\"driver\":\"qcow2\",\"file\":{\"driver\":\"file\",\"filename\":\"/pitrix/data/container/vol-38973xjl.img\"}}', \"top\": \"/pitrix/data/container/vol-38973xjl_ss-2tw7v0mm.img\"}}"
> 
> error: internal error: cannot parse json {"execute": "block-commit", "arguments": { "device": "drive-virtio-disk2", "job-id": "job100", "base":'json:{"encrypt.key-secret":"vol-38973xjl.secret","driver":"qcow2","file":{"driver":"file","filename":"/pitrix/data/container/vol-38973xjl.img"}}', "top": "/pitrix/data/container/vol-38973xjl_ss-2tw7v0mm.img"}}: lexical error: invalid char in json text.
> 
>           , "job-id": "job100", "base":'json:{"encrypt.key-secret":"vo

"base" argument must be a string. this means you need double quotes in
JSON ("). You also must properly escape any further JSON.

Given that libvirt now supports the operation natively I'll refrain from
elaborating on how to properly escape JSON to contain JSON strings, but
there are few examples in the test suite.

But please use the upstream supported way instead.




More information about the libvirt-users mailing list