File libvirt-rbd-support-namespace.patch of Package libvirt
diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
index 0000ebbd07..b12cd26b95 100644
--- a/src/qemu/qemu_block.c
+++ b/src/qemu/qemu_block.c
@@ -891,6 +891,9 @@ qemuBlockStorageSourceGetRBDProps(virStorageSourcePtr src,
g_autoptr(virJSONValue) authmodes = NULL;
g_autoptr(virJSONValue) mode = NULL;
const char *keysecret = NULL;
+ char *namespace = NULL;
+ char *image = NULL;
+ char *p;
if (src->nhosts > 0 &&
!(servers = qemuBlockStorageSourceBuildHostsJSONInetSocketAddress(src)))
@@ -911,18 +914,28 @@ qemuBlockStorageSourceGetRBDProps(virStorageSourcePtr src,
return NULL;
}
+ if ((p = strchr(src->path, '/'))) {
+ namespace = g_strndup(src->path, p - src->path);
+ image = g_strdup(p + 1);
+ } else {
+ namespace = g_strdup("");
+ image = g_strdup(src->path);
+ }
+
if (virJSONValueObjectCreate(&ret,
"s:pool", src->volume,
- "s:image", src->path,
+ "s:namespace", namespace,
+ "s:image", image,
"S:snapshot", src->snapshot,
"S:conf", src->configFile,
"A:server", &servers,
"S:user", username,
"A:auth-client-required", &authmodes,
- "S:key-secret", keysecret,
- NULL) < 0)
- return NULL;
-
+ "S:key-secret", keysecret, NULL) < 0) {
+ ret = NULL;
+ }
+ g_free(image);
+ g_free(namespace);
return ret;
}
diff --git a/src/storage_file/storage_source_backingstore.c b/src/storage_file/storage_source_backingstore.c
index 5e2db3d390..8f445c352a 100644
--- a/src/storage_file/storage_source_backingstore.c
+++ b/src/storage_file/storage_source_backingstore.c
@@ -944,12 +944,14 @@ virStorageSourceParseBackingJSONRBD(virStorageSourcePtr src,
{
const char *filename;
const char *pool = virJSONValueObjectGetString(json, "pool");
+ const char *namespace = virJSONValueObjectGetString(json, "namespace");
const char *image = virJSONValueObjectGetString(json, "image");
const char *conf = virJSONValueObjectGetString(json, "conf");
const char *snapshot = virJSONValueObjectGetString(json, "snapshot");
virJSONValuePtr servers = virJSONValueObjectGetArray(json, "server");
size_t nservers;
size_t i;
+ char *namespaced_image;
src->type = VIR_STORAGE_TYPE_NETWORK;
src->protocol = VIR_STORAGE_NET_PROTOCOL_RBD;
@@ -965,8 +967,14 @@ virStorageSourceParseBackingJSONRBD(virStorageSourcePtr src,
return -1;
}
+ if (namespace == NULL || STREQ(namespace, "")) {
+ namespaced_image = g_strdup(image);
+ } else {
+ namespaced_image = g_strdup_printf("%s/%s", namespace, image);
+ }
+
src->volume = g_strdup(pool);
- src->path = g_strdup(image);
+ src->path = namespaced_image;
src->snapshot = g_strdup(snapshot);
src->configFile = g_strdup(conf);
diff --git a/tests/qemublocktestdata/imagecreate/network-rbd-qcow2.json b/tests/qemublocktestdata/imagecreate/network-rbd-qcow2.json
index 67e2679dae..a05434ab2e 100644
--- a/tests/qemublocktestdata/imagecreate/network-rbd-qcow2.json
+++ b/tests/qemublocktestdata/imagecreate/network-rbd-qcow2.json
@@ -3,6 +3,7 @@ protocol:
"driver": "rbd",
"location": {
"pool": "asdf",
+ "namespace": "",
"image": "i.qcow2",
"server": [
{
diff --git a/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe-srconly.json b/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe-srconly.json
index 0fb0b8eff9..eff6985fb4 100644
--- a/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe-srconly.json
+++ b/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe-srconly.json
@@ -3,6 +3,7 @@
{
"driver": "rbd",
"pool": "rbdpool",
+ "namespace": "",
"image": "rbdimg",
"server": [
{
@@ -19,6 +20,7 @@
json:{"file":{
"driver": "rbd",
"pool": "rbdpool",
+ "namespace": "",
"image": "rbdimg",
"server": [
{
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 9ee18dba51..e7723ee8e8 100644
--- a/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe.json
+++ b/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe.json
@@ -12,6 +12,7 @@
{
"driver": "rbd",
"pool": "rbdpool",
+ "namespace": "",
"image": "rbdimg",
"server": [
{
diff --git a/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth-srconly.json b/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth-srconly.json
index 777a372471..7e1383ee2a 100644
--- a/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth-srconly.json
+++ b/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth-srconly.json
@@ -3,6 +3,7 @@
{
"driver": "rbd",
"pool": "rbdpool",
+ "namespace": "",
"image": "rbdimg",
"server": [
{
@@ -19,6 +20,7 @@
json:{"file":{
"driver": "rbd",
"pool": "rbdpool",
+ "namespace": "",
"image": "rbdimg",
"server": [
{
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 fb19641982..c6458896d8 100644
--- a/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth.json
+++ b/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth.json
@@ -12,6 +12,7 @@
{
"driver": "rbd",
"pool": "rbdpool",
+ "namespace": "",
"image": "rbdimg",
"server": [
{
diff --git a/tests/qemuxml2argvdata/disk-backing-chains-noindex.x86_64-latest.args b/tests/qemuxml2argvdata/disk-backing-chains-noindex.x86_64-latest.args
index 927b338380..adca3bc8d1 100644
--- a/tests/qemuxml2argvdata/disk-backing-chains-noindex.x86_64-latest.args
+++ b/tests/qemuxml2argvdata/disk-backing-chains-noindex.x86_64-latest.args
@@ -85,7 +85,7 @@ id=virtio-disk2 \
-object secret,id=libvirt-14-storage-auth-secret0,\
data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
--blockdev '{"driver":"rbd","pool":"pool","image":"image",\
+-blockdev '{"driver":"rbd","pool":"pool","namespace":"","image":"image",\
"server":[{"host":"mon1.example.org","port":"6321"},{"host":"mon2.example.org",\
"port":"6322"},{"host":"mon3.example.org","port":"6322"}],"user":"myname",\
"auth-client-required":["cephx","none"],\
diff --git a/tests/qemuxml2argvdata/disk-network-rbd.x86_64-latest.args b/tests/qemuxml2argvdata/disk-network-rbd.x86_64-latest.args
index ff63722cb6..68153fbc99 100644
--- a/tests/qemuxml2argvdata/disk-network-rbd.x86_64-latest.args
+++ b/tests/qemuxml2argvdata/disk-network-rbd.x86_64-latest.args
@@ -29,7 +29,7 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
-no-acpi \
-boot strict=on \
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
--blockdev '{"driver":"rbd","pool":"pool","image":"image",\
+-blockdev '{"driver":"rbd","pool":"pool","namespace":"","image":"image",\
"server":[{"host":"mon1.example.org","port":"6321"},{"host":"mon2.example.org",\
"port":"6322"},{"host":"mon3.example.org","port":"6322"}],\
"node-name":"libvirt-6-storage","auto-read-only":true,"discard":"unmap"}' \
@@ -37,13 +37,13 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
"file":"libvirt-6-storage"}' \
-device virtio-blk-pci,bus=pci.0,addr=0x2,drive=libvirt-6-format,\
id=virtio-disk0,bootindex=1 \
--blockdev '{"driver":"rbd","pool":"pool","image":"image","snapshot":"asdf",\
+-blockdev '{"driver":"rbd","pool":"pool","namespace":"","image":"image","snapshot":"asdf",\
"node-name":"libvirt-5-storage","auto-read-only":true,"discard":"unmap"}' \
-blockdev '{"node-name":"libvirt-5-format","read-only":false,"driver":"raw",\
"file":"libvirt-5-storage"}' \
-device virtio-blk-pci,bus=pci.0,addr=0x3,drive=libvirt-5-format,\
id=virtio-disk1 \
--blockdev '{"driver":"rbd","pool":"pool","image":"image","snapshot":"foo",\
+-blockdev '{"driver":"rbd","pool":"pool","namespace":"","image":"image","snapshot":"foo",\
"server":[{"host":"mon1.example.org","port":"6321"},{"host":"mon2.example.org",\
"port":"6322"},{"host":"mon3.example.org","port":"6322"}],\
"node-name":"libvirt-4-storage","auto-read-only":true,"discard":"unmap"}' \
@@ -51,7 +51,7 @@ id=virtio-disk1 \
"file":"libvirt-4-storage"}' \
-device virtio-blk-pci,bus=pci.0,addr=0x4,drive=libvirt-4-format,\
id=virtio-disk2 \
--blockdev '{"driver":"rbd","pool":"pool","image":"image","snapshot":"foo",\
+-blockdev '{"driver":"rbd","pool":"pool","namespace":"","image":"image","snapshot":"foo",\
"conf":"/blah/test.conf","node-name":"libvirt-3-storage","auto-read-only":true,\
"discard":"unmap"}' \
-blockdev '{"node-name":"libvirt-3-format","read-only":false,"driver":"raw",\
@@ -61,7 +61,7 @@ id=virtio-disk3 \
-object secret,id=libvirt-2-storage-auth-secret0,\
data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
--blockdev '{"driver":"rbd","pool":"pool","image":"image",\
+-blockdev '{"driver":"rbd","pool":"pool","namespace":"","image":"image",\
"server":[{"host":"mon1.example.org","port":"6321"},{"host":"mon2.example.org",\
"port":"6322"},{"host":"mon3.example.org","port":"6322"}],"user":"myname",\
"auth-client-required":["cephx","none"],\
@@ -71,7 +71,7 @@ keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
"file":"libvirt-2-storage"}' \
-device virtio-blk-pci,bus=pci.0,addr=0x6,drive=libvirt-2-format,\
id=virtio-disk4 \
--blockdev '{"driver":"rbd","pool":"pool","image":"image",\
+-blockdev '{"driver":"rbd","pool":"pool","namespace":"","image":"image",\
"server":[{"host":"::1","port":"6321"},{"host":"example.org","port":"6789"},\
{"host":"ffff:1234:567:abc::0f","port":"6322"},\
{"host":"2001:db8::ff00:42:8329","port":"6322"}],\
diff --git a/tests/qemuxml2argvdata/disk-network-source-auth.x86_64-latest.args b/tests/qemuxml2argvdata/disk-network-source-auth.x86_64-latest.args
index 0efbc386c3..73c01bc2bc 100644
--- a/tests/qemuxml2argvdata/disk-network-source-auth.x86_64-latest.args
+++ b/tests/qemuxml2argvdata/disk-network-source-auth.x86_64-latest.args
@@ -43,7 +43,7 @@ id=virtio-disk0,bootindex=1 \
-object secret,id=libvirt-2-storage-auth-secret0,\
data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
--blockdev '{"driver":"rbd","pool":"pool","image":"image",\
+-blockdev '{"driver":"rbd","pool":"pool","namespace":"","image":"image",\
"server":[{"host":"mon1.example.org","port":"6321"},{"host":"mon2.example.org",\
"port":"6322"},{"host":"mon3.example.org","port":"6322"}],"user":"myname",\
"auth-client-required":["cephx","none"],\
@@ -56,7 +56,7 @@ id=virtio-disk1 \
-object secret,id=libvirt-1-storage-auth-secret0,\
data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
--blockdev '{"driver":"rbd","pool":"pool","image":"image2",\
+-blockdev '{"driver":"rbd","pool":"pool","namespace":"","image":"image2",\
"server":[{"host":"mon1.example.org","port":"6321"},{"host":"mon2.example.org",\
"port":"6322"},{"host":"mon3.example.org","port":"6322"}],"user":"myname",\
"auth-client-required":["cephx","none"],\
diff --git a/tests/qemuxml2argvdata/luks-disks-source-qcow2.x86_64-latest.args b/tests/qemuxml2argvdata/luks-disks-source-qcow2.x86_64-latest.args
index c78d138fd9..7b5b5e32a4 100644
--- a/tests/qemuxml2argvdata/luks-disks-source-qcow2.x86_64-latest.args
+++ b/tests/qemuxml2argvdata/luks-disks-source-qcow2.x86_64-latest.args
@@ -78,7 +78,7 @@ id=virtio-disk3 \
-object secret,id=libvirt-3-format-encryption-secret0,\
data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
--blockdev '{"driver":"rbd","pool":"pool","image":"image",\
+-blockdev '{"driver":"rbd","pool":"pool","namespace":"","image":"image",\
"server":[{"host":"mon1.example.org","port":"6321"},{"host":"mon2.example.org",\
"port":"6322"},{"host":"mon3.example.org","port":"6322"}],\
"node-name":"libvirt-3-storage","auto-read-only":true,"discard":"unmap"}' \