[Kimchi-devel] [PATCH V2] issue #447: Check download URL prior to start Task
Crístian Viana
vianac at linux.vnet.ibm.com
Thu Sep 25 15:22:13 UTC 2014
Reviewed-by: Crístian Viana <vianac at 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 at 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
More information about the Kimchi-devel
mailing list