To adopt -blockdev we will need to fully convert virStorageSource into
the format accepted by qemu. This series adds the format layer
(qcow2/raw/etc ...) since the protocol layer is already implemented.
The goal is that we do the equivalent thing with blockdev to what we did
with -drive.
This series also adds a lot of tests to make sure that we generate the
right things.
Note that this series is also a precursor to the NBD+TLS migration
series, although only a small part of the code will be excercised.
Please have a look at the tests. I've anotated them by putting the
equivalent command line which would be used by libvirt into the commit
message.
Note that I've been looking at those JSON snippets for such a long time
that I probably stopped being able to see any differences.
Kevin, please look whether the configurations make sense (specifically
I'm not really sure about patch 14/30, but that resulted from my poking
in qemu.). All JSON documents were validated according to the qemu
schema.
The only known missing piece is the ability to use authentication with
RBD, since that is missing from qemu.
Peter Krempa (30):
storage: Properly track that backing chain members are readonly
qemu: domain: Format storage source node names into private data
util: storage: Add shadow copies of few disk properties to
virStorageSource
qemu: domain: Carefuly transfer configuration from disk to storage
source
qemu: block: Extract formatting of props for 'file' backend
qemu: block: Handle iomode property for json 'file' driver
utils: storage: Mark that a virStorageSource is going to be used as a
floppy
qemu: Move virtual FAT disk validation from command line builder
qemu: block: Add support for accessing directories via the 'vvfat'
driver
qemu: block: Propagate 'legacy' parameter when formatting disk backing
qemu: block: Validate node-names for use with qemu
qemu: block: Format cache modes for disk storage backends
qemu: block: Format 'read-only' attribute for JSON disk protocol
[RFC] qemu: block: Always set discard for storage nodes
qemu: block: Add support for creating 'format' layer for blockdev-add
tests: qemublock: Rename variables in anticipation of new tests
tests: Makefile: Sanitize entry for qemublocktest
qemu: domain: Export qemuDomainDeviceDefValidateDisk
qemu: domain: Tolerate NULL 'cfg' in qemuDomainPrepareDiskSourceChain
tests: qemublock: Add testing of blockdev JSON property generator
tests: qemublock: Add basic 'raw' file test
tests: qemublock: Add tests for all other format without special
options
tests: qemublock: Add tests for basic backing chain formats
tests: qemublock: Add test-case for the 'vvfat' driver in qemu
tests: qemublock: Add test cases for 'aio' options of 'file' storage
tests: qemublock: Add test for raw luks disk format
tests: qemublock: basic qcow2 tests
tests: qemublock: Add test combining authentication and encryption
tests: qemublock: Test handling of 'unmap' and 'detect-zeroes' options
tests: qemublock: Test handling of all cache modes
src/conf/domain_conf.c | 3 +
src/qemu/qemu_block.c | 422 ++++++++++++++++++++-
src/qemu/qemu_block.h | 6 +-
src/qemu/qemu_command.c | 16 +-
src/qemu/qemu_domain.c | 53 ++-
src/qemu/qemu_domain.h | 3 +
src/qemu/qemu_driver.c | 3 +
src/util/virstoragefile.c | 5 +
src/util/virstoragefile.h | 11 +
tests/Makefile.am | 11 +-
tests/qemublocktest.c | 312 ++++++++++++++-
.../qemublocktestdata/xml2json/dir-fat-cache.json | 22 ++
tests/qemublocktestdata/xml2json/dir-fat-cache.xml | 10 +
.../qemublocktestdata/xml2json/dir-fat-floppy.json | 14 +
.../qemublocktestdata/xml2json/dir-fat-floppy.xml | 11 +
.../xml2json/dir-fat-readonly.json | 14 +
.../xml2json/dir-fat-readonly.xml | 10 +
.../xml2json/file-backing_basic-aio_threads.json | 62 +++
.../xml2json/file-backing_basic-aio_threads.xml | 35 ++
.../file-backing_basic-cache-directsync.json | 91 +++++
.../file-backing_basic-cache-directsync.xml | 35 ++
.../xml2json/file-backing_basic-cache-none.json | 91 +++++
.../xml2json/file-backing_basic-cache-none.xml | 35 ++
.../xml2json/file-backing_basic-cache-unsafe.json | 91 +++++
.../xml2json/file-backing_basic-cache-unsafe.xml | 35 ++
.../file-backing_basic-cache-writeback.json | 91 +++++
.../file-backing_basic-cache-writeback.xml | 35 ++
.../file-backing_basic-cache-writethrough.json | 91 +++++
.../file-backing_basic-cache-writethrough.xml | 35 ++
.../xml2json/file-backing_basic-detect.json | 60 +++
.../xml2json/file-backing_basic-detect.xml | 35 ++
.../xml2json/file-backing_basic-noopts.json | 51 +++
.../xml2json/file-backing_basic-noopts.xml | 34 ++
.../xml2json/file-backing_basic-unmap-detect.json | 64 ++++
.../xml2json/file-backing_basic-unmap-detect.xml | 35 ++
.../xml2json/file-backing_basic-unmap-discard.json | 0
.../xml2json/file-backing_basic-unmap-ignore.json | 64 ++++
.../xml2json/file-backing_basic-unmap-ignore.xml | 35 ++
.../xml2json/file-backing_basic-unmap.json | 63 +++
.../xml2json/file-backing_basic-unmap.xml | 35 ++
.../xml2json/file-bochs-noopts.json | 12 +
.../xml2json/file-bochs-noopts.xml | 9 +
.../xml2json/file-cloop-noopts.json | 12 +
.../xml2json/file-cloop-noopts.xml | 9 +
.../xml2json/file-dmg-noopts.json | 12 +
.../qemublocktestdata/xml2json/file-dmg-noopts.xml | 9 +
.../xml2json/file-ploop-noopts.json | 12 +
.../xml2json/file-ploop-noopts.xml | 9 +
.../file-qcow2-backing-chain-encryption.json | 34 ++
.../file-qcow2-backing-chain-encryption.xml | 25 ++
.../xml2json/file-qcow2-backing-chain-noopts.json | 130 +++++++
.../xml2json/file-qcow2-backing-chain-noopts.xml | 83 ++++
.../file-qcow2-backing-chain-unterminated.json | 25 ++
.../file-qcow2-backing-chain-unterminated.xml | 18 +
.../xml2json/file-raw-aio_native.json | 21 +
.../xml2json/file-raw-aio_native.xml | 9 +
.../qemublocktestdata/xml2json/file-raw-luks.json | 13 +
tests/qemublocktestdata/xml2json/file-raw-luks.xml | 12 +
.../xml2json/file-raw-noopts.json | 12 +
.../qemublocktestdata/xml2json/file-raw-noopts.xml | 9 +
.../xml2json/file-vdi-noopts.json | 12 +
.../qemublocktestdata/xml2json/file-vdi-noopts.xml | 9 +
.../xml2json/file-vhd-noopts.json | 12 +
.../qemublocktestdata/xml2json/file-vhd-noopts.xml | 9 +
.../xml2json/file-vpc-noopts.json | 12 +
.../qemublocktestdata/xml2json/file-vpc-noopts.xml | 9 +
.../network-qcow2-backing-chain-cache-unsafe.json | 57 +++
.../network-qcow2-backing-chain-cache-unsafe.xml | 25 ++
...etwork-qcow2-backing-chain-encryption_auth.json | 51 +++
...network-qcow2-backing-chain-encryption_auth.xml | 34 ++
.../xml2json/nodename-long-format.xml | 9 +
.../xml2json/nodename-long-protocol.xml | 9 +
72 files changed, 2816 insertions(+), 36 deletions(-)
create mode 100644 tests/qemublocktestdata/xml2json/dir-fat-cache.json
create mode 100644 tests/qemublocktestdata/xml2json/dir-fat-cache.xml
create mode 100644 tests/qemublocktestdata/xml2json/dir-fat-floppy.json
create mode 100644 tests/qemublocktestdata/xml2json/dir-fat-floppy.xml
create mode 100644 tests/qemublocktestdata/xml2json/dir-fat-readonly.json
create mode 100644 tests/qemublocktestdata/xml2json/dir-fat-readonly.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-aio_threads.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-aio_threads.xml
create mode 100644
tests/qemublocktestdata/xml2json/file-backing_basic-cache-directsync.json
create mode 100644
tests/qemublocktestdata/xml2json/file-backing_basic-cache-directsync.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-cache-none.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-cache-none.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-cache-unsafe.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-cache-unsafe.xml
create mode 100644
tests/qemublocktestdata/xml2json/file-backing_basic-cache-writeback.json
create mode 100644
tests/qemublocktestdata/xml2json/file-backing_basic-cache-writeback.xml
create mode 100644
tests/qemublocktestdata/xml2json/file-backing_basic-cache-writethrough.json
create mode 100644
tests/qemublocktestdata/xml2json/file-backing_basic-cache-writethrough.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-detect.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-detect.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-noopts.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-unmap-detect.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-unmap-detect.xml
create mode 100644
tests/qemublocktestdata/xml2json/file-backing_basic-unmap-discard.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-unmap-ignore.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-unmap-ignore.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-unmap.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-unmap.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-bochs-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-bochs-noopts.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-cloop-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-cloop-noopts.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-dmg-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-dmg-noopts.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-ploop-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-ploop-noopts.xml
create mode 100644
tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-encryption.json
create mode 100644
tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-encryption.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-noopts.xml
create mode 100644
tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-unterminated.json
create mode 100644
tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-unterminated.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-raw-aio_native.json
create mode 100644 tests/qemublocktestdata/xml2json/file-raw-aio_native.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-raw-luks.json
create mode 100644 tests/qemublocktestdata/xml2json/file-raw-luks.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-raw-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-raw-noopts.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-vdi-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-vdi-noopts.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-vhd-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-vhd-noopts.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-vpc-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-vpc-noopts.xml
create mode 100644
tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe.json
create mode 100644
tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe.xml
create mode 100644
tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth.json
create mode 100644
tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth.xml
create mode 100644 tests/qemublocktestdata/xml2json/nodename-long-format.xml
create mode 100644 tests/qemublocktestdata/xml2json/nodename-long-protocol.xml
--
2.14.3