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(a)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(a)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