[PATCH V2] issue #447: Check download URL prior to start Task

When user provides an invalid donwload URL, the error message "Unexpected exception" was displayed without any more information. On Kimchi logs, there is: Error in async_task 1 Traceback (most recent call last): File "/home/alinefm/kimchi/src/kimchi/asynctask.py", line 72, in _run_helper self.fn(cb, opaque) File "/home/alinefm/kimchi/src/kimchi/model/storagevolumes.py", line 192, in _create_volume_with_url with contextlib.closing(urllib2.urlopen(url)) as response: File "/usr/lib64/python2.7/urllib2.py", line 127, in urlopen return _opener.open(url, data, timeout) File "/usr/lib64/python2.7/urllib2.py", line 404, in open response = self._open(req, data) File "/usr/lib64/python2.7/urllib2.py", line 422, in _open '_open', req) File "/usr/lib64/python2.7/urllib2.py", line 382, in _call_chain result = func(*args) File "/usr/lib64/python2.7/urllib2.py", line 1224, in https_open return self.do_open(httplib.HTTPSConnection, req) File "/usr/lib64/python2.7/urllib2.py", line 1186, in do_open raise URLError(err) URLError: <urlopen error [Errno -2] Name or service not known> It is because the download URL was not being checked prior to start the Task and this case was not checked on Task handler. To solver it, check if the download URL is accessible prior to start the Task so user can change it accordingly. Signed-off-by: Aline Manera <alinefm@linux.vnet.ibm.com> --- src/kimchi/i18n.py | 1 + src/kimchi/model/storagevolumes.py | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py index 4466d23..d402dde 100644 --- a/src/kimchi/i18n.py +++ b/src/kimchi/i18n.py @@ -190,6 +190,7 @@ messages = { "KCHVOL0019E": _("Create volume from %(param)s is not supported"), "KCHVOL0020E": _("Storage volume capacity must be an integer number."), "KCHVOL0021E": _("Storage volume URL must be http://, https://, ftp:// or ftps://."), + "KCHVOL0022E": _("Unable to access file %(url)s. Please, check it."), "KCHIFACE0001E": _("Interface %(name)s does not exist"), diff --git a/src/kimchi/model/storagevolumes.py b/src/kimchi/model/storagevolumes.py index ac6887a..cc61e68 100644 --- a/src/kimchi/model/storagevolumes.py +++ b/src/kimchi/model/storagevolumes.py @@ -67,6 +67,14 @@ class StorageVolumesModel(object): create_param = vol_source[index_list[0]] + # Verify if the URL is valid + if create_param == 'url': + url = params['url'] + try: + urllib2.urlopen(url).close() + except: + raise InvalidParameter('KCHVOL0022E', {'url': url}) + if name is None: # the methods listed in 'REQUIRE_NAME_PARAMS' cannot have # 'name' == None -- 1.9.3

Reviewed-by: Crístian Viana <vianac@linux.vnet.ibm.com> On Qui, 2014-09-25 at 12:10 -0300, Aline Manera wrote:
When user provides an invalid donwload URL, the error message "Unexpected exception" was displayed without any more information.
On Kimchi logs, there is:
Error in async_task 1 Traceback (most recent call last): File "/home/alinefm/kimchi/src/kimchi/asynctask.py", line 72, in _run_helper self.fn(cb, opaque) File "/home/alinefm/kimchi/src/kimchi/model/storagevolumes.py", line 192, in _create_volume_with_url with contextlib.closing(urllib2.urlopen(url)) as response: File "/usr/lib64/python2.7/urllib2.py", line 127, in urlopen return _opener.open(url, data, timeout) File "/usr/lib64/python2.7/urllib2.py", line 404, in open response = self._open(req, data) File "/usr/lib64/python2.7/urllib2.py", line 422, in _open '_open', req) File "/usr/lib64/python2.7/urllib2.py", line 382, in _call_chain result = func(*args) File "/usr/lib64/python2.7/urllib2.py", line 1224, in https_open return self.do_open(httplib.HTTPSConnection, req) File "/usr/lib64/python2.7/urllib2.py", line 1186, in do_open raise URLError(err) URLError: <urlopen error [Errno -2] Name or service not known>
It is because the download URL was not being checked prior to start the Task and this case was not checked on Task handler.
To solver it, check if the download URL is accessible prior to start the Task so user can change it accordingly.
Signed-off-by: Aline Manera <alinefm@linux.vnet.ibm.com> --- src/kimchi/i18n.py | 1 + src/kimchi/model/storagevolumes.py | 8 ++++++++ 2 files changed, 9 insertions(+)
diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py index 4466d23..d402dde 100644 --- a/src/kimchi/i18n.py +++ b/src/kimchi/i18n.py @@ -190,6 +190,7 @@ messages = { "KCHVOL0019E": _("Create volume from %(param)s is not supported"), "KCHVOL0020E": _("Storage volume capacity must be an integer number."), "KCHVOL0021E": _("Storage volume URL must be http://, https://, ftp:// or ftps://."), + "KCHVOL0022E": _("Unable to access file %(url)s. Please, check it."),
"KCHIFACE0001E": _("Interface %(name)s does not exist"),
diff --git a/src/kimchi/model/storagevolumes.py b/src/kimchi/model/storagevolumes.py index ac6887a..cc61e68 100644 --- a/src/kimchi/model/storagevolumes.py +++ b/src/kimchi/model/storagevolumes.py @@ -67,6 +67,14 @@ class StorageVolumesModel(object):
create_param = vol_source[index_list[0]]
+ # Verify if the URL is valid + if create_param == 'url': + url = params['url'] + try: + urllib2.urlopen(url).close() + except: + raise InvalidParameter('KCHVOL0022E', {'url': url}) + if name is None: # the methods listed in 'REQUIRE_NAME_PARAMS' cannot have # 'name' == None
participants (2)
-
Aline Manera
-
Crístian Viana