]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
bhyve: add volumes support
authorRoman Bogorodskiy <bogorodskiy@gmail.com>
Thu, 14 Aug 2014 16:15:57 +0000 (20:15 +0400)
committerRoman Bogorodskiy <bogorodskiy@gmail.com>
Tue, 19 Aug 2014 16:50:22 +0000 (20:50 +0400)
Update bhyveBuildDiskArgStr to support volumes:

 - Make virBhyveProcessBuildBhyveCmd and
   virBhyveProcessBuildLoadCmd take virConnectPtr as the
   first argument instead of bhyveConnPtr as virConnectPtr is
   needed for virStorageTranslateDiskSourcePool,
 - Add virStorageTranslateDiskSourcePool call to
   virBhyveProcessBuildBhyveCmd and
   virBhyveProcessBuildLoadCmd,
 - Allow disks of type VIR_STORAGE_TYPE_VOLUME

src/bhyve/bhyve_command.c
src/bhyve/bhyve_command.h
src/bhyve/bhyve_driver.c
src/bhyve/bhyve_process.c
tests/Makefile.am
tests/bhyvexml2argvtest.c

index e2940e8c024958ea39a3684b23c2a2982f880546..94829e735df2a0d01ccba09daa18d326b87e237a 100644 (file)
@@ -33,6 +33,7 @@
 #include "virnetdev.h"
 #include "virnetdevbridge.h"
 #include "virnetdevtap.h"
+#include "storage/storage_driver.h"
 
 #define VIR_FROM_THIS VIR_FROM_BHYVE
 
@@ -184,7 +185,8 @@ bhyveBuildDiskArgStr(const virDomainDef *def ATTRIBUTE_UNUSED,
         return -1;
     }
 
