]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemuProcessCreatePretendCmd: Split up preparation and command building
authorPeter Krempa <pkrempa@redhat.com>
Thu, 15 Oct 2020 12:39:16 +0000 (14:39 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 20 Oct 2020 13:08:22 +0000 (15:08 +0200)
Host preparation steps which are deliberately skipped when
pretend-creating a commandline are normally executed after VM object
preparation. In the test code we are faking some of the host
preparation steps, but we were doing that prior to the call to
qemuProcessPrepareDomain embedded in qemuProcessCreatePretendCmd.

By splitting up qemuProcessCreatePretendCmd into two functions we can
ensure that the ordering of the prepare steps stays consistent.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_driver.c
src/qemu/qemu_process.c
src/qemu/qemu_process.h
tests/qemuxml2argvtest.c

index 825bdd9119aff59286a6243893782fd86be31038..f07a27d52519ad64e3f16a4deff5ffd2e013254f 100644 (file)
@@ -6451,9 +6451,12 @@ static char *qemuConnectDomainXMLToNative(virConnectPtr conn,
         vm->def->nets[i] = newNet;
     }
 
-    if (!(cmd = qemuProcessCreatePretendCmd(driver, vm, NULL,
-                                            qemuCheckFips(), true, false,
-                                            VIR_QEMU_PROCESS_START_COLD)))
+    if (qemuProcessCreatePretendCmdPrepare(driver, vm, NULL, true,
+                                           VIR_QEMU_PROCESS_START_COLD) < 0)
+        goto cleanup;
+
+    if (!(cmd = qemuProcessCreatePretendCmdBuild(driver, vm, NULL,
+                                                 qemuCheckFips(), true, false)))
         goto cleanup;
 
     ret = virCommandToString(cmd, false);
index 6422881a3349a6b0cf6f52338933243720f9582b..1f504011cbcb851f96b2ea85280cc040a350f56a 100644 (file)
@@ -7290,35 +7290,45 @@ qemuProcessStart(virConnectPtr conn,
 }
 
 
-virCommandPtr
-qemuProcessCreatePretendCmd(virQEMUDriverPtr driver,
-                            virDomainObjPtr vm,
-                            const char *migrateURI,
-                            bool enableFips,
-                            bool standalone,
-                            bool jsonPropsValidation,
-                            unsigned int flags)
+int
+qemuProcessCreatePretendCmdPrepare(virQEMUDriverPtr driver,
+                                   virDomainObjPtr vm,
+                                   const char *migrateURI,
+                                   bool standalone,
+                                   unsigned int flags)
 {
-    unsigned int buildflags = 0;
-
     virCheckFlags(VIR_QEMU_PROCESS_START_COLD |
                   VIR_QEMU_PROCESS_START_PAUSED |
-                  VIR_QEMU_PROCESS_START_AUTODESTROY, NULL);
+                  VIR_QEMU_PROCESS_START_AUTODESTROY, -1);
 
     flags |= VIR_QEMU_PROCESS_START_PRETEND;
     flags |= VIR_QEMU_PROCESS_START_NEW;
     if (standalone)
         flags |= VIR_QEMU_PROCESS_START_STANDALONE;
 
-    if (jsonPropsValidation)
-        buildflags = QEMU_BUILD_COMMANDLINE_VALIDATE_KEEP_JSON;
-
     if (qemuProcessInit(driver, vm, NULL, QEMU_ASYNC_JOB_NONE,
                         !!migrateURI, flags) < 0)
-        return NULL;
+        return -1;
 
     if (qemuProcessPrepareDomain(driver, vm, flags) < 0)
-        return NULL;
+        return -1;
+
+    return 0;
+}
+
+
+virCommandPtr
+qemuProcessCreatePretendCmdBuild(virQEMUDriverPtr driver,
+                                 virDomainObjPtr vm,
+                                 const char *migrateURI,
+                                 bool enableFips,
+                                 bool standalone,
+                                 bool jsonPropsValidation)
+{
+    unsigned int buildflags = 0;
+
+    if (jsonPropsValidation)
+        buildflags = QEMU_BUILD_COMMANDLINE_VALIDATE_KEEP_JSON;
 
     VIR_DEBUG("Building emulator command line");
     return qemuBuildCommandLine(driver,
index dbd989c32185f96313fec303dc6283c66ca36432..830b2b23d6d8651c50d2a0cc1c77779e1c1a8293 100644 (file)
@@ -96,13 +96,18 @@ int qemuProcessStart(virConnectPtr conn,
                      virNetDevVPortProfileOp vmop,
                      unsigned int flags);
 
-virCommandPtr qemuProcessCreatePretendCmd(virQEMUDriverPtr driver,
-                                          virDomainObjPtr vm,
-                                          const char *migrateURI,
-                                          bool enableFips,
-                                          bool standalone,
-                                          bool jsonPropsValidation,
-                                          unsigned int flags);
+int qemuProcessCreatePretendCmdPrepare(virQEMUDriverPtr driver,
+                                       virDomainObjPtr vm,
+                                       const char *migrateURI,
+                                       bool standalone,
+                                       unsigned int flags);
+
+virCommandPtr qemuProcessCreatePretendCmdBuild(virQEMUDriverPtr driver,
+                                               virDomainObjPtr vm,
+                                               const char *migrateURI,
+                                               bool enableFips,
+                                               bool standalone,
+                                               bool jsonPropsValidation);
 
 int qemuProcessInit(virQEMUDriverPtr driver,
                     virDomainObjPtr vm,
index 092e80e9c0d800b756a50018f616983e3841646c..8cab2da6268c3b645ed81d9385693380c1d15dec 100644 (file)
@@ -401,6 +401,10 @@ testCompareXMLToArgvCreateArgs(virQEMUDriverPtr drv,
 {
     size_t i;
 
+    if (qemuProcessCreatePretendCmdPrepare(drv, vm, migrateURI, false,
+                                           VIR_QEMU_PROCESS_START_COLD) < 0)
+        return NULL;
+
     for (i = 0; i < vm->def->nhostdevs; i++) {
         virDomainHostdevDefPtr hostdev = vm->def->hostdevs[i];
 
@@ -466,10 +470,9 @@ testCompareXMLToArgvCreateArgs(virQEMUDriverPtr drv,
         }
     }
 
-    return qemuProcessCreatePretendCmd(drv, vm, migrateURI,
-                                       (flags & FLAG_FIPS), false,
-                                       jsonPropsValidation,
-                                       VIR_QEMU_PROCESS_START_COLD);
+    return qemuProcessCreatePretendCmdBuild(drv, vm, migrateURI,
+                                            (flags & FLAG_FIPS), false,
+                                            jsonPropsValidation);
 }