selecting k8scluster at deployment. Allow day2 action primitive for kdu
[osm/NBI.git] / osm_nbi / validation.py
index b6ef64c..c3e37f7 100644 (file)
@@ -307,6 +307,7 @@ ns_action = {   # TODO for the moment it is only contemplated the vnfd primitive
         "vnf_member_index": name_schema,  # TODO for backward compatibility. To remove in future
         "vdu_id": name_schema,
         "vdu_count_index": integer0_schema,
+        "kdu_name": name_schema,
         "primitive": name_schema,
         "primitive_params": {"type": "object"},
     },
@@ -349,6 +350,8 @@ ns_scale = {   # TODO for the moment it is only VDU-scaling
 
 schema_version = {"type": "string", "enum": ["1.0"]}
 schema_type = {"type": "string"}
+vim_type = {"enum": ["openstack", "openvim", "vmware", "opennebula", "aws", "azure", "fos"]}
+
 vim_account_edit_schema = {
     "title": "vim_account edit input schema",
     "$schema": "http://json-schema.org/draft-04/schema#",
@@ -356,14 +359,14 @@ vim_account_edit_schema = {
     "properties": {
         "name": name_schema,
         "description": description_schema,
-        "type": shortname_schema,
         "vim": name_schema,
         "datacenter": name_schema,
+        "vim_type": vim_type,
         "vim_url": description_schema,
-        "vim_url_admin": description_schema,
-        "vim_tenant": name_schema,
+        "vim_url_admin": description_schema,
+        "vim_tenant": name_schema,
         "vim_tenant_name": name_schema,
-        "vim_username": shortname_schema,
+        "vim_user": shortname_schema,
         "vim_password": passwd_schema,
         "config": {"type": "object"}
     },
@@ -381,7 +384,7 @@ vim_account_new_schema = {
         "description": description_schema,
         "vim": name_schema,
         "datacenter": name_schema,
-        "vim_type": {"enum": ["openstack", "openvim", "vmware", "opennebula", "aws", "azure", "fos"]},
+        "vim_type": vim_type,
         "vim_url": description_schema,
         # "vim_url_admin": description_schema,
         # "vim_tenant": name_schema,
@@ -394,6 +397,8 @@ vim_account_new_schema = {
     "additionalProperties": False
 }
 
+wim_type = {"enum": ["tapi", "onos", "odl", "dynpac", "fake"]}
+
 wim_account_edit_schema = {
     "title": "wim_account edit input schema",
     "$schema": "http://json-schema.org/draft-04/schema#",
@@ -401,8 +406,8 @@ wim_account_edit_schema = {
     "properties": {
         "name": name_schema,
         "description": description_schema,
-        "type": shortname_schema,
         "wim": name_schema,
+        "wim_type": wim_type,
         "wim_url": description_schema,
         "user": shortname_schema,
         "password": passwd_schema,
@@ -421,7 +426,7 @@ wim_account_new_schema = {
         "name": name_schema,
         "description": description_schema,
         "wim": name_schema,
-        "wim_type": {"enum": ["tapi", "onos", "odl", "dynpac", "fake"]},
+        "wim_type": wim_type,
         "wim_url": description_schema,
         "user": shortname_schema,
         "password": passwd_schema,
@@ -499,6 +504,75 @@ sdn_external_port_schema = {
     "required": ["port"]
 }
 
+# K8s Clusters
+k8scluster_nets_schema = {
+    "title": "k8scluster nets input schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "patternProperties": {".": string_schema},
+    "minProperties": 1,
+    "additionalProperties": False
+}
+k8scluster_new_schema = {
+    "title": "k8scluster creation input schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties": {
+        "schema_version": schema_version,
+        "schema_type": schema_type,
+        "name": name_schema,
+        "description": description_schema,
+        "credentials": object_schema,
+        "vim_account": id_schema,
+        "k8s_version": string_schema,
+        "nets": k8scluster_nets_schema,
+        "namespace": name_schema,
+        "cni": nameshort_list_schema,
+    },
+    "required": ["name", "credentials", "vim_account", "k8s_version", "nets"],
+    "additionalProperties": False
+}
+k8scluster_edit_schema = {
+    "title": "vim_account edit input schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties": {
+        "name": name_schema,
+        "description": description_schema,
+        "credentials": object_schema,
+        "vim_account": id_schema,
+        "k8s_version": string_schema,
+        "nets": k8scluster_nets_schema,
+        "namespace": name_schema,
+        "cni": nameshort_list_schema,
+    },
+    "additionalProperties": False
+}
+
+# K8s Repos
+k8srepo_types = {"enum": ["chart", "bundle"]}
+k8srepo_properties = {
+    "name": name_schema,
+    "description": description_schema,
+    "type": k8srepo_types,
+    "url": description_schema,
+}
+k8srepo_new_schema = {
+    "title": "k8scluster creation input schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties": k8srepo_properties,
+    "required": ["name", "type", "url"],
+    "additionalProperties": False
+}
+k8srepo_edit_schema = {
+    "title": "vim_account edit input schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties": k8srepo_properties,
+    "additionalProperties": False
+}
+
 # PDUs
 pdu_interface = {
     "type": "object",
@@ -631,6 +705,8 @@ user_edit_schema = {
 }
 
 # PROJECTS
+topics_with_quota = ["vnfds", "nsds", "nsts", "pdus", "nsrs", "nsis", "vim_accounts", "wim_accounts", "sdns",
+                     "k8sclusters", "k8srepos"]
 project_new_schema = {
     "$schema": "http://json-schema.org/draft-04/schema#",
     "title": "New project schema for administrators",
@@ -638,6 +714,11 @@ project_new_schema = {
     "properties": {
         "name": shortname_schema,
         "admin": bool_schema,
+        "quotas": {
+            "type": "object",
+            "properties": {topic: integer0_schema for topic in topics_with_quota},
+            "additionalProperties": False
+        },
     },
     "required": ["name"],
     "additionalProperties": False
@@ -649,6 +730,11 @@ project_edit_schema = {
     "properties": {
         "admin": bool_schema,
         "name": shortname_schema,     # To allow Project Name modification
+        "quotas": {
+            "type": "object",
+            "properties": {topic: {"oneOf": [integer0_schema, null_schema]} for topic in topics_with_quota},
+            "additionalProperties": False
+        },
     },
     "additionalProperties": False,
     "minProperties": 1
@@ -807,5 +893,5 @@ def is_valid_uuid(x):
     try:
         if UUID(x):
             return True
-    except (TypeError, ValueError):
+    except (TypeError, ValueError, AttributeError):
         return False