From: Joel SIMOES <joel.simoes@xxxxxxxxxxx> --- src/qemu/qemu_conf.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 65 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index ac53f6d..dfafcdc 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -1185,6 +1185,56 @@ int qemuDriverAllocateID(virQEMUDriverPtr driver) return virAtomicIntInc(&driver->nextvmid); } + +static int +qemuAddSheepPoolSourceHost(virDomainDiskDefPtr def, + virStoragePoolDefPtr pooldef) +{ + int ret = -1; + char **tokens = NULL; + + /* Only support one host */ + if (pooldef->source.nhost != 1) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Expected exactly 1 host for the storage pool")); + goto cleanup; + } + + /* iscsi pool only supports one host */ + def->nhosts = 1; + + if (VIR_ALLOC_N(def->hosts, def->nhosts) < 0) + goto cleanup; + + if (VIR_STRDUP(def->hosts[0].name, pooldef->source.hosts[0].name) < 0) + goto cleanup; + + if (virAsprintf(&def->hosts[0].port, "%d", + pooldef->source.hosts[0].port ? + pooldef->source.hosts[0].port : + 7000) < 0) + goto cleanup; + + + + + + /* Storage pool have not supported these 2 attributes yet, + * use the defaults. + */ + def->hosts[0].transport = VIR_DOMAIN_DISK_PROTO_TRANS_TCP; + def->hosts[0].socket = NULL; + + + def->protocol = VIR_DOMAIN_DISK_PROTOCOL_SHEEPDOG; + + ret = 0; + +cleanup: + virStringFreeList(tokens); + return ret; +} + static int qemuAddISCSIPoolSourceHost(virDomainDiskDefPtr def, virStoragePoolDefPtr pooldef) @@ -1352,14 +1402,15 @@ qemuTranslateDiskSourcePool(virConnectPtr conn, def->srcpool->pooltype = pooldef->type; def->srcpool->voltype = info.type; - - if (def->srcpool->mode && pooldef->type != VIR_STORAGE_POOL_ISCSI) { + + if (def->srcpool->mode && pooldef->type != VIR_STORAGE_POOL_ISCSI && !(def->srcpool->mode == VIR_DOMAIN_DISK_SOURCE_POOL_MODE_DIRECT && pooldef->type == VIR_STORAGE_POOL_SHEEPDOG) ) { + virReportError(VIR_ERR_XML_ERROR, "%s", _("disk source mode is only valid when " - "storage pool is of iscsi type")); + "storage pool is of iscsi type or only direct for sheepdog ")); goto cleanup; } - + VIR_FREE(def->src); virDomainDiskHostDefFree(def->nhosts, def->hosts); virDomainDiskAuthClear(def); @@ -1439,9 +1490,17 @@ qemuTranslateDiskSourcePool(virConnectPtr conn, } break; - case VIR_STORAGE_POOL_MPATH: - case VIR_STORAGE_POOL_RBD: case VIR_STORAGE_POOL_SHEEPDOG: + def->srcpool->actualtype = VIR_DOMAIN_DISK_TYPE_NETWORK; + // force direct mode + def->srcpool->mode = VIR_DOMAIN_DISK_SOURCE_POOL_MODE_DIRECT; + def->protocol = VIR_DOMAIN_DISK_PROTOCOL_SHEEPDOG; + def->src = virStorageVolGetPath(vol); + + qemuAddSheepPoolSourceHost(def, pooldef); + break; + case VIR_STORAGE_POOL_MPATH: + case VIR_STORAGE_POOL_RBD: case VIR_STORAGE_POOL_GLUSTER: case VIR_STORAGE_POOL_LAST: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, -- 1.8.3.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list