]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
parallels: implement containers creation
authorDmitry Guryanov <dguryanov@parallels.com>
Wed, 12 Sep 2012 12:40:54 +0000 (16:40 +0400)
committerDaniel Veillard <veillard@redhat.com>
Thu, 13 Sep 2012 13:19:58 +0000 (21:19 +0800)
Add separate function parallelsCreateCt, which creates container.
Also add example xml configuration domain-parallels-ct-simple.xml.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
src/parallels/parallels_driver.c
tests/domainschemadata/domain-parallels-ct-simple.xml [new file with mode: 0644]

index 3bfd3f2e0e51758edc28e0d0dbac03a45f1f9c3e..52b12b597cc1be6a8b299810f25525ba8b038014 100644 (file)
@@ -1663,6 +1663,36 @@ parallelsCreateVm(virConnectPtr conn, virDomainDefPtr def)
     return -1;
 }
 
+static int
+parallelsCreateCt(virConnectPtr conn ATTRIBUTE_UNUSED, virDomainDefPtr def)
+{
+    char uuidstr[VIR_UUID_STRING_BUFLEN];
+
+    virUUIDFormat(def->uuid, uuidstr);
+
+    if (def->nfss != 1 ||
+        def->fss[0]->type != VIR_DOMAIN_FS_TYPE_TEMPLATE) {
+
+        virReportError(VIR_ERR_INVALID_ARG, "%s",
+                       _("There must be only 1 template FS for "
+                         "container creation"));
+        goto error;
+    }
+
+    if (parallelsCmdRun(PRLCTL, "create", def->name, "--vmtype", "ct",
+                        "--uuid", uuidstr,
+                        "--ostemplate", def->fss[0]->src, NULL) < 0)
+        goto error;
+
+    if (parallelsCmdRun(PRLCTL, "set", def->name, "--vnc-mode", "auto", NULL) < 0)
+        goto error;
+
+    return 0;
+
+error:
+    return -1;
+}
+
 static virDomainPtr
 parallelsDomainDefineXML(virConnectPtr conn, const char *xml)
 {
@@ -1703,8 +1733,17 @@ parallelsDomainDefineXML(virConnectPtr conn, const char *xml)
 
         def = NULL;
     } else {
-        if (parallelsCreateVm(conn, def))
+        if (STREQ(def->os.type, "hvm")) {
+            if (parallelsCreateVm(conn, def))
+                goto cleanup;
+        } else if (STREQ(def->os.type, "exe")) {
+            if (parallelsCreateCt(conn, def))
+                goto cleanup;
+        } else {
+            virReportError(VIR_ERR_INVALID_ARG,
+                           _("Unsupported OS type: %s"), def->os.type);
             goto cleanup;
+        }
         if (parallelsLoadDomains(privconn, def->name))
             goto cleanup;
         dom = virDomainFindByName(&privconn->domains, def->name);
diff --git a/tests/domainschemadata/domain-parallels-ct-simple.xml b/tests/domainschemadata/domain-parallels-ct-simple.xml
new file mode 100644 (file)
index 0000000..a2b87ce
--- /dev/null
@@ -0,0 +1,27 @@
+<domain type='parallels'>
+  <name>1010</name>
+  <uuid>88576506-d611-41c2-b6b6-c9043704a0dd</uuid>
+  <description></description>
+  <memory unit='KiB'>262144</memory>
+  <currentMemory unit='KiB'>262144</currentMemory>
+  <vcpu placement='static'>8</vcpu>
+  <os>
+      <type arch='x86_64'>exe</type>
+      <init>/sbin/init</init>
+  </os>
+  <clock offset='utc'/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>destroy</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <filesystem type='template'>
+        <source name='centos-6-x86_64'/>
+        <target dir='/'/>
+    </filesystem>
+    <video>
+      <model type='vga' vram='16777216' heads='1'>
+        <acceleration accel3d='no' accel2d='no'/>
+      </model>
+    </video>
+  </devices>
+</domain>