mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-08 20:51:26 +00:00
VMware: Store vmrun binary's path in the driver
Rather than looking up the path to vmrun each time we call it, look it up once and save it. This sets up the ability for us to detect where the path is on Mac OS X and not have to look it up each time we execute it.
This commit is contained in:
parent
ea5805ed29
commit
e7a1ce9d07
@ -50,6 +50,7 @@ vmwareFreeDriver(struct vmware_driver *driver)
|
|||||||
virObjectUnref(driver->domains);
|
virObjectUnref(driver->domains);
|
||||||
virObjectUnref(driver->caps);
|
virObjectUnref(driver->caps);
|
||||||
virObjectUnref(driver->xmlopt);
|
virObjectUnref(driver->xmlopt);
|
||||||
|
VIR_FREE(driver->vmrun);
|
||||||
VIR_FREE(driver);
|
VIR_FREE(driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,7 +145,7 @@ vmwareLoadDomains(struct vmware_driver *driver)
|
|||||||
|
|
||||||
ctx.parseFileName = vmwareCopyVMXFileName;
|
ctx.parseFileName = vmwareCopyVMXFileName;
|
||||||
|
|
||||||
cmd = virCommandNewArgList(VMRUN, "-T",
|
cmd = virCommandNewArgList(driver->vmrun, "-T",
|
||||||
vmwareDriverTypeToString(driver->type),
|
vmwareDriverTypeToString(driver->type),
|
||||||
"list", NULL);
|
"list", NULL);
|
||||||
virCommandSetOutputBuffer(cmd, &outbuf);
|
virCommandSetOutputBuffer(cmd, &outbuf);
|
||||||
|
@ -21,7 +21,6 @@
|
|||||||
#ifndef VMWARE_CONF_H
|
#ifndef VMWARE_CONF_H
|
||||||
# define VMWARE_CONF_H
|
# define VMWARE_CONF_H
|
||||||
|
|
||||||
# define VMRUN "vmrun"
|
|
||||||
# define NOGUI "nogui"
|
# define NOGUI "nogui"
|
||||||
|
|
||||||
# include "internal.h"
|
# include "internal.h"
|
||||||
@ -48,6 +47,7 @@ struct vmware_driver {
|
|||||||
virDomainObjListPtr domains;
|
virDomainObjListPtr domains;
|
||||||
int version;
|
int version;
|
||||||
int type;
|
int type;
|
||||||
|
char *vmrun;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct _vmwareDomain {
|
typedef struct _vmwareDomain {
|
||||||
|
@ -35,6 +35,13 @@
|
|||||||
#include "vmware_driver.h"
|
#include "vmware_driver.h"
|
||||||
#include "virstring.h"
|
#include "virstring.h"
|
||||||
|
|
||||||
|
/* Various places we may find the "vmrun" binary,
|
||||||
|
* without a leading / it will be searched in PATH
|
||||||
|
*/
|
||||||
|
static const char * const vmrun_candidates[] = {
|
||||||
|
"vmrun",
|
||||||
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
vmwareDriverLock(struct vmware_driver *driver)
|
vmwareDriverLock(struct vmware_driver *driver)
|
||||||
{
|
{
|
||||||
@ -85,7 +92,7 @@ vmwareConnectOpen(virConnectPtr conn,
|
|||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
struct vmware_driver *driver;
|
struct vmware_driver *driver;
|
||||||
char * vmrun = NULL;
|
size_t i;
|
||||||
|
|
||||||
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
|
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
|
||||||
|
|
||||||
@ -114,19 +121,26 @@ vmwareConnectOpen(virConnectPtr conn,
|
|||||||
/* We now know the URI is definitely for this driver, so beyond
|
/* We now know the URI is definitely for this driver, so beyond
|
||||||
* here, don't return DECLINED, always use ERROR */
|
* here, don't return DECLINED, always use ERROR */
|
||||||
|
|
||||||
vmrun = virFindFileInPath(VMRUN);
|
|
||||||
|
|
||||||
if (vmrun == NULL) {
|
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("%s utility is missing"), VMRUN);
|
|
||||||
return VIR_DRV_OPEN_ERROR;
|
|
||||||
} else {
|
|
||||||
VIR_FREE(vmrun);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (VIR_ALLOC(driver) < 0)
|
if (VIR_ALLOC(driver) < 0)
|
||||||
return VIR_DRV_OPEN_ERROR;
|
return VIR_DRV_OPEN_ERROR;
|
||||||
|
|
||||||
|
/* Find vmrun, which is what this driver uses to communicate to
|
||||||
|
* the VMware hypervisor. We look this up first since we use it
|
||||||
|
* for auto detection of the backend
|
||||||
|
*/
|
||||||
|
for (i = 0; i < ARRAY_CARDINALITY(vmrun_candidates); i++) {
|
||||||
|
driver->vmrun = virFindFileInPath(vmrun_candidates[i]);
|
||||||
|
/* If we found one, we can stop looking */
|
||||||
|
if (driver->vmrun)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (driver->vmrun == NULL) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
|
_("vmrun utility is missing"));
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
if (virMutexInit(&driver->lock) < 0)
|
if (virMutexInit(&driver->lock) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
@ -200,7 +214,7 @@ vmwareUpdateVMStatus(struct vmware_driver *driver, virDomainObjPtr vm)
|
|||||||
int newState;
|
int newState;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
cmd = virCommandNewArgList(VMRUN, "-T",
|
cmd = virCommandNewArgList(driver->vmrun, "-T",
|
||||||
vmwareDriverTypeToString(driver->type),
|
vmwareDriverTypeToString(driver->type),
|
||||||
"list", NULL);
|
"list", NULL);
|
||||||
virCommandSetOutputBuffer(cmd, &outbuf);
|
virCommandSetOutputBuffer(cmd, &outbuf);
|
||||||
@ -251,7 +265,7 @@ vmwareStopVM(struct vmware_driver *driver,
|
|||||||
virDomainShutoffReason reason)
|
virDomainShutoffReason reason)
|
||||||
{
|
{
|
||||||
const char *cmd[] = {
|
const char *cmd[] = {
|
||||||
VMRUN, "-T", PROGRAM_SENTINEL, "stop",
|
driver->vmrun, "-T", PROGRAM_SENTINEL, "stop",
|
||||||
PROGRAM_SENTINEL, "soft", NULL
|
PROGRAM_SENTINEL, "soft", NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -272,7 +286,7 @@ static int
|
|||||||
vmwareStartVM(struct vmware_driver *driver, virDomainObjPtr vm)
|
vmwareStartVM(struct vmware_driver *driver, virDomainObjPtr vm)
|
||||||
{
|
{
|
||||||
const char *cmd[] = {
|
const char *cmd[] = {
|
||||||
VMRUN, "-T", PROGRAM_SENTINEL, "start",
|
driver->vmrun, "-T", PROGRAM_SENTINEL, "start",
|
||||||
PROGRAM_SENTINEL, PROGRAM_SENTINEL, NULL
|
PROGRAM_SENTINEL, PROGRAM_SENTINEL, NULL
|
||||||
};
|
};
|
||||||
const char *vmxPath = ((vmwareDomainPtr) vm->privateData)->vmxPath;
|
const char *vmxPath = ((vmwareDomainPtr) vm->privateData)->vmxPath;
|
||||||
@ -445,7 +459,7 @@ vmwareDomainSuspend(virDomainPtr dom)
|
|||||||
|
|
||||||
virDomainObjPtr vm;
|
virDomainObjPtr vm;
|
||||||
const char *cmd[] = {
|
const char *cmd[] = {
|
||||||
VMRUN, "-T", PROGRAM_SENTINEL, "pause",
|
driver->vmrun, "-T", PROGRAM_SENTINEL, "pause",
|
||||||
PROGRAM_SENTINEL, NULL
|
PROGRAM_SENTINEL, NULL
|
||||||
};
|
};
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
@ -494,7 +508,7 @@ vmwareDomainResume(virDomainPtr dom)
|
|||||||
|
|
||||||
virDomainObjPtr vm;
|
virDomainObjPtr vm;
|
||||||
const char *cmd[] = {
|
const char *cmd[] = {
|
||||||
VMRUN, "-T", PROGRAM_SENTINEL, "unpause", PROGRAM_SENTINEL,
|
driver->vmrun, "-T", PROGRAM_SENTINEL, "unpause", PROGRAM_SENTINEL,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
@ -543,7 +557,7 @@ vmwareDomainReboot(virDomainPtr dom, unsigned int flags)
|
|||||||
const char * vmxPath = NULL;
|
const char * vmxPath = NULL;
|
||||||
virDomainObjPtr vm;
|
virDomainObjPtr vm;
|
||||||
const char *cmd[] = {
|
const char *cmd[] = {
|
||||||
VMRUN, "-T", PROGRAM_SENTINEL,
|
driver->vmrun, "-T", PROGRAM_SENTINEL,
|
||||||
"reset", PROGRAM_SENTINEL, "soft", NULL
|
"reset", PROGRAM_SENTINEL, "soft", NULL
|
||||||
};
|
};
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user