141 lines
5.3 KiB
Diff
141 lines
5.3 KiB
Diff
# HG changeset patch
|
|
# User Keir Fraser <keir.fraser@citrix.com>
|
|
# Date 1205838420 0
|
|
# Node ID c949248d590a59ee558780b636fe753434b5c933
|
|
# Parent 06dbce4a60f973ccdb925a29a0b34b72774a5d0b
|
|
Convert XenAPI platform values to appropriate types.
|
|
|
|
XenAPI defines the platform attribute of a VM as a string-string map
|
|
but in various code paths in xend the platform entries are expected to be
|
|
another type, e.g. int. This patch defines the types of each platform
|
|
entry and converts the entry values to appropriate type when new domU
|
|
configuration is created via XenAPI.
|
|
|
|
Alternatively the values could be casted to appropriate type when used
|
|
but seems prudent to do the conversion when domU configuration is
|
|
created.
|
|
|
|
Signed-off-by: Jim Fehlig <jfehlig@novell.com>
|
|
|
|
Index: xen-3.2.1-testing/tools/python/xen/xend/XendConfig.py
|
|
===================================================================
|
|
--- xen-3.2.1-testing.orig/tools/python/xen/xend/XendConfig.py
|
|
+++ xen-3.2.1-testing/tools/python/xen/xend/XendConfig.py
|
|
@@ -123,14 +123,43 @@ XENAPI_CFG_TO_LEGACY_CFG = {
|
|
|
|
LEGACY_CFG_TO_XENAPI_CFG = reverse_dict(XENAPI_CFG_TO_LEGACY_CFG)
|
|
|
|
-# Platform configuration keys.
|
|
-XENAPI_PLATFORM_CFG = [ 'acpi', 'apic', 'boot', 'device_model', 'display',
|
|
- 'fda', 'fdb', 'keymap', 'isa', 'localtime', 'monitor',
|
|
- 'nographic', 'pae', 'rtc_timeoffset', 'serial', 'sdl',
|
|
- 'soundhw','stdvga', 'usb', 'usbdevice', 'hpet', 'vnc',
|
|
- 'vncconsole', 'vncdisplay', 'vnclisten', 'timer_mode',
|
|
- 'vncpasswd', 'vncunused', 'xauthority', 'pci', 'vhpt',
|
|
- 'guest_os_type', 'hap']
|
|
+# Platform configuration keys and their types.
|
|
+XENAPI_PLATFORM_CFG_TYPES = {
|
|
+ 'acpi': int,
|
|
+ 'apic': int,
|
|
+ 'boot': str,
|
|
+ 'device_model': str,
|
|
+ 'loader': str,
|
|
+ 'display' : str,
|
|
+ 'fda': str,
|
|
+ 'fdb': str,
|
|
+ 'keymap': str,
|
|
+ 'isa' : int,
|
|
+ 'localtime': int,
|
|
+ 'monitor': int,
|
|
+ 'nographic': int,
|
|
+ 'pae' : int,
|
|
+ 'rtc_timeoffset': int,
|
|
+ 'serial': str,
|
|
+ 'sdl': int,
|
|
+ 'soundhw': str,
|
|
+ 'stdvga': int,
|
|
+ 'usb': int,
|
|
+ 'usbdevice': str,
|
|
+ 'hpet': int,
|
|
+ 'vnc': int,
|
|
+ 'vncconsole': int,
|
|
+ 'vncdisplay': int,
|
|
+ 'vnclisten': str,
|
|
+ 'timer_mode': int,
|
|
+ 'vncpasswd': str,
|
|
+ 'vncunused': int,
|
|
+ 'xauthority': str,
|
|
+ 'pci': str,
|
|
+ 'vhpt': int,
|
|
+ 'guest_os_type': str,
|
|
+ 'hap': int,
|
|
+}
|
|
|
|
# Xen API console 'other_config' keys.
|
|
XENAPI_CONSOLE_OTHER_CFG = ['vncunused', 'vncdisplay', 'vnclisten',
|
|
@@ -529,7 +558,7 @@ class XendConfig(dict):
|
|
cfg['platform']['localtime'] = localtime
|
|
|
|
# Compatibility hack -- can go soon.
|
|
- for key in XENAPI_PLATFORM_CFG:
|
|
+ for key in XENAPI_PLATFORM_CFG_TYPES.keys():
|
|
val = sxp.child_value(sxp_cfg, "platform_" + key, None)
|
|
if val is not None:
|
|
self['platform'][key] = val
|
|
@@ -708,7 +737,7 @@ class XendConfig(dict):
|
|
self.update_with_image_sxp(image_sxp)
|
|
|
|
# Convert Legacy HVM parameters to Xen API configuration
|
|
- for key in XENAPI_PLATFORM_CFG:
|
|
+ for key in XENAPI_PLATFORM_CFG_TYPES.keys():
|
|
if key in cfg:
|
|
self['platform'][key] = cfg[key]
|
|
|
|
@@ -758,7 +787,7 @@ class XendConfig(dict):
|
|
if image_type != 'hvm' and image_type != 'linux':
|
|
self['platform']['image_type'] = image_type
|
|
|
|
- for key in XENAPI_PLATFORM_CFG:
|
|
+ for key in XENAPI_PLATFORM_CFG_TYPES.keys():
|
|
val = sxp.child_value(image_sxp, key, None)
|
|
if val is not None and val != '':
|
|
self['platform'][key] = val
|
|
@@ -842,6 +871,19 @@ class XendConfig(dict):
|
|
self[key] = type_conv(val)
|
|
else:
|
|
self[key] = val
|
|
+
|
|
+ # XenAPI defines platform as a string-string map. If platform
|
|
+ # configuration exists, convert values to appropriate type.
|
|
+ if 'platform' in xapi:
|
|
+ for key, val in xapi['platform'].items():
|
|
+ type_conv = XENAPI_PLATFORM_CFG_TYPES.get(key)
|
|
+ if type_conv is None:
|
|
+ key = key.lower()
|
|
+ type_conv = XENAPI_PLATFORM_CFG_TYPES.get(key)
|
|
+ if callable(type_conv):
|
|
+ self['platform'][key] = type_conv(val)
|
|
+ else:
|
|
+ self['platform'][key] = val
|
|
|
|
self['vcpus_params']['weight'] = \
|
|
int(self['vcpus_params'].get('weight', 256))
|
|
@@ -1521,7 +1563,7 @@ class XendConfig(dict):
|
|
if self.has_key('PV_args') and self['PV_args']:
|
|
image.append(['args', self['PV_args']])
|
|
|
|
- for key in XENAPI_PLATFORM_CFG:
|
|
+ for key in XENAPI_PLATFORM_CFG_TYPES.keys():
|
|
if key in self['platform']:
|
|
image.append([key, self['platform'][key]])
|
|
|
|
@@ -1557,7 +1599,7 @@ class XendConfig(dict):
|
|
self['PV_ramdisk'] = sxp.child_value(image_sxp, 'ramdisk','')
|
|
self['PV_args'] = kernel_args
|
|
|
|
- for key in XENAPI_PLATFORM_CFG:
|
|
+ for key in XENAPI_PLATFORM_CFG_TYPES.keys():
|
|
val = sxp.child_value(image_sxp, key, None)
|
|
if val is not None and val != '':
|
|
self['platform'][key] = val
|