2011/5/4 Jiri Denemark <jdenemar(a)redhat.com>:
Reason is currently always set to 0 (i.e., *_UNKNOWN).
---
src/esx/esx_driver.c | 54 ++++++++++++++++++++++++-
src/libxl/libxl_driver.c | 31 +++++++++++++-
src/lxc/lxc_driver.c | 33 ++++++++++++++-
src/openvz/openvz_driver.c | 32 ++++++++++++++-
src/phyp/phyp_driver.c | 12 +++++-
src/qemu/qemu_driver.c | 33 ++++++++++++++-
src/test/test_driver.c | 31 +++++++++++++-
src/uml/uml_driver.c | 32 ++++++++++++++-
src/vbox/vbox_tmpl.c | 56 +++++++++++++++++++++++++-
src/vmware/vmware_driver.c | 31 +++++++++++++-
src/xen/xen_driver.c | 18 ++++++++-
src/xen/xen_hypervisor.c | 34 +++++++++++++++-
src/xen/xen_hypervisor.h | 4 ++
src/xen/xend_internal.c | 97 ++++++++++++++++++++++++++++++++-----------
src/xen/xend_internal.h | 1 +
src/xen/xm_internal.c | 19 ++++++++-
src/xen/xm_internal.h | 1 +
src/xen/xs_internal.c | 32 ++++++++++++++-
src/xen/xs_internal.h | 3 +
src/xenapi/xenapi_driver.c | 45 ++++++++++++++++++++-
20 files changed, 559 insertions(+), 40 deletions(-)
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
index 543ebe6..94b0121 100644
--- a/src/esx/esx_driver.c
+++ b/src/esx/esx_driver.c
@@ -2425,6 +2425,58 @@ esxDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
static int
+esxDomainGetState(virDomainPtr domain, int *state, int *reason)
+{
+ int result = -1;
+ esxPrivate *priv = domain->conn->privateData;
+ esxVI_String *propertyNameList = NULL;
+ esxVI_ObjectContent *virtualMachine = NULL;
+ esxVI_DynamicProperty *dynamicProperty = NULL;
+ esxVI_VirtualMachinePowerState powerState;
+
+ if (esxVI_EnsureSession(priv->primary) < 0) {
+ return -1;
+ }
+
+ if (esxVI_String_AppendValueListToList(&propertyNameList,
+ "runtime.powerState\0") < 0 ||
+ esxVI_LookupVirtualMachineByUuid(priv->primary, domain->uuid,
+ propertyNameList, &virtualMachine,
+ esxVI_Occurrence_RequiredItem) < 0) {
+ goto cleanup;
+ }
+
+ *state = VIR_DOMAIN_NOSTATE;
+ if (reason)
+ *reason = 0;
+
+ for (dynamicProperty = virtualMachine->propSet; dynamicProperty != NULL;
+ dynamicProperty = dynamicProperty->_next) {
+ if (STREQ(dynamicProperty->name, "runtime.powerState")) {
+ if (esxVI_VirtualMachinePowerState_CastFromAnyType
+ (dynamicProperty->val, &powerState) < 0) {
+ goto cleanup;
+ }
+
+ *state = esxVI_VirtualMachinePowerState_ConvertToLibvirt
+ (powerState);
+ } else {
+ VIR_WARN("Unexpected '%s' property",
dynamicProperty->name);
+ }
+ }
+
+ result = 0;
+
+ cleanup:
+ esxVI_String_Free(&propertyNameList);
+ esxVI_ObjectContent_Free(&virtualMachine);
+
+ return result;
+}
+
This can be simplified to:
static int
esxDomainGetState(virDomainPtr domain, int *state, int *reason)
{
int result = -1;
esxPrivate *priv = domain->conn->privateData;
esxVI_String *propertyNameList = NULL;
esxVI_ObjectContent *virtualMachine = NULL;
esxVI_VirtualMachinePowerState powerState;
if (esxVI_EnsureSession(priv->primary) < 0) {
return -1;
}
if (esxVI_String_AppendValueToList(&propertyNameList,
"runtime.powerState") < 0 ||
esxVI_LookupVirtualMachineByUuid(priv->primary, domain->uuid,
propertyNameList, &virtualMachine,
esxVI_Occurrence_RequiredItem) < 0 ||
esxVI_GetVirtualMachinePowerState(virtualMachine, &powerState) < 0) {
goto cleanup;
}
*state = esxVI_VirtualMachinePowerState_ConvertToLibvirt(powerState);
if (reason) {
*reason = 0;
}
result = 0;
cleanup:
esxVI_String_Free(&propertyNameList);
esxVI_ObjectContent_Free(&virtualMachine);
return result;
}
Matthias