-    if (virDomainDiskGetType(disk) != VIR_STORAGE_TYPE_FILE) {
+    if ((virDomainDiskGetType(disk) != VIR_STORAGE_TYPE_FILE) &&
+        (virDomainDiskGetType(disk) != VIR_STORAGE_TYPE_VOLUME)) {
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                        _("unsupported disk type"));
         return -1;
@@ -209,7 +211,7 @@ bhyveBuildDiskArgStr(const virDomainDef *def ATTRIBUTE_UNUSED,
 }
 
 virCommandPtr
-virBhyveProcessBuildBhyveCmd(bhyveConnPtr driver ATTRIBUTE_UNUSED,
+virBhyveProcessBuildBhyveCmd(virConnectPtr conn,
                              virDomainDefPtr def, bool dryRun)
 {
     /*
@@ -263,6 +265,9 @@ virBhyveProcessBuildBhyveCmd(bhyveConnPtr driver ATTRIBUTE_UNUSED,
     for (i = 0; i < def->ndisks; i++) {
         virDomainDiskDefPtr disk = def->disks[i];
 
+        if (virStorageTranslateDiskSourcePool(conn, disk) < 0)
+            goto error;
+
         if (bhyveBuildDiskArgStr(def, disk, cmd) < 0)
             goto error;
     }
@@ -290,7 +295,7 @@ virBhyveProcessBuildDestroyCmd(bhyveConnPtr driver ATTRIBUTE_UNUSED,
 }
 
 virCommandPtr
-virBhyveProcessBuildLoadCmd(bhyveConnPtr driver ATTRIBUTE_UNUSED,
+virBhyveProcessBuildLoadCmd(virConnectPtr conn,
                             virDomainDefPtr def)
 {
     virCommandPtr cmd;
@@ -304,6 +309,9 @@ virBhyveProcessBuildLoadCmd(bhyveConnPtr driver ATTRIBUTE_UNUSED,
 
     disk = def->disks[0];
 
+    if (virStorageTranslateDiskSourcePool(conn, disk) < 0)
+        return NULL;
+
     if ((disk->device != VIR_DOMAIN_DISK_DEVICE_DISK) &&
         (disk->device != VIR_DOMAIN_DISK_DEVICE_CDROM)) {
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
@@ -311,7 +319,8 @@ virBhyveProcessBuildLoadCmd(bhyveConnPtr driver ATTRIBUTE_UNUSED,
         return NULL;
     }
 
-    if (virDomainDiskGetType(disk) != VIR_STORAGE_TYPE_FILE) {
+    if ((virDomainDiskGetType(disk) != VIR_STORAGE_TYPE_FILE) &&
+        (virDomainDiskGetType(disk) != VIR_STORAGE_TYPE_VOLUME)) {
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                        _("unsupported disk type"));
         return NULL;
index 31de97adf9399b9bac1cbf160595c1a41e0a2e4b..5b323bfd1339947282e1df6883fd220bd6435a7d 100644 (file)
 
 # define BHYVE_CONFIG_FORMAT_ARGV "bhyve-argv"
 
-virCommandPtr virBhyveProcessBuildBhyveCmd(bhyveConnPtr,
-                             virDomainDefPtr def, bool dryRun);
+virCommandPtr virBhyveProcessBuildBhyveCmd(virConnectPtr conn,
+                                           virDomainDefPtr def,
+                                           bool dryRun);
 
 virCommandPtr
 virBhyveProcessBuildDestroyCmd(bhyveConnPtr driver,
                                virDomainDefPtr def);
 
 virCommandPtr
-virBhyveProcessBuildLoadCmd(bhyveConnPtr driver,
+virBhyveProcessBuildLoadCmd(virConnectPtr conn,
                             virDomainDefPtr def);
 
 #endif /* __BHYVE_COMMAND_H__ */
index eb8f9afd388d337b6585460f75c1354a8637100a..d2f9c73190359a979e47f77d7e5cf772207093b5 100644 (file)
@@ -689,10 +689,10 @@ bhyveConnectDomainXMLToNative(virConnectPtr conn,
     if (bhyveDomainAssignAddresses(def, NULL) < 0)
         goto cleanup;
 
-    if (!(loadcmd = virBhyveProcessBuildLoadCmd(privconn, def)))
+    if (!(loadcmd = virBhyveProcessBuildLoadCmd(conn, def)))
         goto cleanup;
 
-    if (!(cmd = virBhyveProcessBuildBhyveCmd(privconn, def, true)))
+    if (!(cmd = virBhyveProcessBuildBhyveCmd(conn, def, true)))
         goto cleanup;
 
     virBufferAdd(&buf, virCommandToString(loadcmd), -1);
index 168202edc6db2aa23298b282794ae1a7d3ff6ba2..6b5403dab3a1facf5ec190dbdf9da81c8e1a5e41 100644 (file)
@@ -137,7 +137,7 @@ virBhyveProcessStart(virConnectPtr conn,
         goto cleanup;
 
     /* Call bhyve to start the VM */
-    if (!(cmd = virBhyveProcessBuildBhyveCmd(driver,
+    if (!(cmd = virBhyveProcessBuildBhyveCmd(conn,
                                              vm->def,
                                              false)))
         goto cleanup;
@@ -151,7 +151,7 @@ virBhyveProcessStart(virConnectPtr conn,
     /* Now bhyve command is constructed, meaning the
      * domain is ready to be started, so we can build
      * and execute bhyveload command */
-    if (!(load_cmd = virBhyveProcessBuildLoadCmd(driver, vm->def)))
+    if (!(load_cmd = virBhyveProcessBuildLoadCmd(conn, vm->def)))
         goto cleanup;
     virCommandSetOutputFD(load_cmd, &logfd);
     virCommandSetErrorFD(load_cmd, &logfd);
index 3e710696a64ce9d73ec9b83bb482d6a41c3e2868..d6c3cfb6e38c01a205bdb13e05d5aff4c1a14e69 100644 (file)
@@ -674,6 +674,9 @@ bhyvexml2argvmock_la_LDFLAGS = -module -avoid-version \
                        -rpath /evil/libtool/hack/to/force/shared/lib/creation
 
 bhyve_LDADDS = ../src/libvirt_driver_bhyve_impl.la
+if WITH_STORAGE
+bhyve_LDADDS += ../src/libvirt_driver_storage_impl.la
+endif WITH_STORAGE
 bhyve_LDADDS += $(LDADDS)
 bhyvexml2argvtest_SOURCES = \
        bhyvexml2argvtest.c \
index 408c73aa0bd76a1894be5c7218a9a0ef4b78b2f5..b9be378a642ce3fcd17f87a41853e67a4f341478 100644 (file)
@@ -23,8 +23,11 @@ static int testCompareXMLToArgvFiles(const char *xml,
     virDomainDefPtr vmdef = NULL;
     virDomainObj vm;
     virCommandPtr cmd = NULL;
+    virConnectPtr conn;
     int ret = -1;
 
+    if (!(conn = virGetConnect()))
+        goto out;
 
     if (!(vmdef = virDomainDefParseFile(xml, driver.caps, driver.xmlopt,
                                         1 << VIR_DOMAIN_VIRT_BHYVE,
@@ -33,7 +36,7 @@ static int testCompareXMLToArgvFiles(const char *xml,
 
     vm.def = vmdef;
 
-    if (!(cmd = virBhyveProcessBuildBhyveCmd(&driver, vmdef, false)))
+    if (!(cmd = virBhyveProcessBuildBhyveCmd(conn, vmdef, false)))
         goto out;
 
     if (!(actualargv = virCommandToString(cmd)))