aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Novotny <minovotn@redhat.com>2011-01-11 18:51:28 +0000
committerMichal Novotny <minovotn@redhat.com>2011-01-11 18:51:28 +0000
commita7eac414691d211b17e4e50719fc6ad642aaa22a (patch)
tree30bcbc7246fc68a1e87858cd09a116ca3999d42f
parentcdca3dd8ed49c4e18b7442c330fecd8acfec0dbb (diff)
downloadxen-a7eac414691d211b17e4e50719fc6ad642aaa22a.tar.gz
xen-a7eac414691d211b17e4e50719fc6ad642aaa22a.tar.bz2
xen-a7eac414691d211b17e4e50719fc6ad642aaa22a.zip
tools/xend: check for device model if path is not specified
this is the patch to check for device model (in XendConfig.py) when the device_model had no path specified, i.e. XenD was trying to read the file on the auxbin path. Without this patch applied the meaningless python error "coercing to Unicode: need string or buffer, NoneType found" occurred: [2010-11-30 13:56:47 5255] ERROR (xmlrpclib2:181) Internal error handling xend.domain.create Traceback (most recent call last): File "/usr/lib64/python2.4/site-packages/xen/util/xmlrpclib2.py", line 134, in _marshaled_dispatch response = self._dispatch(method, params) File "/usr/lib64/python2.4/SimpleXMLRPCServer.py", line 406, in _dispatch return func(*params) File "/usr/lib64/python2.4/site-packages/xen/xend/server/XMLRPCServer.py", line 80, in domain_create info = XendDomain.instance().domain_create(config) File "/usr/lib64/python2.4/site-packages/xen/xend/XendDomain.py", line 1001, in domain_create dominfo = XendDomainInfo.create(config) File "/usr/lib64/python2.4/site-packages/xen/xend/XendDomainInfo.py", line 97, in create domconfig = XendConfig.XendConfig(sxp_obj = config) File "/usr/lib64/python2.4/site-packages/xen/xend/XendConfig.py", line 367, in __init__ self.validate() File "/usr/lib64/python2.4/site-packages/xen/xend/XendConfig.py", line 558, in validate self._platform_sanity_check() File "/usr/lib64/python2.4/site-packages/xen/xend/XendConfig.py", line 502, in _platform_sanity_check if not os.path.exists(self['platform']['device_model']): File "/usr/lib64/python2.4/posixpath.py", line 171, in exists st = os.stat(path) TypeError: coercing to Unicode: need string or buffer, NoneType found This patch raises VmError with message that no valid device model was specified if None type was found in the device_model specification. It's been tested on non-existing device model where the message is being printed. If an invalid (but existing) device_model is set in the configuration file the domain was destroyed because it crashed. If there is a path specified (i.e. it's not using auxbin path) it bails with error that the device model was not found (which was already implemented there). Signed-off-by: Michal Novotny <minovotn@redhat.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
-rw-r--r--tools/python/xen/xend/XendConfig.py4
1 files changed, 4 insertions, 0 deletions
diff --git a/tools/python/xen/xend/XendConfig.py b/tools/python/xen/xend/XendConfig.py
index 4181d6cf3c..5568d353e5 100644
--- a/tools/python/xen/xend/XendConfig.py
+++ b/tools/python/xen/xend/XendConfig.py
@@ -498,6 +498,10 @@ class XendConfig(dict):
if os.path.dirname(self['platform']['device_model']) == "":
self['platform']['device_model'] = \
auxbin.pathTo(self['platform']['device_model'])
+ # If the device_model is not set the os.path.exists() would raise
+ # an exception so we return our error message instead if applicable
+ if not self['platform']['device_model']:
+ raise VmError("No valid device model specified")
if not os.path.exists(self['platform']['device_model']):
raise VmError("device model '%s' not found" % str(self['platform']['device_model']))