]> xenbits.xensource.com Git - libvirt.git/commitdiff
vmx: handle shared folders formatting
authorJean-Baptiste Rouault <jean-baptiste.rouault@diateam.net>
Wed, 11 Jul 2012 10:16:34 +0000 (12:16 +0200)
committerMatthias Bolte <matthias.bolte@googlemail.com>
Sat, 21 Jul 2012 17:45:02 +0000 (19:45 +0200)
This patch adds support for generating vmx files with
shared folders enabled.

Update test suite accordingly.

src/vmx/vmx.c
src/vmx/vmx.h
tests/xml2vmxdata/xml2vmx-sharedfolder.vmx [new file with mode: 0644]
tests/xml2vmxdata/xml2vmx-sharedfolder.xml [new file with mode: 0644]
tests/xml2vmxtest.c

index 3f05b168dcbb9e8bd6c6ff8784f3831a02faa60b..e9131272f8e683d599ef9c311e1d80568a47e60b 100644 (file)
@@ -261,6 +261,29 @@ def->disks[0]...
 
 
 
+################################################################################
+## filesystems #################################################################
+
+                                        isolation.tools.hgfs.disable = "false"  # defaults to "true"
+
+def->nfss = 1                     <=>   sharedFolder.maxNum = "1"               # must match the number of shared folders
+
+                                        sharedFolder[0..n] -> <filesystem>
+
+def->fss[0]...                    <=>   sharedFolder0.present = "true"          # defaults to "false"
+                                        sharedFolder0.enabled = "true"          # defaults to "false"
+                                        sharedFolder0.expiration = "never"      # defaults to "never"
+                                        sharedFolder0.readAccess = "true"       # defaults to "false"
+->type = _FS_TYPE_MOUNT
+->fsdriver
+->accessmode
+->wrpolicy
+->src = <value>                   <=>   sharedFolder0.hostPath = "<value>"      # defaults to ?
+->dst = <value>                   <=>   sharedFolder0.guestName = "<value>"
+->readonly = <readonly>           <=>   sharedFolder0.writeAccess = "<value>"   # "true" -> <readonly> = 0, "false" -> <readonly> = 1
+
+
+
 ################################################################################
 ## nets ########################################################################
 
@@ -3138,7 +3161,16 @@ virVMXFormatConfig(virVMXContext *ctx, virCapsPtr caps, virDomainDefPtr def,
     }
 
     /* def:fss */
-    /* FIXME */
+    if (def->nfss > 0) {
+        virBufferAddLit(&buffer, "isolation.tools.hgfs.disable = \"false\"\n");
+        virBufferAsprintf(&buffer, "sharedFolder.maxNum = \"%d\"\n", def->nfss);
+    }
+
+    for (i = 0; i < def->nfss; ++i) {
+        if (virVMXFormatFileSystem(def->fss[i], i, &buffer) < 0) {
+            goto cleanup;
+        }
+    }
 
     /* def:nets */
     for (i = 0; i < def->nnets; ++i) {
@@ -3491,6 +3523,31 @@ virVMXFormatFloppy(virVMXContext *ctx, virDomainDiskDefPtr def,
 
 
 
+int
+virVMXFormatFileSystem(virDomainFSDefPtr def, int number, virBufferPtr buffer)
+{
+    if (def->type != VIR_DOMAIN_FS_TYPE_MOUNT) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                       _("Only '%s' filesystem type is supported"),
+                       virDomainFSTypeToString(VIR_DOMAIN_FS_TYPE_MOUNT));
+        return -1;
+    }
+
+    virBufferAsprintf(buffer, "sharedFolder%d.present = \"true\"\n", number);
+    virBufferAsprintf(buffer, "sharedFolder%d.enabled = \"true\"\n", number);
+    virBufferAsprintf(buffer, "sharedFolder%d.readAccess = \"true\"\n", number);
+    virBufferAsprintf(buffer, "sharedFolder%d.writeAccess = \"%s\"\n", number,
+                      def->readonly ? "false" : "true");
+    virBufferAsprintf(buffer, "sharedFolder%d.hostPath = \"%s\"\n", number,
+                      def->src);
+    virBufferAsprintf(buffer, "sharedFolder%d.guestName = \"%s\"\n", number,
+                      def->dst);
+
+    return 0;
+}
+
+
+
 int
 virVMXFormatEthernet(virDomainNetDefPtr def, int controller,
                      virBufferPtr buffer)
index 4d546607beebfc55f70fb16e2319125edad46992..64f5abce00a4839253785f802aa77343cfa93dcb 100644 (file)
@@ -120,6 +120,9 @@ int virVMXFormatCDROM(virVMXContext *ctx, virDomainDiskDefPtr def,
 int virVMXFormatFloppy(virVMXContext *ctx, virDomainDiskDefPtr def,
                        virBufferPtr buffer, bool floppy_present[2]);
 
+int virVMXFormatFileSystem(virDomainFSDefPtr def, int number,
+                           virBufferPtr buffer);
+
 int virVMXFormatEthernet(virDomainNetDefPtr def, int controller,
                          virBufferPtr buffer);
 
diff --git a/tests/xml2vmxdata/xml2vmx-sharedfolder.vmx b/tests/xml2vmxdata/xml2vmx-sharedfolder.vmx
new file mode 100644 (file)
index 0000000..15a322a
--- /dev/null
@@ -0,0 +1,18 @@
+.encoding = "UTF-8"
+config.version = "8"
+virtualHW.version = "4"
+guestOS = "other"
+uuid.bios = "56 4d 9b ef ac d9 b4 e0-c8 f0 ae a8 b9 10 35 15"
+displayName = "sharedFolder"
+memsize = "4"
+numvcpus = "1"
+floppy0.present = "false"
+floppy1.present = "false"
+isolation.tools.hgfs.disable = "false"
+sharedFolder.maxNum = "1"
+sharedFolder0.present = "true"
+sharedFolder0.enabled = "true"
+sharedFolder0.readAccess = "true"
+sharedFolder0.writeAccess = "true"
+sharedFolder0.hostPath = "/path/to/shared"
+sharedFolder0.guestName = "shared"
diff --git a/tests/xml2vmxdata/xml2vmx-sharedfolder.xml b/tests/xml2vmxdata/xml2vmx-sharedfolder.xml
new file mode 100644 (file)
index 0000000..2cc87d5
--- /dev/null
@@ -0,0 +1,14 @@
+<domain type='vmware'>
+  <name>sharedFolder</name>
+  <uuid>564d9bef-acd9-b4e0-c8f0-aea8b9103515</uuid>
+  <memory unit='KiB'>4096</memory>
+  <os>
+    <type>hvm</type>
+  </os>
+  <devices>
+    <filesystem type='mount'>
+      <source dir='/path/to/shared'/>
+      <target dir='shared'/>
+    </filesystem>
+  </devices>
+</domain>
index 60a24b2a6bb10b5389de62b5ce196aa8464b1b8b..451b1e4822765c8c922ff5208a44b8397a8e36bf 100644 (file)
@@ -255,6 +255,8 @@ mymain(void)
     DO_TEST("floppy-file", "floppy-file", 4);
     DO_TEST("floppy-device", "floppy-device", 4);
 
+    DO_TEST("sharedfolder", "sharedfolder", 4);
+
     DO_TEST("ethernet-e1000", "ethernet-e1000", 4);
     DO_TEST("ethernet-vmxnet2", "ethernet-vmxnet2", 4);