diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c index e2940e8c024958ea39a3684b23c2a2982f880546..94829e735df2a0d01ccba09daa18d326b87e237a 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -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; diff --git a/src/bhyve/bhyve_command.h b/src/bhyve/bhyve_command.h index 31de97adf9399b9bac1cbf160595c1a41e0a2e4b..5b323bfd1339947282e1df6883fd220bd6435a7d 100644 --- a/src/bhyve/bhyve_command.h +++ b/src/bhyve/bhyve_command.h @@ -29,15 +29,16 @@ # 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__ */ diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c index eb8f9afd388d337b6585460f75c1354a8637100a..d2f9c73190359a979e47f77d7e5cf772207093b5 100644 --- a/src/bhyve/bhyve_driver.c +++ b/src/bhyve/bhyve_driver.c @@ -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); diff --git a/src/bhyve/bhyve_process.c b/src/bhyve/bhyve_process.c index 168202edc6db2aa23298b282794ae1a7d3ff6ba2..6b5403dab3a1facf5ec190dbdf9da81c8e1a5e41 100644 --- a/src/bhyve/bhyve_process.c +++ b/src/bhyve/bhyve_process.c @@ -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); diff --git a/tests/Makefile.am b/tests/Makefile.am index 3e710696a64ce9d73ec9b83bb482d6a41c3e2868..d6c3cfb6e38c01a205bdb13e05d5aff4c1a14e69 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -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 \ diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c index 408c73aa0bd76a1894be5c7218a9a0ef4b78b2f5..b9be378a642ce3fcd17f87a41853e67a4f341478 100644 --- a/tests/bhyvexml2argvtest.c +++ b/tests/bhyvexml2argvtest.c @@ -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)))