]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: hotplug: Refactor 'secret' props formatting to qemuMonitorCreateObjectProps
authorPeter Krempa <pkrempa@redhat.com>
Tue, 22 May 2018 05:38:22 +0000 (07:38 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 5 Jun 2018 06:13:59 +0000 (08:13 +0200)
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_command.c
src/qemu/qemu_hotplug.c
src/qemu/qemu_hotplug.h
src/qemu/qemu_migration_params.c

index 76a35237560c0b964d3cd167793d440b968eedb6..96e762a9e8a1255a5894923dc50107a1bd8c6470 100644 (file)
@@ -511,18 +511,14 @@ qemuBuildSecretInfoProps(qemuDomainSecretInfoPtr secinfo,
     if (!(keyid = qemuDomainGetMasterKeyAlias()))
         return -1;
 
-    if (virJSONValueObjectCreate(propsret,
-                                 "s:data", secinfo->s.aes.ciphertext,
-                                 "s:keyid", keyid,
-                                 "s:iv", secinfo->s.aes.iv,
-                                 "s:format", "base64", NULL) < 0)
-        goto cleanup;
-
-    ret = 0;
+    ret = qemuMonitorCreateObjectProps(propsret,
+                                       "secret", secinfo->s.aes.alias,
+                                       "s:data", secinfo->s.aes.ciphertext,
+                                       "s:keyid", keyid,
+                                       "s:iv", secinfo->s.aes.iv,
+                                       "s:format", "base64", NULL);
 
- cleanup:
     VIR_FREE(keyid);
-
     return ret;
 }
 
@@ -543,25 +539,24 @@ static int
 qemuBuildObjectSecretCommandLine(virCommandPtr cmd,
                                  qemuDomainSecretInfoPtr secinfo)
 {
+    virBuffer buf = VIR_BUFFER_INITIALIZER;
     int ret = -1;
     virJSONValuePtr props = NULL;
-    char *tmp = NULL;
 
     if (qemuBuildSecretInfoProps(secinfo, &props) < 0)
         return -1;
 
-    if (!(tmp = virQEMUBuildObjectCommandlineFromJSONType("secret",
-                                                          secinfo->s.aes.alias,
-                                                          props)))
+    if (virQEMUBuildObjectCommandlineFromJSON(&buf, props) < 0)
         goto cleanup;
 
-    virCommandAddArgList(cmd, "-object", tmp, NULL);
-    ret = 0;
+    virCommandAddArg(cmd, "-object");
+    virCommandAddArgBuffer(cmd, &buf);
+
+    ret  = 0;
 
  cleanup:
+    virBufferFreeAndReset(&buf);
     virJSONValueFree(props);
-    VIR_FREE(tmp);
-
     return ret;
 }
 
index 6c895561b0cc515e091bb90a9808e1b870988d23..2be08ff90a042f6c98ef2d2aa01c919029680df1 100644 (file)
@@ -171,7 +171,7 @@ qemuDomainAddDiskSrcTLSObject(virQEMUDriverPtr driver,
         goto cleanup;
 
     if (qemuDomainAddTLSObjects(driver, vm, QEMU_ASYNC_JOB_NONE,
-                                NULL, NULL, &tlsProps) < 0)
+                                NULL, &tlsProps) < 0)
         goto cleanup;
 
     ret = 0;
@@ -423,9 +423,9 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver,
     char *drivestr = NULL;
     char *drivealias = NULL;
     char *prmgrAlias = NULL;
+    char *encobjAlias = NULL;
+    char *secobjAlias = NULL;
     bool driveAdded = false;
-    bool secobjAdded = false;
-    bool encobjAdded = false;
     bool prdStarted = false;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
     virJSONValuePtr secobjProps = NULL;
@@ -487,23 +487,13 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver,
 
     qemuDomainObjEnterMonitor(driver, vm);
 
