From a44f1f85f96b443a7a6e02189d6f1f0c6b4a1dcf Mon Sep 17 00:00:00 2001 From: Jim Fehlig Date: Tue, 9 Feb 2016 16:19:01 -0700 Subject: [PATCH] xenconfig: produce key=value disk config syntax in xl formatter The most formal form of xl disk configuration uses key=value syntax to define each configuration item, e.g. format=raw, vdev=xvda, access=rw, backendtype=phy, target=disksrc Change the xl disk formatter to produce this syntax, which allows target= to contain meta info needed to setup a network-based disksrc (e.g. rbd, nbd, iscsi). For details on xl disk config format, see $xen-src/docs/misc/xl-disk-configuration.txt Update the disk config in the tests to use the formal syntax. But add tests to ensure disks specified with the positional parameter syntax are correctly converted to XML. Signed-off-by: Jim Fehlig --- src/xenconfig/xen_xl.c | 27 +++++---- .../test-disk-positional-parms-full.cfg | 26 +++++++++ .../test-disk-positional-parms-full.xml | 55 +++++++++++++++++++ .../test-disk-positional-parms-partial.cfg | 26 +++++++++ .../test-disk-positional-parms-partial.xml | 55 +++++++++++++++++++ .../test-fullvirt-direct-kernel-boot.cfg | 2 +- tests/xlconfigdata/test-fullvirt-multiusb.cfg | 2 +- tests/xlconfigdata/test-new-disk.cfg | 2 +- tests/xlconfigdata/test-paravirt-cmdline.cfg | 2 +- tests/xlconfigdata/test-paravirt-maxvcpus.cfg | 2 +- tests/xlconfigdata/test-spice-features.cfg | 2 +- tests/xlconfigdata/test-spice.cfg | 2 +- tests/xlconfigdata/test-vif-rate.cfg | 2 +- tests/xlconfigtest.c | 2 + 14 files changed, 188 insertions(+), 19 deletions(-) create mode 100644 tests/xlconfigdata/test-disk-positional-parms-full.cfg create mode 100644 tests/xlconfigdata/test-disk-positional-parms-full.xml create mode 100644 tests/xlconfigdata/test-disk-positional-parms-partial.cfg create mode 100644 tests/xlconfigdata/test-disk-positional-parms-partial.xml diff --git a/src/xenconfig/xen_xl.c b/src/xenconfig/xen_xl.c index be194e3535..f3e8b55217 100644 --- a/src/xenconfig/xen_xl.c +++ b/src/xenconfig/xen_xl.c @@ -587,9 +587,8 @@ xenFormatXLDisk(virConfValuePtr list, virDomainDiskDefPtr disk) int format = virDomainDiskGetFormat(disk); const char *driver = virDomainDiskGetDriver(disk); - /* target */ - virBufferAsprintf(&buf, "%s,", src); /* format */ + virBufferAddLit(&buf, "format="); switch (format) { case VIR_STORAGE_FILE_RAW: virBufferAddLit(&buf, "raw,"); @@ -609,31 +608,37 @@ xenFormatXLDisk(virConfValuePtr list, virDomainDiskDefPtr disk) } /* device */ - virBufferAdd(&buf, disk->dst, -1); - - virBufferAddLit(&buf, ","); + virBufferAsprintf(&buf, "vdev=%s,", disk->dst); + /* access */ + virBufferAddLit(&buf, "access="); if (disk->src->readonly) - virBufferAddLit(&buf, "r,"); + virBufferAddLit(&buf, "ro,"); else if (disk->src->shared) virBufferAddLit(&buf, "!,"); else - virBufferAddLit(&buf, "w,"); + virBufferAddLit(&buf, "rw,"); if (disk->transient) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("transient disks not supported yet")); goto cleanup; } + /* backendtype */ + virBufferAddLit(&buf, "backendtype="); if (STREQ_NULLABLE(driver, "qemu")) - virBufferAddLit(&buf, "backendtype=qdisk"); + virBufferAddLit(&buf, "qdisk,"); else if (STREQ_NULLABLE(driver, "tap")) - virBufferAddLit(&buf, "backendtype=tap"); + virBufferAddLit(&buf, "tap,"); else if (STREQ_NULLABLE(driver, "phy")) - virBufferAddLit(&buf, "backendtype=phy"); + virBufferAddLit(&buf, "phy,"); + /* devtype */ if (disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) - virBufferAddLit(&buf, ",devtype=cdrom"); + virBufferAddLit(&buf, "devtype=cdrom,"); + + /* target */ + virBufferAsprintf(&buf, "target=%s", src); if (virBufferCheckError(&buf) < 0) goto cleanup; diff --git a/tests/xlconfigdata/test-disk-positional-parms-full.cfg b/tests/xlconfigdata/test-disk-positional-parms-full.cfg new file mode 100644 index 0000000000..026e451ca3 --- /dev/null +++ b/tests/xlconfigdata/test-disk-positional-parms-full.cfg @@ -0,0 +1,26 @@ +name = "XenGuest2" +uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" +maxmem = 579 +memory = 394 +vcpus = 1 +pae = 1 +acpi = 1 +apic = 1 +hap = 0 +viridian = 0 +rtc_timeoffset = 0 +localtime = 0 +on_poweroff = "destroy" +on_reboot = "restart" +on_crash = "restart" +device_model = "/usr/lib/xen/bin/qemu-dm" +sdl = 0 +vnc = 1 +vncunused = 1 +vnclisten = "127.0.0.1" +vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000" ] +parallel = "none" +serial = "none" +builder = "hvm" +boot = "d" +disk = [ "/dev/HostVG/XenGuest2,raw,hda,rw,backendtype=phy", "/var/lib/libvirt/images/XenGuest2-home,qcow2,hdb,rw", "/root/boot.iso,raw,hdc,ro,devtype=cdrom" ] diff --git a/tests/xlconfigdata/test-disk-positional-parms-full.xml b/tests/xlconfigdata/test-disk-positional-parms-full.xml new file mode 100644 index 0000000000..7fd189944b --- /dev/null +++ b/tests/xlconfigdata/test-disk-positional-parms-full.xml @@ -0,0 +1,55 @@ + + XenGuest2 + c7a5fdb2-cdaf-9455-926a-d65c16db1809 + 592896 + 403456 + 1 + + hvm + /usr/lib/xen/boot/hvmloader + + + + + + + + + destroy + restart + restart + + /usr/lib/xen/bin/qemu-dm + + + + +
+ + + + + +
+ + + + + + +
+ + + + + +