]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: monitor: Add APIs for 'blockdev-create'
authorPeter Krempa <pkrempa@redhat.com>
Mon, 3 Sep 2018 12:45:16 +0000 (14:45 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 18 Jul 2019 15:59:33 +0000 (17:59 +0200)
The 'blockdev-create' starts a job which creates a storage volume using
the given protocol or formats an existing (added) volume with one of the
supported storage formats.

This patch adds the monitor interaction bits.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_monitor.c
src/qemu/qemu_monitor.h
src/qemu/qemu_monitor_json.c
src/qemu/qemu_monitor_json.h

index 433fe7e60eb8b72f74516063f268ed1e33e0944c..5ad66d1dcab31a81f330caf6140f03fb3e7e27ff 100644 (file)
@@ -4419,6 +4419,36 @@ qemuMonitorSetWatchdogAction(qemuMonitorPtr mon,
 }
 
 
+/**
+ * qemuMonitorBlockdevCreate:
+ * @mon: monitor object
+ * @jobname: name of the job
+ * @props: JSON object describing the blockdev to add
+ *
+ * Instructs qemu to create/format a new stroage or format layer. Note that
+ * the job does not add the created/formatted image into qemu and
+ * qemuMonitorBlockdevAdd needs to be called separately with corresponding
+ * arguments. Note that the arguments for creating and adding are different.
+ *
+ * Note that @props is always consumed by this function and should not be
+ * accessed after calling this function.
+ */
+int
+qemuMonitorBlockdevCreate(qemuMonitorPtr mon,
+                          const char *jobname,
+                          virJSONValuePtr props)
+{
+    VIR_DEBUG("jobname=%s props=%p", jobname, props);
+
+    QEMU_CHECK_MONITOR_GOTO(mon, error);
+
+    return qemuMonitorJSONBlockdevCreate(mon, jobname, props);
+
+ error:
+    virJSONValueFree(props);
+    return -1;
+}
+
 /**
  * qemuMonitorBlockdevAdd:
  * @mon: monitor object
index fa8f8a6e472422610da8d5c0fcd1b3cf3949c9e7..88c9702530bdf4be6188abb20e405a1a15a09cd3 100644 (file)
@@ -1290,6 +1290,10 @@ virJSONValuePtr qemuMonitorQueryNamedBlockNodes(qemuMonitorPtr mon);
 int qemuMonitorSetWatchdogAction(qemuMonitorPtr mon,
                                  const char *action);
 
+int qemuMonitorBlockdevCreate(qemuMonitorPtr mon,
+                              const char *jobname,
+                              virJSONValuePtr props);
+
 int qemuMonitorBlockdevAdd(qemuMonitorPtr mon,
                            virJSONValuePtr props);
 
index 73eb0f77cb6e2076a820f0af255a0694fc835ac6..f19dced0143330b08e3410c0ddf6b8b8d9f811a0 100644 (file)
@@ -8638,6 +8638,32 @@ qemuMonitorJSONSetWatchdogAction(qemuMonitorPtr mon,
 }
 
 
+int
+qemuMonitorJSONBlockdevCreate(qemuMonitorPtr mon,
+                              const char *jobname,
+                              virJSONValuePtr props)
+{
+    VIR_AUTOPTR(virJSONValue) cmd = NULL;
+    VIR_AUTOPTR(virJSONValue) reply = NULL;
+
+    cmd = qemuMonitorJSONMakeCommand("blockdev-create",
+                                     "s:job-id", jobname,
+                                     "a:options", &props,
+                                     NULL);
+    virJSONValueFree(props);
+    if (!cmd)
+        return -1;
+
+    if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
+        return -1;
+
+    if (qemuMonitorJSONCheckError(cmd, reply) < 0)
+        return -1;
+
+    return 0;
+}
+
+
 int
 qemuMonitorJSONBlockdevAdd(qemuMonitorPtr mon,
                            virJSONValuePtr props)
index 89eb554f1d1c54941540028dffac616772f9d3bb..61e64e831b3d4851737734a109c6522a95e0d10d 100644 (file)
@@ -581,6 +581,11 @@ int qemuMonitorJSONSetWatchdogAction(qemuMonitorPtr mon,
                                      const char *action)
     ATTRIBUTE_NONNULL(1);
 
+int qemuMonitorJSONBlockdevCreate(qemuMonitorPtr mon,
+                                  const char *jobname,
+                                  virJSONValuePtr props)
+    ATTRIBUTE_NONNULL(1);
+
 int qemuMonitorJSONBlockdevAdd(qemuMonitorPtr mon,
                                virJSONValuePtr props)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);