mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
Trivially support DomainHasManagedSaveImage
Return 0 instead of ERR_NO_SUPPORT in each driver where we don't support managed save or -1 if the domain does not exist. This avoids spamming daemon logs when 'virsh dominfo' is run. https://bugzilla.redhat.com/show_bug.cgi?id=1095637
This commit is contained in:
parent
95fd6a91c6
commit
481881f50a
@ -2,7 +2,7 @@
|
||||
* bhyve_driver.c: core driver methods for managing bhyve guests
|
||||
*
|
||||
* Copyright (C) 2014 Roman Bogorodskiy
|
||||
* Copyright (C) 2014 Red Hat, Inc.
|
||||
* Copyright (C) 2014-2015 Red Hat, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
@ -1430,6 +1430,28 @@ bhyveConnectDomainEventDeregisterAny(virConnectPtr conn,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
bhyveDomainHasManagedSaveImage(virDomainPtr domain, unsigned int flags)
|
||||
{
|
||||
virDomainObjPtr vm = NULL;
|
||||
int ret = -1;
|
||||
|
||||
virCheckFlags(0, -1);
|
||||
|
||||
if (!(vm = bhyveDomObjFromDomain(domain)))
|
||||
goto cleanup;
|
||||
|
||||
if (virDomainHasManagedSaveImageEnsureACL(domain->conn, vm->def) < 0)
|
||||
goto cleanup;
|
||||
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
if (vm)
|
||||
virObjectUnlock(vm);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static virHypervisorDriver bhyveHypervisorDriver = {
|
||||
.name = "bhyve",
|
||||
.connectOpen = bhyveConnectOpen, /* 1.2.2 */
|
||||
@ -1476,6 +1498,7 @@ static virHypervisorDriver bhyveHypervisorDriver = {
|
||||
.connectCompareCPU = bhyveConnectCompareCPU, /* 1.2.4 */
|
||||
.connectDomainEventRegisterAny = bhyveConnectDomainEventRegisterAny, /* 1.2.5 */
|
||||
.connectDomainEventDeregisterAny = bhyveConnectDomainEventDeregisterAny, /* 1.2.5 */
|
||||
.domainHasManagedSaveImage = bhyveDomainHasManagedSaveImage, /* 1.2.13 */
|
||||
};
|
||||
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* esx_driver.c: core driver functions for managing VMware ESX hosts
|
||||
*
|
||||
* Copyright (C) 2010-2014 Red Hat, Inc.
|
||||
* Copyright (C) 2010-2015 Red Hat, Inc.
|
||||
* Copyright (C) 2009-2014 Matthias Bolte <matthias.bolte@googlemail.com>
|
||||
* Copyright (C) 2009 Maximilian Wilhelm <max@rfc2324.org>
|
||||
*
|
||||
@ -5147,6 +5147,42 @@ esxConnectListAllDomains(virConnectPtr conn,
|
||||
}
|
||||
#undef MATCH
|
||||
|
||||
static int
|
||||
esxDomainHasManagedSaveImage(virDomainPtr domain, unsigned int flags)
|
||||
{
|
||||
int result = -1;
|
||||
esxPrivate *priv = domain->conn->privateData;
|
||||
esxVI_ManagedObjectReference *managedObjectReference = NULL;
|
||||
char uuid_string[VIR_UUID_STRING_BUFLEN] = "";
|
||||
|
||||
virCheckFlags(0, -1);
|
||||
|
||||
if (esxVI_EnsureSession(priv->primary) < 0)
|
||||
return -1;
|
||||
|
||||
virUUIDFormat(domain->uuid, uuid_string);
|
||||
|
||||
if (esxVI_FindByUuid(priv->primary, priv->primary->datacenter->_reference,
|
||||
uuid_string, esxVI_Boolean_True,
|
||||
esxVI_Boolean_Undefined,
|
||||
&managedObjectReference) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!managedObjectReference) {
|
||||
virReportError(VIR_ERR_NO_DOMAIN,
|
||||
_("Could not find domain with UUID '%s'"),
|
||||
uuid_string);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
result = 0;
|
||||
|
||||
cleanup:
|
||||
esxVI_ManagedObjectReference_Free(&managedObjectReference);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
static virHypervisorDriver esxHypervisorDriver = {
|
||||
.name = "ESX",
|
||||
@ -5226,6 +5262,7 @@ static virHypervisorDriver esxHypervisorDriver = {
|
||||
.domainSnapshotHasMetadata = esxDomainSnapshotHasMetadata, /* 0.9.13 */
|
||||
.domainSnapshotDelete = esxDomainSnapshotDelete, /* 0.8.0 */
|
||||
.connectIsAlive = esxConnectIsAlive, /* 0.9.8 */
|
||||
.domainHasManagedSaveImage = esxDomainHasManagedSaveImage, /* 1.2.13 */
|
||||
};
|
||||
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2010-2014 Red Hat, Inc.
|
||||
* Copyright (C) 2010-2015 Red Hat, Inc.
|
||||
* Copyright IBM Corp. 2008
|
||||
*
|
||||
* lxc_driver.c: linux container driver functions
|
||||
@ -5726,6 +5726,29 @@ lxcNodeAllocPages(virConnectPtr conn,
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
lxcDomainHasManagedSaveImage(virDomainPtr dom, unsigned int flags)
|
||||
{
|
||||
virDomainObjPtr vm = NULL;
|
||||
int ret = -1;
|
||||
|
||||
virCheckFlags(0, -1);
|
||||
|
||||
if (!(vm = lxcDomObjFromDomain(dom)))
|
||||
return ret;
|
||||
|
||||
if (virDomainHasManagedSaveImageEnsureACL(dom->conn, vm->def) < 0)
|
||||
goto cleanup;
|
||||
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
if (vm)
|
||||
virObjectUnlock(vm);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/* Function Tables */
|
||||
static virHypervisorDriver lxcHypervisorDriver = {
|
||||
.name = LXC_DRIVER_NAME,
|
||||
@ -5818,6 +5841,7 @@ static virHypervisorDriver lxcHypervisorDriver = {
|
||||
.domainLxcOpenNamespace = lxcDomainLxcOpenNamespace, /* 1.0.2 */
|
||||
.nodeGetFreePages = lxcNodeGetFreePages, /* 1.2.6 */
|
||||
.nodeAllocPages = lxcNodeAllocPages, /* 1.2.9 */
|
||||
.domainHasManagedSaveImage = lxcDomainHasManagedSaveImage, /* 1.2.13 */
|
||||
};
|
||||
|
||||
static virConnectDriver lxcConnectDriver = {
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* openvz_driver.c: core driver methods for managing OpenVZ VEs
|
||||
*
|
||||
* Copyright (C) 2010-2014 Red Hat, Inc.
|
||||
* Copyright (C) 2010-2015 Red Hat, Inc.
|
||||
* Copyright (C) 2006, 2007 Binary Karma
|
||||
* Copyright (C) 2006 Shuveb Hussain
|
||||
* Copyright (C) 2007 Anoop Joe Cyriac
|
||||
@ -2567,6 +2567,31 @@ openvzDomainMigrateConfirm3Params(virDomainPtr domain,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
openvzDomainHasManagedSaveImage(virDomainPtr dom, unsigned int flags)
|
||||
{
|
||||
struct openvz_driver *driver = dom->conn->privateData;
|
||||
virDomainObjPtr obj;
|
||||
int ret = -1;
|
||||
|
||||
virCheckFlags(0, -1);
|
||||
|
||||
openvzDriverLock(driver);
|
||||
obj = virDomainObjListFindByUUID(driver->domains, dom->uuid);
|
||||
openvzDriverUnlock(driver);
|
||||
if (!obj) {
|
||||
virReportError(VIR_ERR_NO_DOMAIN, NULL);
|
||||
goto cleanup;
|
||||
}
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
if (obj)
|
||||
virObjectUnlock(obj);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static virHypervisorDriver openvzHypervisorDriver = {
|
||||
.name = "OPENVZ",
|
||||
@ -2632,6 +2657,7 @@ static virHypervisorDriver openvzHypervisorDriver = {
|
||||
.domainMigratePerform3Params = openvzDomainMigratePerform3Params, /* 1.2.8 */
|
||||
.domainMigrateFinish3Params = openvzDomainMigrateFinish3Params, /* 1.2.8 */
|
||||
.domainMigrateConfirm3Params = openvzDomainMigrateConfirm3Params, /* 1.2.8 */
|
||||
.domainHasManagedSaveImage = openvzDomainHasManagedSaveImage, /* 1.2.13 */
|
||||
};
|
||||
|
||||
static virConnectDriver openvzConnectDriver = {
|
||||
|
@ -2,7 +2,7 @@
|
||||
* parallels_driver.c: core driver functions for managing
|
||||
* Parallels Cloud Server hosts
|
||||
*
|
||||
* Copyright (C) 2014 Red Hat, Inc.
|
||||
* Copyright (C) 2014-2015 Red Hat, Inc.
|
||||
* Copyright (C) 2012 Parallels, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
@ -956,6 +956,23 @@ parallelsDomainUndefine(virDomainPtr domain)
|
||||
return parallelsDomainUndefineFlags(domain, 0);
|
||||
}
|
||||
|
||||
static int
|
||||
parallelsDomainHasManagedSaveImage(virDomainPtr domain, unsigned int flags)
|
||||
{
|
||||
parallelsConnPtr privconn = domain->conn->privateData;
|
||||
virDomainObjPtr dom = NULL;
|
||||
|
||||
virCheckFlags(0, -1);
|
||||
|
||||
dom = virDomainObjListFindByUUID(privconn->domains, domain->uuid);
|
||||
if (dom == NULL) {
|
||||
parallelsDomNotFoundError(domain);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static virHypervisorDriver parallelsDriver = {
|
||||
.name = "Parallels",
|
||||
.connectOpen = parallelsConnectOpen, /* 0.10.0 */
|
||||
@ -997,6 +1014,7 @@ static virHypervisorDriver parallelsDriver = {
|
||||
.connectIsEncrypted = parallelsConnectIsEncrypted, /* 1.2.5 */
|
||||
.connectIsSecure = parallelsConnectIsSecure, /* 1.2.5 */
|
||||
.connectIsAlive = parallelsConnectIsAlive, /* 1.2.5 */
|
||||
.domainHasManagedSaveImage = parallelsDomainHasManagedSaveImage, /* 1.2.13 */
|
||||
};
|
||||
|
||||
static virConnectDriver parallelsConnectDriver = {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2010-2014 Red Hat, Inc.
|
||||
* Copyright (C) 2010-2015 Red Hat, Inc.
|
||||
* Copyright IBM Corp. 2009
|
||||
*
|
||||
* phyp_driver.c: ssh layer to access Power Hypervisors
|
||||
@ -3669,6 +3669,32 @@ phypDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus)
|
||||
return phypDomainSetVcpusFlags(dom, nvcpus, VIR_DOMAIN_VCPU_LIVE);
|
||||
}
|
||||
|
||||
static int
|
||||
phypDomainHasManagedSaveImage(virDomainPtr dom, unsigned int flags)
|
||||
{
|
||||
|
||||
phyp_driverPtr phyp_driver = dom->conn->privateData;
|
||||
LIBSSH2_SESSION *session = phyp_driver->session;
|
||||
char *managed_system = phyp_driver->managed_system;
|
||||
char *lpar_name = NULL;
|
||||
int ret = -1;
|
||||
|
||||
virCheckFlags(0, -1);
|
||||
|
||||
lpar_name = phypGetLparNAME(session, managed_system, dom->id, dom->conn);
|
||||
|
||||
if (lpar_name == NULL) {
|
||||
VIR_ERROR(_("Unable to determine domain's name."));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(lpar_name);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static virHypervisorDriver phypHypervisorDriver = {
|
||||
.name = "PHYP",
|
||||
.connectOpen = phypConnectOpen, /* 0.7.0 */
|
||||
@ -3698,6 +3724,7 @@ static virHypervisorDriver phypHypervisorDriver = {
|
||||
.connectIsSecure = phypConnectIsSecure, /* 0.7.3 */
|
||||
.domainIsUpdated = phypDomainIsUpdated, /* 0.8.6 */
|
||||
.connectIsAlive = phypConnectIsAlive, /* 0.9.8 */
|
||||
.domainHasManagedSaveImage = phypDomainHasManagedSaveImage, /* 1.2.13 */
|
||||
};
|
||||
|
||||
static virStorageDriver phypStorageDriver = {
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* uml_driver.c: core driver methods for managing UML guests
|
||||
*
|
||||
* Copyright (C) 2006-2014 Red Hat, Inc.
|
||||
* Copyright (C) 2006-2015 Red Hat, Inc.
|
||||
* Copyright (C) 2006-2008 Daniel P. Berrange
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
@ -2943,6 +2943,36 @@ umlNodeAllocPages(virConnectPtr conn,
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
umlDomainHasManagedSaveImage(virDomainPtr dom, unsigned int flags)
|
||||
{
|
||||
struct uml_driver *driver = dom->conn->privateData;
|
||||
int ret = -1;
|
||||
virDomainObjPtr vm;
|
||||
|
||||
virCheckFlags(0, -1);
|
||||
|
||||
umlDriverLock(driver);
|
||||
vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
|
||||
umlDriverUnlock(driver);
|
||||
|
||||
if (!vm) {
|
||||
virReportError(VIR_ERR_NO_DOMAIN, NULL);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (virDomainHasManagedSaveImageEnsureACL(dom->conn, vm->def) < 0)
|
||||
goto cleanup;
|
||||
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
if (vm)
|
||||
virObjectUnlock(vm);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static virHypervisorDriver umlHypervisorDriver = {
|
||||
.name = "UML",
|
||||
.connectOpen = umlConnectOpen, /* 0.5.0 */
|
||||
@ -3006,6 +3036,7 @@ static virHypervisorDriver umlHypervisorDriver = {
|
||||
.nodeSetMemoryParameters = umlNodeSetMemoryParameters, /* 0.10.2 */
|
||||
.nodeGetFreePages = umlNodeGetFreePages, /* 1.2.6 */
|
||||
.nodeAllocPages = umlNodeAllocPages, /* 1.2.9 */
|
||||
.domainHasManagedSaveImage = umlDomainHasManagedSaveImage, /* 1.2.13 */
|
||||
};
|
||||
|
||||
static virConnectDriver umlConnectDriver = {
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2014, Taowei Luo (uaedante@gmail.com)
|
||||
* Copyright (C) 2010-2014 Red Hat, Inc.
|
||||
* Copyright (C) 2010-2015 Red Hat, Inc.
|
||||
* Copyright (C) 2008-2009 Sun Microsystems, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
@ -7588,6 +7588,76 @@ vboxNodeAllocPages(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
startCell, cellCount, add);
|
||||
}
|
||||
|
||||
static int
|
||||
vboxDomainHasManagedSaveImage(virDomainPtr dom, unsigned int flags)
|
||||
{
|
||||
vboxGlobalData *data = dom->conn->privateData;
|
||||
vboxArray machines = VBOX_ARRAY_INITIALIZER;
|
||||
vboxIIDUnion iid;
|
||||
char *machineNameUtf8 = NULL;
|
||||
PRUnichar *machineNameUtf16 = NULL;
|
||||
unsigned char uuid[VIR_UUID_BUFLEN];
|
||||
size_t i;
|
||||
bool matched = false;
|
||||
nsresult rc;
|
||||
int ret = -1;
|
||||
|
||||
virCheckFlags(0, -1);
|
||||
|
||||
if (!data->vboxObj)
|
||||
return ret;
|
||||
|
||||
VBOX_IID_INITIALIZE(&iid);
|
||||
rc = gVBoxAPI.UArray.vboxArrayGet(&machines, data->vboxObj, ARRAY_GET_MACHINES);
|
||||
if (NS_FAILED(rc)) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Could not get list of machines, rc=%08x"), (unsigned)rc);
|
||||
return ret;
|
||||
}
|
||||
|
||||
for (i = 0; i < machines.count; ++i) {
|
||||
IMachine *machine = machines.items[i];
|
||||
PRBool isAccessible = PR_FALSE;
|
||||
|
||||
if (!machine)
|
||||
continue;
|
||||
|
||||
gVBoxAPI.UIMachine.GetAccessible(machine, &isAccessible);
|
||||
if (!isAccessible)
|
||||
continue;
|
||||
|
||||
gVBoxAPI.UIMachine.GetId(machine, &iid);
|
||||
if (NS_FAILED(rc))
|
||||
continue;
|
||||
vboxIIDToUUID(&iid, uuid);
|
||||
vboxIIDUnalloc(&iid);
|
||||
|
||||
if (memcmp(dom->uuid, uuid, VIR_UUID_BUFLEN) == 0) {
|
||||
|
||||
PRUint32 state;
|
||||
|
||||
matched = true;
|
||||
|
||||
gVBoxAPI.UIMachine.GetName(machine, &machineNameUtf16);
|
||||
VBOX_UTF16_TO_UTF8(machineNameUtf16, &machineNameUtf8);
|
||||
|
||||
gVBoxAPI.UIMachine.GetState(machine, &state);
|
||||
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
if (matched)
|
||||
break;
|
||||
}
|
||||
|
||||
/* Do the cleanup and take care you dont leak any memory */
|
||||
VBOX_UTF8_FREE(machineNameUtf8);
|
||||
VBOX_COM_UNALLOC_MEM(machineNameUtf16);
|
||||
gVBoxAPI.UArray.vboxArrayRelease(&machines);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Function Tables
|
||||
@ -7661,6 +7731,7 @@ virHypervisorDriver vboxCommonDriver = {
|
||||
.connectIsAlive = vboxConnectIsAlive, /* 0.9.8 */
|
||||
.nodeGetFreePages = vboxNodeGetFreePages, /* 1.2.6 */
|
||||
.nodeAllocPages = vboxNodeAllocPages, /* 1.2.9 */
|
||||
.domainHasManagedSaveImage = vboxDomainHasManagedSaveImage, /* 1.2.13 */
|
||||
};
|
||||
|
||||
static void updateDriver(void)
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/*
|
||||
* Copyright (C) 2011-2012 Red Hat, Inc.
|
||||
* Copyright (C) 2011-2015 Red Hat, Inc.
|
||||
* Copyright 2010, diateam (www.diateam.net)
|
||||
* Copyright (C) 2013. Doug Goldstein <cardoe@cardoe.com>
|
||||
*
|
||||
@ -1195,6 +1195,30 @@ vmwareConnectListAllDomains(virConnectPtr conn,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
vmwareDomainHasManagedSaveImage(virDomainPtr dom, unsigned int flags)
|
||||
{
|
||||
struct vmware_driver *driver = dom->conn->privateData;
|
||||
virDomainObjPtr obj;
|
||||
int ret = -1;
|
||||
|
||||
virCheckFlags(0, -1);
|
||||
|
||||
vmwareDriverLock(driver);
|
||||
obj = virDomainObjListFindByUUID(driver->domains, dom->uuid);
|
||||
vmwareDriverUnlock(driver);
|
||||
if (!obj) {
|
||||
virReportError(VIR_ERR_NO_DOMAIN, NULL);
|
||||
goto cleanup;
|
||||
}
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
if (obj)
|
||||
virObjectUnlock(obj);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static virHypervisorDriver vmwareHypervisorDriver = {
|
||||
@ -1233,6 +1257,7 @@ static virHypervisorDriver vmwareHypervisorDriver = {
|
||||
.domainIsActive = vmwareDomainIsActive, /* 0.8.7 */
|
||||
.domainIsPersistent = vmwareDomainIsPersistent, /* 0.8.7 */
|
||||
.connectIsAlive = vmwareConnectIsAlive, /* 0.9.8 */
|
||||
.domainHasManagedSaveImage = vmwareDomainHasManagedSaveImage, /* 1.2.13 */
|
||||
};
|
||||
|
||||
static virConnectDriver vmwareConnectDriver = {
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* xenapi_driver.c: Xen API driver.
|
||||
* Copyright (C) 2011-2014 Red Hat, Inc.
|
||||
* Copyright (C) 2011-2015 Red Hat, Inc.
|
||||
* Copyright (C) 2009, 2010 Citrix Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
@ -1977,6 +1977,30 @@ xenapiConnectIsAlive(virConnectPtr conn)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
xenapiDomainHasManagedSaveImage(virDomainPtr dom, unsigned int flags)
|
||||
{
|
||||
struct xen_vm_set *vms;
|
||||
xen_session *session = ((struct _xenapiPrivate *)(dom->conn->privateData))->session;
|
||||
|
||||
virCheckFlags(0, -1);
|
||||
|
||||
if (xen_vm_get_by_name_label(session, &vms, dom->name) && vms->size > 0) {
|
||||
if (vms->size != 1) {
|
||||
xenapiSessionErrorHandler(dom->conn, VIR_ERR_INTERNAL_ERROR,
|
||||
_("Domain name is not unique"));
|
||||
xen_vm_set_free(vms);
|
||||
return -1;
|
||||
}
|
||||
xen_vm_set_free(vms);
|
||||
return 0;
|
||||
}
|
||||
if (vms)
|
||||
xen_vm_set_free(vms);
|
||||
xenapiSessionErrorHandler(dom->conn, VIR_ERR_NO_DOMAIN, NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* The interface which we export upwards to libvirt.c. */
|
||||
static virHypervisorDriver xenapiHypervisorDriver = {
|
||||
.name = "XenAPI",
|
||||
@ -2029,6 +2053,7 @@ static virHypervisorDriver xenapiHypervisorDriver = {
|
||||
.nodeGetFreeMemory = xenapiNodeGetFreeMemory, /* 0.8.0 */
|
||||
.domainIsUpdated = xenapiDomainIsUpdated, /* 0.8.6 */
|
||||
.connectIsAlive = xenapiConnectIsAlive, /* 0.9.8 */
|
||||
.domainHasManagedSaveImage = xenapiDomainHasManagedSaveImage, /* 1.2.13 */
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user