]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Add infrastructure for 'block-export-add' to export NBD
authorPeter Krempa <pkrempa@redhat.com>
Wed, 14 Oct 2020 09:33:06 +0000 (11:33 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 19 Oct 2020 11:36:58 +0000 (13:36 +0200)
Add the monitor code, corresponding generator of properties for NBD and
tests validating it against the schema.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_block.c
src/qemu/qemu_block.h
src/qemu/qemu_monitor.c
src/qemu/qemu_monitor.h
src/qemu/qemu_monitor_json.c
src/qemu/qemu_monitor_json.h
tests/qemumonitorjsontest.c

index 0be612eb1fa19190c8dd6d52fefb76b9bce84a81..85a0320520eb3f8a5e8754819431650707593075 100644 (file)
@@ -3365,6 +3365,31 @@ qemuBlockUpdateRelativeBacking(virDomainObjPtr vm,
 }
 
 
+virJSONValuePtr
+qemuBlockExportGetNBDProps(const char *nodename,
+                           const char *exportname,
+                           bool writable,
+                           const char *bitmap)
+{
+    g_autofree char *exportid = NULL;
+    virJSONValuePtr ret = NULL;
+
+    exportid = g_strdup_printf("libvirt-nbd-%s", nodename);
+
+    if (virJSONValueObjectCreate(&ret,
+                                 "s:type", "nbd",
+                                 "s:id", exportid,
+                                 "s:node-name", nodename,
+                                 "b:writable", writable,
+                                 "s:name", exportname,
+                                 "S:bitmap", bitmap,
+                                 NULL) < 0)
+        return NULL;
+
+    return ret;
+}
+
+
 /**
  * qemuBlockExportAddNBD:
  * @vm: domain object
index 0fc95fa6f600d2fa25e2313b6aad6f6262c83474..64a95951f7464fe4af5c55f35000da6962634a3c 100644 (file)
@@ -277,6 +277,13 @@ qemuBlockUpdateRelativeBacking(virDomainObjPtr vm,
                                virStorageSourcePtr src,
                                virStorageSourcePtr topsrc);
 
+virJSONValuePtr
+qemuBlockExportGetNBDProps(const char *nodename,
+                           const char *exportname,
+                           bool writable,
+                           const char *bitmap);
+
+
 int
 qemuBlockExportAddNBD(virDomainObjPtr vm,
                       const char *drivealias,
index 8c991fefbbbb6035760627bd4fb41b32da497536..834e1c9e8fbc6cb49c36be86eae75d937172e3a1 100644 (file)
@@ -3925,6 +3925,16 @@ qemuMonitorNBDServerStop(qemuMonitorPtr mon)
 }
 
 
+int
+qemuMonitorBlockExportAdd(qemuMonitorPtr mon,
+                          virJSONValuePtr *props)
+{
+    QEMU_CHECK_MONITOR(mon);
+
+    return qemuMonitorJSONBlockExportAdd(mon, props);
+}
+
+
 int
 qemuMonitorGetTPMModels(qemuMonitorPtr mon,
                             char ***tpmmodels)
index a744c8975bf57d25ab7e7235fb8b69e85106e559..f2c632a7ac5d632ce1c05a79bc5e51b0ca4245fc 100644 (file)
@@ -1232,6 +1232,10 @@ int qemuMonitorNBDServerAdd(qemuMonitorPtr mon,
                             bool writable,
                             const char *bitmap);
 int qemuMonitorNBDServerStop(qemuMonitorPtr);
+
+int qemuMonitorBlockExportAdd(qemuMonitorPtr mon,
+                              virJSONValuePtr *props);
+
 int qemuMonitorGetTPMModels(qemuMonitorPtr mon,
                             char ***tpmmodels);
 
index 26ac499fc566a507de74e68b41024b931f117b7f..e88e6aebaf88cef6f02acec660bf1e9f45237cec 100644 (file)
@@ -7284,6 +7284,27 @@ qemuMonitorJSONNBDServerStop(qemuMonitorPtr mon)
 }
 
 
+int
+qemuMonitorJSONBlockExportAdd(qemuMonitorPtr mon,
+                              virJSONValuePtr *props)
+{
+    g_autoptr(virJSONValue) cmd = NULL;
+    g_autoptr(virJSONValue) reply = NULL;
+    virJSONValuePtr pr = g_steal_pointer(props);
+
+    if (!(cmd = qemuMonitorJSONMakeCommandInternal("block-export-add", pr)))
+        return -1;
+
+    if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
+        return -1;
+
+    if (qemuMonitorJSONCheckError(cmd, reply) < 0)
+        return -1;
+
+    return 0;
+}
+
+
 static int
 qemuMonitorJSONGetStringArray(qemuMonitorPtr mon, const char *qmpCmd,
                               char ***array)
index 098ab857be6f58606aa1857ac91a7cfd6035896f..e9107eaade32183f088822c3c6a44591957e707d 100644 (file)
@@ -505,6 +505,10 @@ int qemuMonitorJSONNBDServerAdd(qemuMonitorPtr mon,
                                 bool writable,
                                 const char *bitmap);
 int qemuMonitorJSONNBDServerStop(qemuMonitorPtr mon);
+
+int qemuMonitorJSONBlockExportAdd(qemuMonitorPtr mon,
+                                  virJSONValuePtr *props);
+
 int qemuMonitorJSONGetTPMModels(qemuMonitorPtr mon,
                                 char ***tpmmodels)
     ATTRIBUTE_NONNULL(2);
index a6e14a1b009fea749b568213de46ec0bc5f24f40..d65af6fadceb9fa21078bd94f8f80987f650c9ef 100644 (file)
@@ -3046,6 +3046,28 @@ testQemuMonitorJSONTransaction(const void *opaque)
 }
 
 
+static int
+testQemuMonitorJSONBlockExportAdd(const void *opaque)
+{
+    const testGenericData *data = opaque;
+    g_autoptr(qemuMonitorTest) test = NULL;
+    g_autoptr(virJSONValue) nbddata = NULL;
+
+    if (!(test = qemuMonitorTestNewSchema(data->xmlopt, data->schema)))
+        return -1;
+
+    if (!(nbddata = qemuBlockExportGetNBDProps("nodename", "exportname", true, "bitmapname")))
+        return -1;
+
+    if (qemuMonitorTestAddItem(test, "block-export-add", "{\"return\":{}}") < 0)
+        return -1;
+
+    if (qemuMonitorJSONBlockExportAdd(qemuMonitorTestGetMonitor(test), &nbddata) < 0)
+        return -1;
+
+    return 0;
+}
+
 static int
 testQemuMonitorJSONqemuMonitorJSONGetCPUModelComparison(const void *opaque)
 {
@@ -3243,6 +3265,7 @@ mymain(void)
     DO_TEST(GetNonExistingCPUData);
     DO_TEST(GetIOThreads);
     DO_TEST(Transaction);
+    DO_TEST(BlockExportAdd);
     DO_TEST_SIMPLE("qmp_capabilities", qemuMonitorJSONSetCapabilities);
     DO_TEST_SIMPLE("system_powerdown", qemuMonitorJSONSystemPowerdown);
     DO_TEST_SIMPLE("system_reset", qemuMonitorJSONSystemReset);