qemu: block: Add support for RBD authentication for blockdev

To allow using -blockdev with RBD we need to support the recently added
RBD authentication.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2018-07-09 16:05:16 +02:00
parent 8b4a31efc0
commit 1cb98a1fb3
3 changed files with 35 additions and 1 deletions

View File

@ -906,13 +906,33 @@ qemuBlockStorageSourceGetRBDProps(virStorageSourcePtr src)
virJSONValuePtr servers = NULL;
virJSONValuePtr ret = NULL;
const char *username = NULL;
virJSONValuePtr authmodes = NULL;
virJSONValuePtr mode = NULL;
const char *keysecret = NULL;
if (src->nhosts > 0 &&
!(servers = qemuBlockStorageSourceBuildHostsJSONInetSocketAddress(src)))
return NULL;
if (src->auth)
if (src->auth) {
username = srcPriv->secinfo->s.aes.username;
keysecret = srcPriv->secinfo->s.aes.alias;
/* the auth modes are modelled after our old command line generator */
if (!(authmodes = virJSONValueNewArray()))
goto cleanup;
if (!(mode = virJSONValueNewString("cephx")) ||
virJSONValueArrayAppend(authmodes, mode) < 0)
goto cleanup;
mode = NULL;
if (!(mode = virJSONValueNewString("none")) ||
virJSONValueArrayAppend(authmodes, mode) < 0)
goto cleanup;
mode = NULL;
}
if (virJSONValueObjectCreate(&ret,
"s:driver", "rbd",
@ -922,10 +942,14 @@ qemuBlockStorageSourceGetRBDProps(virStorageSourcePtr src)
"S:conf", src->configFile,
"A:server", &servers,
"S:user", username,
"A:auth-client-required", &authmodes,
"S:key-secret", keysecret,
NULL) < 0)
goto cleanup;
cleanup:
virJSONValueFree(authmodes);
virJSONValueFree(mode);
virJSONValueFree(servers);
return ret;
}

View File

@ -24,6 +24,11 @@
}
],
"user": "testuser-rbd",
"auth-client-required": [
"cephx",
"none"
],
"key-secret": "node-a-s-secalias",
"node-name": "node-a-s",
"cache": {
"direct": false,

View File

@ -24,6 +24,11 @@
}
],
"user": "testuser-rbd",
"auth-client-required": [
"cephx",
"none"
],
"key-secret": "node-a-s-secalias",
"node-name": "node-a-s",
"read-only": false,
"discard": "unmap"