mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
qemu: block: Add JSON props generator for RBD storage backing
This commit is contained in:
parent
84955c6257
commit
5e9e693262
@ -594,6 +594,47 @@ qemuBlockStorageSourceBuildJSONInetSocketAddress(virStorageNetHostDefPtr host)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* qemuBlockStorageSourceBuildHostsJSONInetSocketAddress:
|
||||||
|
* @src: disk storage source
|
||||||
|
*
|
||||||
|
* Formats src->hosts into a json object conforming to the 'InetSocketAddress'
|
||||||
|
* type in qemu.
|
||||||
|
*/
|
||||||
|
static virJSONValuePtr
|
||||||
|
qemuBlockStorageSourceBuildHostsJSONInetSocketAddress(virStorageSourcePtr src)
|
||||||
|
{
|
||||||
|
virJSONValuePtr servers = NULL;
|
||||||
|
virJSONValuePtr server = NULL;
|
||||||
|
virJSONValuePtr ret = NULL;
|
||||||
|
virStorageNetHostDefPtr host;
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
if (!(servers = virJSONValueNewArray()))
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
for (i = 0; i < src->nhosts; i++) {
|
||||||
|
host = src->hosts + i;
|
||||||
|
|
||||||
|
if (!(server = qemuBlockStorageSourceBuildJSONInetSocketAddress(host)))
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (virJSONValueArrayAppend(servers, server) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
server = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
VIR_STEAL_PTR(ret, servers);
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
virJSONValueFree(servers);
|
||||||
|
virJSONValueFree(server);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static virJSONValuePtr
|
static virJSONValuePtr
|
||||||
qemuBlockStorageSourceGetGlusterProps(virStorageSourcePtr src)
|
qemuBlockStorageSourceGetGlusterProps(virStorageSourcePtr src)
|
||||||
{
|
{
|
||||||
@ -803,6 +844,35 @@ qemuBlockStorageSourceGetNBDProps(virStorageSourcePtr src)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static virJSONValuePtr
|
||||||
|
qemuBlockStorageSourceGetRBDProps(virStorageSourcePtr src)
|
||||||
|
{
|
||||||
|
qemuDomainStorageSourcePrivatePtr srcPriv = QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(src);
|
||||||
|
virJSONValuePtr servers = NULL;
|
||||||
|
virJSONValuePtr ret = NULL;
|
||||||
|
const char *username = NULL;
|
||||||
|
|
||||||
|
if (src->nhosts > 0 &&
|
||||||
|
!(servers = qemuBlockStorageSourceBuildHostsJSONInetSocketAddress(src)))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (src->auth)
|
||||||
|
username = srcPriv->secinfo->s.aes.username;
|
||||||
|
|
||||||
|
ignore_value(virJSONValueObjectCreate(&ret,
|
||||||
|
"s:driver", "rbd",
|
||||||
|
"s:pool", src->volume,
|
||||||
|
"s:image", src->path,
|
||||||
|
"S:snapshot", src->snapshot,
|
||||||
|
"S:conf", src->configFile,
|
||||||
|
"A:server", servers,
|
||||||
|
"S:user", username,
|
||||||
|
NULL));
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* qemuBlockStorageSourceGetBackendProps:
|
* qemuBlockStorageSourceGetBackendProps:
|
||||||
* @src: disk source
|
* @src: disk source
|
||||||
@ -863,6 +933,10 @@ qemuBlockStorageSourceGetBackendProps(virStorageSourcePtr src)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case VIR_STORAGE_NET_PROTOCOL_RBD:
|
case VIR_STORAGE_NET_PROTOCOL_RBD:
|
||||||
|
if (!(fileprops = qemuBlockStorageSourceGetRBDProps(src)))
|
||||||
|
return NULL;
|
||||||
|
break;
|
||||||
|
|
||||||
case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
|
case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
|
||||||
case VIR_STORAGE_NET_PROTOCOL_SSH:
|
case VIR_STORAGE_NET_PROTOCOL_SSH:
|
||||||
case VIR_STORAGE_NET_PROTOCOL_NONE:
|
case VIR_STORAGE_NET_PROTOCOL_NONE:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user