-    if (secobjProps) {
-        rv = qemuMonitorAddObjectType(priv->mon, "secret", secinfo->s.aes.alias,
-                                      secobjProps);
-        secobjProps = NULL; /* qemuMonitorAddObjectType consumes */
-        if (rv < 0)
-            goto exit_monitor;
-        secobjAdded = true;
-    }
+    if (secobjProps &&
+        qemuMonitorAddObject(priv->mon, &secobjProps, &secobjAlias) < 0)
+        goto exit_monitor;
 
-    if (encobjProps) {
-        rv = qemuMonitorAddObjectType(priv->mon, "secret", encinfo->s.aes.alias,
-                                      encobjProps);
-        encobjProps = NULL; /* qemuMonitorAddObjectType consumes */
-        if (rv < 0)
-            goto exit_monitor;
-        encobjAdded = true;
-    }
+    if (encobjProps &&
+        qemuMonitorAddObject(priv->mon, &encobjProps, &encobjAlias) < 0)
+        goto exit_monitor;
 
     if (prmgrProps &&
         qemuMonitorAddObject(priv->mon, &prmgrProps, &prmgrAlias) < 0)
@@ -532,6 +522,8 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver,
     virJSONValueFree(secobjProps);
     qemuDomainSecretDiskDestroy(disk);
     VIR_FREE(prmgrAlias);
+    VIR_FREE(secobjAlias);
+    VIR_FREE(encobjAlias);
     VIR_FREE(drivealias);
     VIR_FREE(drivestr);
     VIR_FREE(devstr);
@@ -544,10 +536,10 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver,
         VIR_WARN("Unable to remove drive %s (%s) after failed "
                  "qemuMonitorAddDevice", drivealias, drivestr);
     }
-    if (secobjAdded)
-        ignore_value(qemuMonitorDelObject(priv->mon, secinfo->s.aes.alias));
-    if (encobjAdded)
-        ignore_value(qemuMonitorDelObject(priv->mon, encinfo->s.aes.alias));
+    if (secobjAlias)
+        ignore_value(qemuMonitorDelObject(priv->mon, secobjAlias));
+    if (encobjAlias)
+        ignore_value(qemuMonitorDelObject(priv->mon, encobjAlias));
     if (prmgrAlias)
         ignore_value(qemuMonitorDelObject(priv->mon, prmgrAlias));
     if (qemuDomainObjExitMonitor(driver, vm) < 0)
@@ -1445,32 +1437,29 @@ int
 qemuDomainAddTLSObjects(virQEMUDriverPtr driver,
                         virDomainObjPtr vm,
                         qemuDomainAsyncJob asyncJob,
-                        const char *secAlias,
                         virJSONValuePtr *secProps,
                         virJSONValuePtr *tlsProps)
 {
     qemuDomainObjPrivatePtr priv = vm->privateData;
-    int rc;
     virErrorPtr orig_err;
+    char *secAlias = NULL;
 
-    if (!tlsProps && !secAlias)
+    if (!tlsProps && !secProps)
         return 0;
 
     if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
         return -1;
 
-    if (secAlias) {
-        rc = qemuMonitorAddObjectType(priv->mon, "secret",
-                                      secAlias, *secProps);
-        *secProps = NULL; /* qemuMonitorAddObjectType consumes */
-        if (rc < 0)
-            goto error;
-    }
+    if (secProps &&
+        qemuMonitorAddObject(priv->mon, secProps, &secAlias) < 0)
+        goto error;
 
     if (tlsProps &&
         qemuMonitorAddObject(priv->mon, tlsProps, NULL) < 0)
         goto error;
 
+    VIR_FREE(secAlias);
+
     return qemuDomainObjExitMonitor(driver, vm);
 
  error:
@@ -1478,6 +1467,7 @@ qemuDomainAddTLSObjects(virQEMUDriverPtr driver,
     ignore_value(qemuDomainObjExitMonitor(driver, vm));
     virErrorRestore(&orig_err);
     qemuDomainDelTLSObjects(driver, vm, asyncJob, secAlias, NULL);
+    VIR_FREE(secAlias);
 
     return -1;
 }
@@ -1557,7 +1547,7 @@ qemuDomainAddChardevTLSObjects(virQEMUDriverPtr driver,
     dev->data.tcp.tlscreds = true;
 
     if (qemuDomainAddTLSObjects(driver, vm, QEMU_ASYNC_JOB_NONE,
-                                *secAlias, &secProps, &tlsProps) < 0)
+                                &secProps, &tlsProps) < 0)
         goto cleanup;
 
     ret = 0;
