On 06/26/2014 03:47 AM, lvroyce(a)linux.vnet.ibm.com wrote:
> From: Royce Lv <lvroyce(a)linux.vnet.ibm.com>
>
> Add function for cdrom and disk form validation,
> so that cdrom will not be created when no path given.
Royce, the backend should be able to handle those cases.
It is the error I got when I tried to add a cdrom without passing a
"path" using curl
Yes, backend needs to handle this. 500Error needs to be
fixed. Also
front end will alert user to when the wrong input is coming for early
error discovery.
alinefm@alinefm:~/mail-patches$ curl -u banana:linux99 -H
"Content-Type: application/json" -H "Accept: application/json"
https://localhost:8001/vms/Ubuntu13-10/storages -d'{"type":
"cdrom"}'
-X POST -k
{
"reason":"The server encountered an unexpected condition which
prevented it from fulfilling the request.",
"code":"500 Internal Server Error",
"call_stack":"Traceback (most recent call last):\n File
\"/usr/lib/python2.7/dist-packages/cherrypy/_cprequest.py\", line 656,
in respond\n response.body = self.handler()\n File
\"/usr/lib/python2.7/dist-packages/cherrypy/lib/encoding.py\", line
188, in __call__\n self.body = self.oldhandler(*args, **kwargs)\n File
\"/usr/lib/python2.7/dist-packages/cherrypy/_cpdispatch.py\", line 34,
in __call__\n return self.callable(*self.args, **self.kwargs)\n File
\"/home/alinefm/kimchi/src/kimchi/control/base.py\", line 270, in
index\n return self.create(parse_request(), *args)\n File
\"/home/alinefm/kimchi/src/kimchi/control/base.py\", line 209, in
create\n name = create(*args)\n File
\"/home/alinefm/kimchi/src/kimchi/model/vmstorages.py\", line 171, in
create\n params['src_type'] = _check_path(params['path'])\nKeyError:
'path'\n"
And in console:
127.0.0.1 - - [26/Jun/2014:17:19:12] "POST /vms/Ubuntu13-10/storages
HTTP/1.0" 500 1009 "" "curl/7.27.0"
[26/Jun/2014:17:19:14] HTTP
Request Headers:
AUTHORIZATION: Basic YmFuYW5hOmxpbnV4OTk=
Content-Length: 17
HOST: localhost
CONNECTION: close
Remote-Addr: 127.0.0.1
X-REAL-IP: 127.0.0.1
ACCEPT: application/json
USER-AGENT: curl/7.27.0
X-FORWARDED-FOR: 127.0.0.1
Content-Type: application/json
[26/Jun/2014:17:19:14] HTTP Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/cherrypy/_cprequest.py", line
656, in respond
response.body = self.handler()
File "/usr/lib/python2.7/dist-packages/cherrypy/lib/encoding.py", line
188, in __call__
self.body = self.oldhandler(*args, **kwargs)
File "/usr/lib/python2.7/dist-packages/cherrypy/_cpdispatch.py", line
34, in __call__
return self.callable(*self.args, **self.kwargs)
File "/home/alinefm/kimchi/src/kimchi/control/base.py", line 270, in
index
return self.create(parse_request(), *args)
File "/home/alinefm/kimchi/src/kimchi/control/base.py", line 209, in
create
name = create(*args)
File "/home/alinefm/kimchi/src/kimchi/model/vmstorages.py", line 171,
in create
params['src_type'] = _check_path(params['path'])
KeyError: 'path'
The same error occurs when I used type == 'disk'
alinefm@alinefm:~/mail-patches$ curl -u banana:linux99 -H
"Content-Type: application/json" -H "Accept: application/json"
https://localhost:8001/vms/Ubuntu13-10/storages -d'{"type":
"disk"}'
-X POST -k
{
"reason":"The server encountered an unexpected condition which
prevented it from fulfilling the request.",
"code":"500 Internal Server Error",
"call_stack":"Traceback (most recent call last):\n File
\"/usr/lib/python2.7/dist-packages/cherrypy/_cprequest.py\", line 656,
in respond\n response.body = self.handler()\n File
\"/usr/lib/python2.7/dist-packages/cherrypy/lib/encoding.py\", line
188, in __call__\n self.body = self.oldhandler(*args, **kwargs)\n File
\"/usr/lib/python2.7/dist-packages/cherrypy/_cpdispatch.py\", line 34,
in __call__\n return self.callable(*self.args, **self.kwargs)\n File
\"/home/alinefm/kimchi/src/kimchi/control/base.py\", line 270, in
index\n return self.create(parse_request(), *args)\n File
\"/home/alinefm/kimchi/src/kimchi/control/base.py\", line 209, in
create\n name = create(*args)\n File
\"/home/alinefm/kimchi/src/kimchi/model/vmstorages.py\", line 171, in
create\n params['src_type'] = _check_path(params['path'])\nKeyError:
'path'\n"
> Signed-off-by: Royce Lv <lvroyce(a)linux.vnet.ibm.com>
> ---
> ui/js/src/kimchi.guest_storage_add.main.js | 28
> ++++++++++++++++++++++++++++
> ui/pages/i18n.json.tmpl | 7 +++++--
> 2 files changed, 33 insertions(+), 2 deletions(-)
>
> diff --git a/ui/js/src/kimchi.guest_storage_add.main.js
> b/ui/js/src/kimchi.guest_storage_add.main.js
> index 80045d3..a7e4c4c 100644
> --- a/ui/js/src/kimchi.guest_storage_add.main.js
> +++ b/ui/js/src/kimchi.guest_storage_add.main.js
> @@ -135,6 +135,25 @@ kimchi.guest_storage_add_main = function() {
> });
> });
>
> + var validateCDROM = function(settings) {
> + if (/(^\/.*)$/.test(settings['path']))
> + return true;
> + else {
> + kimchi.message.error.code('KCHVMSTOR0001E');
> + return false;
> + }
> + }
> +
> + var validateDisk = function(settings) {
> + if (settings['pool'] && settings['vol'])
> + return true;
> + else {
> + kimchi.message.error.code('KCHVMSTOR0002E');
> + return false;
> + }
> + }
> +
> + validator = {cdrom: validateCDROM, disk: validateDisk};
> var submitForm = function(event) {
> if (submitButton.prop('disabled')) {
> return false;
> @@ -155,6 +174,15 @@ kimchi.guest_storage_add_main = function() {
> settings[$(c).attr('name')] = $(c).val();
> }
> });
> + // Validate form for cdrom and disk
> + validateSpecifiedForm = validator[settings['type']];
> + if (!validateSpecifiedForm(settings)) {
> + $(submitButton).prop('disabled', false);
> + $.each([submitButton, nameTextbox, pathTextbox, poolTextbox,
> volTextbox], function(i, c) {
> + $(c).prop('disabled', false);
> + });
> + return false;
> + }
> $(submitButton).addClass('loading').text(i18n['KCHVMCD6003M']);
>
> kimchi.addVMStorage(settings, function(result) {
> diff --git a/ui/pages/i18n.json.tmpl b/ui/pages/i18n.json.tmpl
> index ce23bc4..d765cf2 100644
> --- a/ui/pages/i18n.json.tmpl
> +++ b/ui/pages/i18n.json.tmpl
> @@ -162,5 +162,8 @@
> "KCHPOOL6009E": "$_("This is not a valid Server Name or IP.
please,
> modify it.")",
> "KCHPOOL6010M": "$_("Looking for available partitions
...")",
> "KCHPOOL6011M": "$_("No available partitions
found.")",
> - "KCHPOOL6012M": "$_("This storage pool is not persistent.
Instead
> of deactivate, this action will permanently delete it. Would you like
> to continue?")"
> -}
> \ No newline at end of file
> + "KCHPOOL6012M": "$_("This storage pool is not persistent.
Instead
> of deactivate, this action will permanently delete it. Would you like
> to continue?")",
> +
> + "KCHVMSTOR0001E": "$_("CDROM path need to be a valid local path
and
> cannot be blank.")",
> + "KCHVMSTOR0002E": "$_("Disk pool or volume cannot be
blank.")"
> +}