提交 6c2e7d0b 编写于 作者: R Roman Bogorodskiy

bhyve: add volumes support

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
上级 8c170c9f
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include "virnetdev.h" #include "virnetdev.h"
#include "virnetdevbridge.h" #include "virnetdevbridge.h"
#include "virnetdevtap.h" #include "virnetdevtap.h"
#include "storage/storage_driver.h"
#define VIR_FROM_THIS VIR_FROM_BHYVE #define VIR_FROM_THIS VIR_FROM_BHYVE
...@@ -184,7 +185,8 @@ bhyveBuildDiskArgStr(const virDomainDef *def ATTRIBUTE_UNUSED, ...@@ -184,7 +185,8 @@ bhyveBuildDiskArgStr(const virDomainDef *def ATTRIBUTE_UNUSED,
return -1; 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", virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("unsupported disk type")); _("unsupported disk type"));
return -1; return -1;
...@@ -209,7 +211,7 @@ bhyveBuildDiskArgStr(const virDomainDef *def ATTRIBUTE_UNUSED, ...@@ -209,7 +211,7 @@ bhyveBuildDiskArgStr(const virDomainDef *def ATTRIBUTE_UNUSED,
} }
virCommandPtr virCommandPtr
virBhyveProcessBuildBhyveCmd(bhyveConnPtr driver ATTRIBUTE_UNUSED, virBhyveProcessBuildBhyveCmd(virConnectPtr conn,
virDomainDefPtr def, bool dryRun) virDomainDefPtr def, bool dryRun)
{ {
/* /*
...@@ -263,6 +265,9 @@ virBhyveProcessBuildBhyveCmd(bhyveConnPtr driver ATTRIBUTE_UNUSED, ...@@ -263,6 +265,9 @@ virBhyveProcessBuildBhyveCmd(bhyveConnPtr driver ATTRIBUTE_UNUSED,
for (i = 0; i < def->ndisks; i++) { for (i = 0; i < def->ndisks; i++) {
virDomainDiskDefPtr disk = def->disks[i]; virDomainDiskDefPtr disk = def->disks[i];
if (virStorageTranslateDiskSourcePool(conn, disk) < 0)
goto error;
if (bhyveBuildDiskArgStr(def, disk, cmd) < 0) if (bhyveBuildDiskArgStr(def, disk, cmd) < 0)
goto error; goto error;
} }
...@@ -290,7 +295,7 @@ virBhyveProcessBuildDestroyCmd(bhyveConnPtr driver ATTRIBUTE_UNUSED, ...@@ -290,7 +295,7 @@ virBhyveProcessBuildDestroyCmd(bhyveConnPtr driver ATTRIBUTE_UNUSED,
} }
virCommandPtr virCommandPtr
virBhyveProcessBuildLoadCmd(bhyveConnPtr driver ATTRIBUTE_UNUSED, virBhyveProcessBuildLoadCmd(virConnectPtr conn,
virDomainDefPtr def) virDomainDefPtr def)
{ {
virCommandPtr cmd; virCommandPtr cmd;
...@@ -304,6 +309,9 @@ virBhyveProcessBuildLoadCmd(bhyveConnPtr driver ATTRIBUTE_UNUSED, ...@@ -304,6 +309,9 @@ virBhyveProcessBuildLoadCmd(bhyveConnPtr driver ATTRIBUTE_UNUSED,
disk = def->disks[0]; disk = def->disks[0];
if (virStorageTranslateDiskSourcePool(conn, disk) < 0)
return NULL;
if ((disk->device != VIR_DOMAIN_DISK_DEVICE_DISK) && if ((disk->device != VIR_DOMAIN_DISK_DEVICE_DISK) &&
(disk->device != VIR_DOMAIN_DISK_DEVICE_CDROM)) { (disk->device != VIR_DOMAIN_DISK_DEVICE_CDROM)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
...@@ -311,7 +319,8 @@ virBhyveProcessBuildLoadCmd(bhyveConnPtr driver ATTRIBUTE_UNUSED, ...@@ -311,7 +319,8 @@ virBhyveProcessBuildLoadCmd(bhyveConnPtr driver ATTRIBUTE_UNUSED,
return NULL; 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", virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("unsupported disk type")); _("unsupported disk type"));
return NULL; return NULL;
......
...@@ -29,15 +29,16 @@ ...@@ -29,15 +29,16 @@
# define BHYVE_CONFIG_FORMAT_ARGV "bhyve-argv" # define BHYVE_CONFIG_FORMAT_ARGV "bhyve-argv"
virCommandPtr virBhyveProcessBuildBhyveCmd(bhyveConnPtr, virCommandPtr virBhyveProcessBuildBhyveCmd(virConnectPtr conn,
virDomainDefPtr def, bool dryRun); virDomainDefPtr def,
bool dryRun);
virCommandPtr virCommandPtr
virBhyveProcessBuildDestroyCmd(bhyveConnPtr driver, virBhyveProcessBuildDestroyCmd(bhyveConnPtr driver,
virDomainDefPtr def); virDomainDefPtr def);
virCommandPtr virCommandPtr
virBhyveProcessBuildLoadCmd(bhyveConnPtr driver, virBhyveProcessBuildLoadCmd(virConnectPtr conn,
virDomainDefPtr def); virDomainDefPtr def);
#endif /* __BHYVE_COMMAND_H__ */ #endif /* __BHYVE_COMMAND_H__ */
...@@ -689,10 +689,10 @@ bhyveConnectDomainXMLToNative(virConnectPtr conn, ...@@ -689,10 +689,10 @@ bhyveConnectDomainXMLToNative(virConnectPtr conn,
if (bhyveDomainAssignAddresses(def, NULL) < 0) if (bhyveDomainAssignAddresses(def, NULL) < 0)
goto cleanup; goto cleanup;
if (!(loadcmd = virBhyveProcessBuildLoadCmd(privconn, def))) if (!(loadcmd = virBhyveProcessBuildLoadCmd(conn, def)))
goto cleanup; goto cleanup;
if (!(cmd = virBhyveProcessBuildBhyveCmd(privconn, def, true))) if (!(cmd = virBhyveProcessBuildBhyveCmd(conn, def, true)))
goto cleanup; goto cleanup;
virBufferAdd(&buf, virCommandToString(loadcmd), -1); virBufferAdd(&buf, virCommandToString(loadcmd), -1);
......
...@@ -137,7 +137,7 @@ virBhyveProcessStart(virConnectPtr conn, ...@@ -137,7 +137,7 @@ virBhyveProcessStart(virConnectPtr conn,
goto cleanup; goto cleanup;
/* Call bhyve to start the VM */ /* Call bhyve to start the VM */
if (!(cmd = virBhyveProcessBuildBhyveCmd(driver, if (!(cmd = virBhyveProcessBuildBhyveCmd(conn,
vm->def, vm->def,
false))) false)))
goto cleanup; goto cleanup;
...@@ -151,7 +151,7 @@ virBhyveProcessStart(virConnectPtr conn, ...@@ -151,7 +151,7 @@ virBhyveProcessStart(virConnectPtr conn,
/* Now bhyve command is constructed, meaning the /* Now bhyve command is constructed, meaning the
* domain is ready to be started, so we can build * domain is ready to be started, so we can build
* and execute bhyveload command */ * and execute bhyveload command */
if (!(load_cmd = virBhyveProcessBuildLoadCmd(driver, vm->def))) if (!(load_cmd = virBhyveProcessBuildLoadCmd(conn, vm->def)))
goto cleanup; goto cleanup;
virCommandSetOutputFD(load_cmd, &logfd); virCommandSetOutputFD(load_cmd, &logfd);
virCommandSetErrorFD(load_cmd, &logfd); virCommandSetErrorFD(load_cmd, &logfd);
......
...@@ -674,6 +674,9 @@ bhyvexml2argvmock_la_LDFLAGS = -module -avoid-version \ ...@@ -674,6 +674,9 @@ bhyvexml2argvmock_la_LDFLAGS = -module -avoid-version \
-rpath /evil/libtool/hack/to/force/shared/lib/creation -rpath /evil/libtool/hack/to/force/shared/lib/creation
bhyve_LDADDS = ../src/libvirt_driver_bhyve_impl.la 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) bhyve_LDADDS += $(LDADDS)
bhyvexml2argvtest_SOURCES = \ bhyvexml2argvtest_SOURCES = \
bhyvexml2argvtest.c \ bhyvexml2argvtest.c \
......
...@@ -23,8 +23,11 @@ static int testCompareXMLToArgvFiles(const char *xml, ...@@ -23,8 +23,11 @@ static int testCompareXMLToArgvFiles(const char *xml,
virDomainDefPtr vmdef = NULL; virDomainDefPtr vmdef = NULL;
virDomainObj vm; virDomainObj vm;
virCommandPtr cmd = NULL; virCommandPtr cmd = NULL;
virConnectPtr conn;
int ret = -1; int ret = -1;
if (!(conn = virGetConnect()))
goto out;
if (!(vmdef = virDomainDefParseFile(xml, driver.caps, driver.xmlopt, if (!(vmdef = virDomainDefParseFile(xml, driver.caps, driver.xmlopt,
1 << VIR_DOMAIN_VIRT_BHYVE, 1 << VIR_DOMAIN_VIRT_BHYVE,
...@@ -33,7 +36,7 @@ static int testCompareXMLToArgvFiles(const char *xml, ...@@ -33,7 +36,7 @@ static int testCompareXMLToArgvFiles(const char *xml,
vm.def = vmdef; vm.def = vmdef;
if (!(cmd = virBhyveProcessBuildBhyveCmd(&driver, vmdef, false))) if (!(cmd = virBhyveProcessBuildBhyveCmd(conn, vmdef, false)))
goto out; goto out;
if (!(actualargv = virCommandToString(cmd))) if (!(actualargv = virCommandToString(cmd)))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册