@@ -2305,18 +2295,17 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriverPtr driver,
                                virDomainHostdevDefPtr hostdev)
 {
     size_t i;
-    int rv;
     int ret = -1;
     qemuDomainObjPrivatePtr priv = vm->privateData;
     virErrorPtr orig_err;
     char *devstr = NULL;
     char *drvstr = NULL;
     char *drivealias = NULL;
+    char *secobjAlias = NULL;
     bool teardowncgroup = false;
     bool teardownlabel = false;
     bool teardowndevice = false;
     bool driveAdded = false;
-    bool secobjAdded = false;
     virJSONValuePtr secobjProps = NULL;
     virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi;
     qemuDomainSecretInfoPtr secinfo = NULL;
@@ -2385,14 +2374,9 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriverPtr driver,
 
     qemuDomainObjEnterMonitor(driver, vm);
 
-    if (secobjProps) {
-        rv = qemuMonitorAddObjectType(priv->mon, "secret", secinfo->s.aes.alias,
-                                      secobjProps);
-        secobjProps = NULL; /* qemuMonitorAddObjectType consumes */
-        if (rv < 0)
-            goto exit_monitor;
-        secobjAdded = true;
-    }
+    if (secobjProps &&
+        qemuMonitorAddObject(priv->mon, &secobjProps, &secobjAlias) < 0)
+        goto exit_monitor;
 
     if (qemuMonitorAddDrive(priv->mon, drvstr) < 0)
         goto exit_monitor;
@@ -2424,6 +2408,7 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriverPtr driver,
     }
     qemuDomainSecretHostdevDestroy(hostdev);
     virJSONValueFree(secobjProps);
+    VIR_FREE(secobjAlias);
     VIR_FREE(drivealias);
     VIR_FREE(drvstr);
     VIR_FREE(devstr);
@@ -2436,8 +2421,8 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriverPtr driver,
                  "qemuMonitorAddDevice",
                  drvstr, devstr);
     }
-    if (secobjAdded)
-        ignore_value(qemuMonitorDelObject(priv->mon, secinfo->s.aes.alias));
+    if (secobjAlias)
+        ignore_value(qemuMonitorDelObject(priv->mon, secobjAlias));
     ignore_value(qemuDomainObjExitMonitor(driver, vm));
     virErrorRestore(&orig_err);
 
index 70735aa7a3a935164fbec9dbd72a3848a814ef81..0297e42a9825f77adb431c235adae76e0340e584 100644 (file)
@@ -43,7 +43,6 @@ void qemuDomainDelTLSObjects(virQEMUDriverPtr driver,
 int qemuDomainAddTLSObjects(virQEMUDriverPtr driver,
                             virDomainObjPtr vm,
                             qemuDomainAsyncJob asyncJob,
-                            const char *secAlias,
                             virJSONValuePtr *secProps,
                             virJSONValuePtr *tlsProps);
 
index d7c1ee6339596123a8e7200f13731e3d5fe673f7..db2fbe084af50c610ba4bfb37cf132802243ff0b 100644 (file)
@@ -871,8 +871,7 @@ qemuMigrationParamsEnableTLS(virQEMUDriverPtr driver,
      * some other error path between now and perform . */
     qemuDomainDelTLSObjects(driver, vm, asyncJob, secAlias, *tlsAlias);
 
-    if (qemuDomainAddTLSObjects(driver, vm, asyncJob, secAlias, &secProps,
-                                &tlsProps) < 0)
+    if (qemuDomainAddTLSObjects(driver, vm, asyncJob, &secProps, &tlsProps) < 0)
         goto error;
 
     if (qemuMigrationParamsSetString(migParams,