
On 08/22/2013 10:01 AM, Daniel P. Berrange wrote:
On Wed, Aug 21, 2013 at 04:31:03PM -0300, Aline Manera wrote:
From: Aline Manera <alinefm@br.ibm.com>
QEMU/KVM already allows an HTTP URL for the cdrom ISO image so add this support to libvirt as well. The xml should be as following:
<disk type='network' device='cdrom'> <source protocol='http' name='/url/path'> <host name='host.name' port='80'/> </source> </disk>
Signed-off-by: Aline Manera <alinefm@br.ibm.com> --- src/conf/domain_conf.c | 3 +- src/conf/domain_conf.h | 1 + src/qemu/qemu_command.c | 7 ++++ .../qemuxml2argv-disk-cdrom-network.args | 5 +++ .../qemuxml2argv-disk-cdrom-network.xml | 37 ++++++++++++++++++++ tests/qemuxml2argvtest.c | 2 ++ 6 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network.xml
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index ea49d2c..461cc95 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -261,7 +261,8 @@ VIR_ENUM_IMPL(virDomainDiskProtocol, VIR_DOMAIN_DISK_PROTOCOL_LAST, "rbd", "sheepdog", "gluster", - "iscsi") + "iscsi", + "http")
VIR_ENUM_IMPL(virDomainDiskProtocolTransport, VIR_DOMAIN_DISK_PROTO_TRANS_LAST, "tcp", diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 500a5be..77fa00c 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -540,6 +540,7 @@ enum virDomainDiskProtocol { VIR_DOMAIN_DISK_PROTOCOL_SHEEPDOG, VIR_DOMAIN_DISK_PROTOCOL_GLUSTER, VIR_DOMAIN_DISK_PROTOCOL_ISCSI, + VIR_DOMAIN_DISK_PROTOCOL_HTTP,
VIR_DOMAIN_DISK_PROTOCOL_LAST }; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index f151173..a7c6c8e 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -3826,6 +3826,13 @@ qemuBuildDriveStr(virConnectPtr conn ATTRIBUTE_UNUSED, virBufferEscape(&opt, ',', ",", "%s,", disk->src); } break; + + case VIR_DOMAIN_DISK_PROTOCOL_HTTP: { + virBufferAsprintf(&opt, "file=http://%s:%s", + disk->hosts->name, + disk->hosts->port ? disk->hosts->port : "80"); + virBufferEscape(&opt, ',', ",", "%s,", disk->src); + } No need for {} around case blocks which don't have local variables defined. As Eric mentions, missing 'break' here.
While you're doing this, how about also adding 'ftp' protocol support ?
Sure! I will do a patch for it too.
} } else if (disk->type == VIR_DOMAIN_DISK_TYPE_VOLUME) { if (qemuBuildVolumeString(conn, disk, &opt) < 0)
Daniel