[Kimchi-devel] [PATCHv3 2/2] issue#382: Validate form for adding guest cdrom
Royce Lv
lvroyce at linux.vnet.ibm.com
Fri Jun 27 03:40:04 UTC 2014
On 2014年06月27日 04:23, Aline Manera wrote:
> On 06/26/2014 03:47 AM, lvroyce at linux.vnet.ibm.com wrote:
>> From: Royce Lv <lvroyce at 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 at 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 at 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 at 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.")"
>> +}
>
More information about the Kimchi-devel
mailing list