diff --git a/tools/python/scripts/xapi.py b/tools/python/scripts/xapi.py index 5c5dddc1967fd3ac44e8a67f14f405fbe6b34e2a..6b4c40df6dd48e1e81f7431c000ca72d73dd3ac8 100644 --- a/tools/python/scripts/xapi.py +++ b/tools/python/scripts/xapi.py @@ -22,8 +22,8 @@ from pprint import pprint 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 --git a/tools/python/xen/xend/XendAPI.py b/tools/python/xen/xend/XendAPI.py index dc9595f94ea69c80f314fc85c13ea3ae7aa91855..6f5df916d083f426b43401fbcab5c384756641ef 100644 --- a/tools/python/xen/xend/XendAPI.py +++ b/tools/python/xen/xend/XendAPI.py @@ -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 --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py index 40fbd1106dc555b7df1d6e37045db79b9700f1a2..76d07c2a8ec1060df1685f0bc7680d65103f9607 100644 --- a/tools/python/xen/xend/XendDomainInfo.py +++ b/tools/python/xen/xend/XendDomainInfo.py @@ -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")