X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=NG-RO%2Fosm_ng_ro%2Fvalidation.py;h=e4eed742f222dc706d384b40bcb9c5d414e2de03;hb=HEAD;hp=060a3ebbf4bd377b0401b4c9f8a27d7612fa9d68;hpb=1d213f4c8825da8347ffb07b3eaa1315f0fab698;p=osm%2FRO.git diff --git a/NG-RO/osm_ng_ro/validation.py b/NG-RO/osm_ng_ro/validation.py index 060a3ebb..e4eed742 100644 --- a/NG-RO/osm_ng_ro/validation.py +++ b/NG-RO/osm_ng_ro/validation.py @@ -13,9 +13,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -from jsonschema import validate as js_v, exceptions as js_e from http import HTTPStatus +from jsonschema import exceptions as js_e, validate as js_v + __author__ = "Alfonso Tierno " __version__ = "0.1" version_date = "Jun 2020" @@ -25,32 +26,64 @@ Validator of input data using JSON schemas """ # Basis schemas -name_schema = {"type": "string", "minLength": 1, "maxLength": 255, "pattern": "^[^,;()'\"]+$"} +name_schema = { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "^[^,;()'\"]+$", +} string_schema = {"type": "string", "minLength": 1, "maxLength": 255} ssh_key_schema = {"type": "string", "minLength": 1} -id_schema = {"type": "string", "pattern": "^[a-fA-F0-9]{8}(-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$"} +id_schema = { + "type": "string", + "pattern": "^[a-fA-F0-9]{8}(-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$", +} bool_schema = {"type": "boolean"} null_schema = {"type": "null"} +object_schema = {"type": "object"} -image_schema = { - "title": "image input validation", +deploy_item_schema = { + "title": "deploy item validation. Each vld, vdu, flavor, image, ...", "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", - # TODO + "properties": { + "id": string_schema, + "vim_info": object_schema, + "common_id": string_schema, + }, + "additionalProperties": True, +} + +deploy_item_list = { + "type": "array", + "items": deploy_item_schema, } -flavor_schema = { - "title": "image input validation", +deploy_vnf_schema = { + "title": "deploy.vnf.item validation", "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", - # TODO + "properties": { + "_id": id_schema, + "vdur": deploy_item_list, + "vld": deploy_item_list, + }, + "additionalProperties": True, + "required": ["_id"], } -ns_schema = { - "title": "image input validation", +deploy_action_schema = { + "title": "deploy.action validation", "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", - # TODO + "properties": { + "action": {"enum": ["inject_ssh_key"]}, + "key": ssh_key_schema, + "user": string_schema, + "password": string_schema, + }, + "additionalProperties": False, + "required": ["action"], } deploy_schema = { @@ -59,35 +92,41 @@ deploy_schema = { "type": "object", "properties": { "action_id": string_schema, - "name": name_schema, - "action": {"enum" ["inject_ssh_key"]}, - "key": ssh_key_schema, - "user": name_schema, - "password": string_schema, + "cloud_init_content": object_schema, + "name": string_schema, + "action": deploy_action_schema, "vnf": { + "type": "array", + "items": deploy_vnf_schema, + }, + "image": deploy_item_list, + "flavor": deploy_item_list, + "shared-volumes": deploy_item_list, + "ns": { "type": "object", "properties": { - "_id": id_schema, - # TODO + "vld": deploy_item_list, }, - "required": ["_id"], - "additionalProperties": True, - }, - "image": { - "type": "array", - "minItems": 1, - "items": image_schema }, - "flavor": { - "type": "array", - "minItems": 1, - "items": flavor_schema - }, - "ns": ns_schema, + "affinity-or-anti-affinity-group": deploy_item_list, }, + "additionalProperties": False, +} - "required": ["name"], - "additionalProperties": False +rebuild_schema = { + "$schema": "http://json-schema.org/draft-04/schema#", + "vm_rebuild": { + "type": "array", + "items": { + "type": "object", + "properties": { + "vdu-id": id_schema, + "vim_name": name_schema, + "member-vnf-index": name_schema, + }, + }, + "additionalProperties": True, + }, } @@ -107,12 +146,17 @@ def validate_input(indata, schema_to_use): try: if schema_to_use: js_v(indata, schema_to_use) + return None except js_e.ValidationError as e: if e.path: error_pos = "at '" + ":".join(map(str, e.path)) + "'" else: error_pos = "" + raise ValidationError("Format error {} '{}' ".format(error_pos, e.message)) except js_e.SchemaError: - raise ValidationError("Bad json schema {}".format(schema_to_use), http_code=HTTPStatus.INTERNAL_SERVER_ERROR) + raise ValidationError( + "Bad json schema {}".format(schema_to_use), + http_code=HTTPStatus.INTERNAL_SERVER_ERROR, + )