[Kimchi-devel] [PATCH V3 3/5] Validate graphics parameters input by users

apporc appleorchard2000 at gmail.com
Sun Dec 22 08:43:08 UTC 2013


1.  Validate graphics parameters from rest requester, with newly added
    json schema in kimchi.

2.  Because we are now using jsonschema.Draft3Validator in kimchi, which
    doesn't support 'oneOf' property, so i can not use this:
        "listen": {
            "type": "string",
        "oneOf": [
                { "format": "ip-address" },
                { "format": "ipv6"}
    As ipv6 is not urgent, i think just 'ipv4' validation should be enough by now.
    Which is :
        "type": { "enum": ["spice", "vnc"] },
        "listen": {
            "type": "string",
            "format": "ip-address"
        }
    We can add ipv6 validation here when the os distribution we based on provided
    high versions of jsonschema, or when we are about to replace Draft3Validator
    with Draft4Validator.

3.  To use "format" property, i need to hook format_checker for Draft3Validator in controller.py.

Signed-off-by: apporc <appleorchard2000 at gmail.com>
---
 src/kimchi/API.json      | 33 +++++++++++++++++++++++++++++++++
 src/kimchi/controller.py |  4 ++--
 2 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/src/kimchi/API.json b/src/kimchi/API.json
index 7b90826..0f97f0e 100644
--- a/src/kimchi/API.json
+++ b/src/kimchi/API.json
@@ -21,6 +21,17 @@
                     "description": "Assign a specefic Storage Pool to the new VM",
                     "type": "string",
                     "pattern": "^/storagepools/[^/]+/?$"
+                },
+                "graphics": {
+                    "description": "Configure graphics parameters for the new VM",
+                    "type": "object",
+                    "properties": {
+                        "type": { "enum": ["spice", "vnc"] },
+                        "listen": {
+                            "type": "string",
+                            "format": "ip-address"
+                        }
+                    }
                 }
             }
         },
@@ -129,6 +140,17 @@
                     "description": "Folder",
                     "type": "array",
                     "items": { "type": "string" }
+                },
+                "graphics": {
+                    "description": "Configure graphics parameters for the new VM",
+                    "type": "object",
+                    "properties": {
+                        "type": { "enum": ["spice", "vnc"] },
+                        "listen": {
+                            "type": "string",
+                            "format": "ip-address"
+                        }
+                    }
                 }
             },
             "additionalProperties": false
@@ -202,6 +224,17 @@
                     "description": "Folder",
                     "type": "array",
                     "items": { "type": "string" }
+                },
+                "graphics": {
+                    "description": "Configure graphics parameters for the new VM",
+                    "type": "object",
+                    "properties": {
+                        "type": { "enum": ["spice", "vnc"] },
+                        "listen": {
+                            "type": "string",
+                            "format": "ip-address"
+                        }
+                    }
                 }
             },
             "additionalProperties": false
diff --git a/src/kimchi/controller.py b/src/kimchi/controller.py
index dacaa6a..003adf2 100644
--- a/src/kimchi/controller.py
+++ b/src/kimchi/controller.py
@@ -26,7 +26,7 @@ import urllib2
 
 
 from functools import wraps
-from jsonschema import Draft3Validator, ValidationError
+from jsonschema import Draft3Validator, ValidationError, FormatChecker
 
 
 import kimchi.template
@@ -94,7 +94,7 @@ def validate_params(params, instance, action):
     else:
         return
     operation = model_fn(instance, action)
-    validator = Draft3Validator(api_schema)
+    validator = Draft3Validator(api_schema, format_checker=FormatChecker())
     request = {operation: params}
     try:
         validator.validate(request)
-- 
1.8.1.2




More information about the Kimchi-devel mailing list