
On Jun 20 12:48PM, Aline Manera wrote:
On 06/14/2016 07:26 PM, pvital@linux.vnet.ibm.com wrote:
From: Paulo Vital <pvital@linux.vnet.ibm.com>
urllib2 raised URLError when could not access a remote file due to unauthorized access, for example. This patch gives to VMTemplate the ability of handle this exception and raises a relevant error message to user.
This patch fixes Issue #959
Signed-off-by: Paulo Vital <pvital@linux.vnet.ibm.com> --- i18n.py | 1 + vmtemplate.py | 3 +++ 2 files changed, 4 insertions(+)
diff --git a/i18n.py b/i18n.py index 2d8390f..b33c6ec 100644 --- a/i18n.py +++ b/i18n.py @@ -52,6 +52,7 @@ messages = { "to file access control lists for '%(user)s' user if possible, or add the " "'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x 'path_to_iso'." "Details: %(err)s" ), + "KCHISO0009E": _("Unable to access remote ISO. Details: %(err)s"),
"KCHIMG0001E": _("An error occurred when probing image OS information."), "KCHIMG0003E": _("Unable to read image file %(filename)s"), diff --git a/vmtemplate.py b/vmtemplate.py index ef92914..6faf4c5 100644 --- a/vmtemplate.py +++ b/vmtemplate.py @@ -24,6 +24,7 @@ import urlparse import uuid from lxml import etree from lxml.builder import E +from urllib2 import URLError
from wok.exception import InvalidParameter, ImageFormatError, IsoFormatError from wok.exception import MissingParameter, OperationFailed @@ -172,6 +173,8 @@ class VMTemplate(object): return iso_img.probe() except IsoFormatError:
raise InvalidParameter("KCHISO0001E", {'filename': iso}) + except URLError as e: + raise OperationFailed("KCHISO0009E", {'err': e})
The IsoImage() should raise a IsoFormatError. We need to check why it is not being done. Is there proper error handlers there?
No. If I trace from where the exception is coming, the results is: IsoImage()->__init__()->_scan()->_get_iso_data() line 422 and none of these methods are handling exceptions, specially the exceptions or errors from urllib2 module. I can add a try/exception block in _get_iso_data() and raise something, but IMO IsoFormatError is not the correct name for this error - the problem is not related to an ISO format, but not able to access the remote link. Because of this difference on the kind of error raised, I coded on vmtemplate.
def _get_cdrom_xml(self, libvirt_stream_protocols): if 'cdrom' not in self.info: -- 2.5.5
-- Paulo Ricardo Paz Vital Linux Technology Center, IBM Systems http://www.ibm.com/linux/ltc/