# HG changeset patch
# User Alastair Tse <atse@xxxxxxxxxxxxx>
# Node ID 9e0b024a169624507452130244e940fa3fd6000d
# Parent 53b8f2b74ab27fdb4c4f19915247b67626699978
[XEND] Conform to Xen API XMLRPC Wire Protocol Customisation
1. Int(s) all have to be String(s).
2. Enums are not transmitted as Ints, but as Descriptive Strings.
Signed-off-by: Alastair Tse <atse@xxxxxxxxxxxxx>
---
tools/python/scripts/xapi.py | 4 +-
tools/python/xen/xend/XendAPI.py | 17 ++++++++++-
tools/python/xen/xend/XendDomainInfo.py | 49 +++++++++++++++++++-------------
3 files changed, 48 insertions(+), 22 deletions(-)
diff -r 53b8f2b74ab2 -r 9e0b024a1696 tools/python/scripts/xapi.py
--- a/tools/python/scripts/xapi.py Fri Oct 06 18:01:08 2006 +0100
+++ b/tools/python/scripts/xapi.py Fri Oct 06 22:50:29 2006 +0100
@@ -22,8 +22,8 @@ from types import DictType
from types import DictType
HOST_INFO_FORMAT = '%-20s: %-50s'
-VM_LIST_FORMAT = '%(name_label)-24s %(memory_actual)-5s %(vcpus_number)-5s'\
- ' %(power_state)-5s %(uuid)-32s'
+VM_LIST_FORMAT = '%(name_label)-18s %(memory_actual)-5s %(vcpus_number)-5s'\
+ ' %(power_state)-12s %(uuid)-32s'
LOGIN = ('atse', 'passwd')
diff -r 53b8f2b74ab2 -r 9e0b024a1696 tools/python/xen/xend/XendAPI.py
--- a/tools/python/xen/xend/XendAPI.py Fri Oct 06 18:01:08 2006 +0100
+++ b/tools/python/xen/xend/XendAPI.py Fri Oct 06 22:50:29 2006 +0100
@@ -26,8 +26,23 @@ from xen.xend.XendLogging import log
from xen.xend.XendAPIConstants import *
+from types import *
+
+def _stringify(value):
+ if isinstance(value, IntType) and not isinstance(value, BooleanType):
+ return str(value)
+ elif isinstance(value, DictType):
+ for k, v in value.items():
+ value[k] = _stringify(v)
+ return value
+ elif isinstance(value, (TupleType, ListType)):
+ return [_stringify(v) for v in value]
+ else:
+ return value
+
def xen_api_success(value):
- return {"Status": "Success", "Value": value}
+ return {"Status": "Success", "Value": _stringify(value)}
+
def xen_api_success_void():
"""Return success, but caller expects no return value."""
return xen_api_success("")
diff -r 53b8f2b74ab2 -r 9e0b024a1696 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py Fri Oct 06 18:01:08 2006 +0100
+++ b/tools/python/xen/xend/XendDomainInfo.py Fri Oct 06 22:50:29 2006 +0100
@@ -1653,7 +1653,7 @@ class XendDomainInfo:
def get_vcpus_params(self):
return '' # TODO
def get_power_state(self):
- return self.state
+ return XEN_API_VM_POWER_STATE[self.state]
def get_tpm_instance(self):
return '' # TODO
def get_tpm_backend(self):
@@ -1673,7 +1673,11 @@ class XendDomainInfo:
def get_builder(self):
return 'Linux' # TODO
def get_boot_method(self):
- return self.info['bootloader']
+ bootloader = self.info['bootloader']
+ if not bootloader or bootloader not in XEN_API_BOOT_TYPE:
+ return 'kernel_external'
+ return bootloader
+
def get_kernel_image(self):
return self.info['kernel_kernel']
def get_kernel_initrd(self):
@@ -1690,30 +1694,33 @@ class XendDomainInfo:
return {} # TODO
def get_on_shutdown(self):
- try:
- return XEN_API_ON_NORMAL_EXIT.index(self.info['on_poweroff'])
- except ValueError, e:
- return XEN_API_ON_NORMAL_EXIT.index('restart')
-
+ after_shutdown = self.info.get('on_poweroff')
+ if not after_shutdown or after_shutdown not in XEN_API_ON_NORMAL_EXIT:
+ return XEN_API_ON_NORMAL_EXIT[-1]
+ return after_shutdown
+
def get_on_reboot(self):
- try:
- return XEN_API_ON_NORMAL_EXIT.index(self.info['on_reboot'])
- except ValueError, e:
- return XEN_API_ON_NORMAL_EXIT.index('restart')
+ after_reboot = self.info.get('on_reboot')
+ if not after_reboot or after_reboot not in XEN_API_ON_NORMAL_EXIT:
+ return XEN_API_ON_NORMAL_EXIT[-1]
+ return after_reboot
def get_on_suspend(self):
- return 0 # TODO
+ after_suspend = self.info.get('on_suspend') # TODO: not supported
+ if not after_suspend or after_suspend not in XEN_API_ON_NORMAL_EXIT:
+ return XEN_API_ON_NORMAL_EXIT[-1]
+ return after_suspend
def get_on_crash(self):
- try:
- return XEN_API_ON_CRASH_BEHAVIOUR.index(self.info['on_crash'])
- except ValueError, e:
- return XEN_API_ON_CRASH_BEHAVIOUR.index('destroy')
+ after_crash = self.info.get('on_crash')
+ if not after_crash or after_crash not in XEN_API_ON_CRASH_BEHAVIOUR:
+ return XEN_API_ON_CRASH_BEHAVIOUR[0]
+ return after_crash
def get_dev_config_by_uuid(self, dev_class, dev_uuid):
""" Get's a device configuration either from XendConfig or
from the DevController."""
- if self.get_power_state() in (XEN_API_VM_POWER_STATE_HALTED,):
+ if self.state in (XEN_API_VM_POWER_STATE_HALTED,):
dev = self.info['device'].get(dev_uuid)
if dev:
return dev[1].copy()
@@ -1768,7 +1775,11 @@ class XendDomainInfo:
config['device'] = config.get('dev', '')
config['driver'] = config.get('uname', '')
config['IO_bandwidth_incoming_kbs'] = 0.0
- config['IO_bandwidth_outgoing_kbs'] = 0.0
+ config['IO_bandwidth_outgoing_kbs'] = 0.0
+ if config['mode'] == 'r':
+ config['mode'] = 'RO'
+ else:
+ config['mode'] = 'RW'
return config
@@ -1821,7 +1832,7 @@ class XendDomainInfo:
if not dev_uuid:
raise XendError('Failed to create device')
- if self.state in (XEN_API_VM_POWER_STATE_RUNNING,):
+ if self.state in (DOM_STATE_HALTED,):
sxpr = self.info.device_sxpr(dev_uuid)
devid = self.getDeviceController('vif').createDevice(sxpr)
raise XendError("Device creation failed")
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|