[libvirt] [PATCH] parallels: implement containers creation

Dmitry Guryanov dguryanov at parallels.com
Wed Sep 12 12:40:54 UTC 2012


Add separate function parallelsCreateCt, which creates container.
Also add example xml configuration domain-parallels-ct-simple.xml.

Signed-off-by: Dmitry Guryanov <dguryanov at parallels.com>
---
 src/parallels/parallels_driver.c                   |   41 +++++++++++++++++++-
 .../domain-parallels-ct-simple.xml                 |   27 +++++++++++++
 2 files changed, 67 insertions(+), 1 deletions(-)
 create mode 100644 tests/domainschemadata/domain-parallels-ct-simple.xml

diff --git a/src/parallels/parallels_driver.c b/src/parallels/parallels_driver.c
index 9eb2526..0dd13fe 100644
--- a/src/parallels/parallels_driver.c
+++ b/src/parallels/parallels_driver.c
@@ -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
index 0000000..a2b87ce
--- /dev/null
+++ b/tests/domainschemadata/domain-parallels-ct-simple.xml
@@ -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>
-- 
1.7.1




More information about the libvir-list mailing list