diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c index 0ebf2d2aff40a6d79242ba3c552155434113c62c..7ad79c7e7d596bc5305c3d552c33af7987f4d220 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c @@ -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; } diff --git a/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe.json b/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe.json index 80a694eee442625550b8fead99badcb6a964ef68..e66f62d24b792964624b84731e468c08d0a7b0f4 100644 --- a/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe.json +++ b/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe.json @@ -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, diff --git a/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth.json b/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth.json index fdb6f2ab1af6c68ef9aae673b3e9b9703ca86a6b..921cb3ea6957112d5fe36d9897becc4181dc07ed 100644 --- a/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth.json +++ b/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth.json @@ -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"