]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
parallels: apply config after VM creation
authorDmitry Guryanov <dguryanov@parallels.com>
Tue, 4 Dec 2012 13:43:12 +0000 (17:43 +0400)
committerDaniel Veillard <veillard@redhat.com>
Tue, 11 Dec 2012 08:26:32 +0000 (16:26 +0800)
New VM will have default values for all parameters, like
cpu number, we have to change its configuration as provided
by xml definition, given to parallelsDomainDefineXML.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
src/parallels/parallels_driver.c

index d7e83998813f6c5178850a645a2abd9756e100cd..76218dc16955095ed5f0491a18d028cfae58e822 100644 (file)
@@ -2013,20 +2013,6 @@ parallelsDomainDefineXML(virConnectPtr conn, const char *xml)
 
     if (dupVM == 1) {
         olddom = virDomainFindByUUID(&privconn->domains, def->uuid);
-        if (parallelsApplyChanges(conn, olddom, def) < 0) {
-            virDomainObjUnlock(olddom);
-            goto cleanup;
-        }
-        virDomainObjUnlock(olddom);
-
-        if (!(dom = virDomainAssignDef(privconn->caps,
-                                       &privconn->domains, def, false))) {
-            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                           _("Can't allocate domobj"));
-            goto cleanup;
-        }
-
-        def = NULL;
     } else {
         if (STREQ(def->os.type, "hvm")) {
             if (parallelsCreateVm(conn, def))
@@ -2041,8 +2027,8 @@ parallelsDomainDefineXML(virConnectPtr conn, const char *xml)
         }
         if (parallelsLoadDomains(privconn, def->name))
             goto cleanup;
-        dom = virDomainFindByName(&privconn->domains, def->name);
-        if (!dom) {
+        olddom = virDomainFindByName(&privconn->domains, def->name);
+        if (!olddom) {
             virReportError(VIR_ERR_INTERNAL_ERROR,
                            _("Domain for '%s' is not defined after creation"),
                            def->name ? def->name : _("(unnamed)"));
@@ -2050,6 +2036,21 @@ parallelsDomainDefineXML(virConnectPtr conn, const char *xml)
         }
     }
 
+    if (parallelsApplyChanges(conn, olddom, def) < 0) {
+        virDomainObjUnlock(olddom);
+        goto cleanup;
+    }
+    virDomainObjUnlock(olddom);
+
+    if (!(dom = virDomainAssignDef(privconn->caps,
+                                   &privconn->domains, def, false))) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("Can't allocate domobj"));
+        goto cleanup;
+    }
+
+    def = NULL;
+
     ret = virGetDomain(conn, dom->def->name, dom->def->uuid);
     if (ret)
         ret->id = dom->def->id;