Fix age key generation to convert pubkey to string
[osm/NBI.git] / osm_nbi / validation.py
index 6a6eeee..a1911dd 100644 (file)
@@ -35,6 +35,10 @@ shortname_schema = {
     "pattern": "^[^,;()\\.\\$'\"]+$",
 }
 passwd_schema = {"type": "string", "minLength": 1, "maxLength": 60}
+user_passwd_schema = {
+    "type": "string",
+    "pattern": "^.*(?=.{8,})((?=.*[!@#$%^&*()\\-_=+{};:,<.>]){1})(?=.*\\d)((?=.*[a-z]){1})((?=.*[A-Z]){1}).*$",
+}
 name_schema = {
     "type": "string",
     "minLength": 1,
@@ -94,6 +98,10 @@ ip_schema = {
     "type": "string",
     "pattern": "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$",
 }
+ipv6_schema = {
+    "type": "string",
+    "pattern": "(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))",  # noqa: W605
+}
 ip_prefix_schema = {
     "type": "string",
     "pattern": "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}"
@@ -133,6 +141,8 @@ ns_instantiate_vdu = {
     "type": "object",
     "properties": {
         "id": name_schema,
+        "vim-flavor-id": name_schema,
+        "instance_name": name_schema,
         "volume": {
             "type": "array",
             "minItems": 1,
@@ -153,7 +163,7 @@ ns_instantiate_vdu = {
                 "type": "object",
                 "properties": {
                     "name": name_schema,
-                    "ip-address": ip_schema,
+                    "ip-address": {"oneOf": [ip_schema, ipv6_schema]},
                     "mac-address": mac_schema,
                     "floating-ip-required": bool_schema,
                 },
@@ -172,7 +182,7 @@ ip_profile_dns_schema = {
     "items": {
         "type": "object",
         "properties": {
-            "address": ip_schema,
+            "address": {"oneOf": [ip_schema, ipv6_schema]},
         },
         "required": ["address"],
         "additionalProperties": False,
@@ -190,19 +200,6 @@ ip_profile_dhcp_schema = {
 }
 
 ip_profile_schema = {
-    "title": "ip profile validation schema",
-    "$schema": "http://json-schema.org/draft-04/schema#",
-    "type": "object",
-    "properties": {
-        "ip-version": {"enum": ["ipv4", "ipv6"]},
-        "subnet-address": ip_prefix_schema,
-        "gateway-address": ip_schema,
-        "dns-server": ip_profile_dns_schema,
-        "dhcp-params": ip_profile_dhcp_schema,
-    },
-}
-
-ip_profile_update_schema = {
     "title": "ip profile validation schema",
     "$schema": "http://json-schema.org/draft-04/schema#",
     "type": "object",
@@ -242,14 +239,14 @@ provider_network_schema = {
 }
 
 ns_instantiate_internal_vld = {
-    "title": "ns action instantiate input schema for vdu",
+    "title": "ns action instantiate input schema for vld",
     "$schema": "http://json-schema.org/draft-04/schema#",
     "type": "object",
     "properties": {
         "name": name_schema,
         "vim-network-name": name_schema,
         "vim-network-id": name_schema,
-        "ip-profile": ip_profile_update_schema,
+        "ip-profile": ip_profile_schema,
         "provider-network": provider_network_schema,
         "internal-connection-point": {
             "type": "array",
@@ -312,6 +309,44 @@ additional_params_for_vnf = {
                     "additionalProperties": False,
                 },
             },
+            "affinity-or-anti-affinity-group": {
+                "type": "array",
+                "items": {
+                    "type": "object",
+                    "properties": {
+                        "id": name_schema,
+                        "vim-affinity-group-id": name_schema,
+                    },
+                    "required": ["id"],
+                    "minProperties": 2,
+                    "additionalProperties": False,
+                },
+            },
+        },
+        "required": ["member-vnf-index"],
+        "minProperties": 2,
+        "additionalProperties": False,
+    },
+}
+
+vnf_schema = {
+    "type": "array",
+    "minItems": 1,
+    "items": {
+        "type": "object",
+        "properties": {
+            "member-vnf-index": name_schema,
+            "vimAccountId": id_schema,
+            "vdu": {
+                "type": "array",
+                "minItems": 1,
+                "items": ns_instantiate_vdu,
+            },
+            "internal-vld": {
+                "type": "array",
+                "minItems": 1,
+                "items": ns_instantiate_internal_vld,
+            },
         },
         "required": ["member-vnf-index"],
         "minProperties": 2,
@@ -319,6 +354,57 @@ additional_params_for_vnf = {
     },
 }
 
+vld_schema = {
+    "type": "array",
+    "minItems": 1,
+    "items": {
+        "type": "object",
+        "properties": {
+            "name": string_schema,
+            "vim-network-name": {"oneOf": [string_schema, object_schema]},
+            "vim-network-id": {"oneOf": [string_schema, object_schema]},
+            "ns-net": object_schema,
+            "wimAccountId": {"oneOf": [id_schema, bool_schema, null_schema]},
+            "ip-profile": ip_profile_schema,
+            "provider-network": provider_network_schema,
+            "vnfd-connection-point-ref": {
+                "type": "array",
+                "minItems": 1,
+                "items": {
+                    "type": "object",
+                    "properties": {
+                        "member-vnf-index-ref": name_schema,
+                        "vnfd-connection-point-ref": name_schema,
+                        "ip-address": {"oneOf": [ip_schema, ipv6_schema]},
+                        # "mac-address": mac_schema,
+                    },
+                    "required": [
+                        "member-vnf-index-ref",
+                        "vnfd-connection-point-ref",
+                    ],
+                    "minProperties": 3,
+                    "additionalProperties": False,
+                },
+            },
+        },
+        "required": ["name"],
+        "additionalProperties": False,
+    },
+}
+
+ns_config_template = {
+    "title": " ns config template input schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties": {
+        "name": string_schema,
+        "nsdId": id_schema,
+        "config": object_schema,
+    },
+    "required": ["name", "nsdId", "config"],
+    "additionalProperties": False,
+}
+
 ns_instantiate = {
     "title": "ns action instantiate input schema",
     "$schema": "http://json-schema.org/draft-04/schema#",
@@ -331,6 +417,7 @@ ns_instantiate = {
         "nsDescription": {"oneOf": [description_schema, null_schema]},
         "nsdId": id_schema,
         "vimAccountId": id_schema,
+        "nsConfigTemplateId": id_schema,
         "wimAccountId": {"oneOf": [id_schema, bool_schema, null_schema]},
         "placement-engine": string_schema,
         "placement-constraints": object_schema,
@@ -342,67 +429,8 @@ ns_instantiate = {
         "timeout_ns_deploy": integer1_schema,
         "nsr_id": id_schema,
         "vduImage": name_schema,
-        "vnf": {
-            "type": "array",
-            "minItems": 1,
-            "items": {
-                "type": "object",
-                "properties": {
-                    "member-vnf-index": name_schema,
-                    "vimAccountId": id_schema,
-                    "vdu": {
-                        "type": "array",
-                        "minItems": 1,
-                        "items": ns_instantiate_vdu,
-                    },
-                    "internal-vld": {
-                        "type": "array",
-                        "minItems": 1,
-                        "items": ns_instantiate_internal_vld,
-                    },
-                },
-                "required": ["member-vnf-index"],
-                "minProperties": 2,
-                "additionalProperties": False,
-            },
-        },
-        "vld": {
-            "type": "array",
-            "minItems": 1,
-            "items": {
-                "type": "object",
-                "properties": {
-                    "name": string_schema,
-                    "vim-network-name": {"oneOf": [string_schema, object_schema]},
-                    "vim-network-id": {"oneOf": [string_schema, object_schema]},
-                    "ns-net": object_schema,
-                    "wimAccountId": {"oneOf": [id_schema, bool_schema, null_schema]},
-                    "ip-profile": object_schema,
-                    "provider-network": provider_network_schema,
-                    "vnfd-connection-point-ref": {
-                        "type": "array",
-                        "minItems": 1,
-                        "items": {
-                            "type": "object",
-                            "properties": {
-                                "member-vnf-index-ref": name_schema,
-                                "vnfd-connection-point-ref": name_schema,
-                                "ip-address": ip_schema,
-                                # "mac-address": mac_schema,
-                            },
-                            "required": [
-                                "member-vnf-index-ref",
-                                "vnfd-connection-point-ref",
-                            ],
-                            "minProperties": 3,
-                            "additionalProperties": False,
-                        },
-                    },
-                },
-                "required": ["name"],
-                "additionalProperties": False,
-            },
-        },
+        "vnf": vnf_schema,
+        "vld": vld_schema,
     },
     "required": ["nsName", "nsdId", "vimAccountId"],
     "additionalProperties": False,
@@ -423,6 +451,73 @@ ns_terminate = {
     "additionalProperties": False,
 }
 
+ns_update = {
+    "title": "ns update input schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties": {
+        "lcmOperationType": string_schema,
+        "nsInstanceId": id_schema,
+        "timeout_ns_update": integer1_schema,
+        "updateType": {
+            "enum": [
+                "CHANGE_VNFPKG",
+                "REMOVE_VNF",
+                "MODIFY_VNF_INFORMATION",
+                "OPERATE_VNF",
+                "VERTICAL_SCALE",
+            ]
+        },
+        "modifyVnfInfoData": {
+            "type": "object",
+            "properties": {
+                "vnfInstanceId": id_schema,
+                "vnfdId": id_schema,
+            },
+            "required": ["vnfInstanceId", "vnfdId"],
+        },
+        "removeVnfInstanceId": id_schema,
+        "changeVnfPackageData": {
+            "type": "object",
+            "properties": {
+                "vnfInstanceId": id_schema,
+                "vnfdId": id_schema,
+            },
+            "required": ["vnfInstanceId", "vnfdId"],
+        },
+        "operateVnfData": {
+            "type": "object",
+            "properties": {
+                "vnfInstanceId": id_schema,
+                "changeStateTo": name_schema,
+                "additionalParam": {
+                    "type": "object",
+                    "properties": {
+                        "run-day1": bool_schema,
+                        "vdu_id": name_schema,
+                        "count-index": integer0_schema,
+                    },
+                    "required": ["vdu_id", "count-index"],
+                    "additionalProperties": False,
+                },
+            },
+            "required": ["vnfInstanceId", "changeStateTo"],
+        },
+        "verticalScaleVnf": {
+            "type": "object",
+            "properties": {
+                "vnfInstanceId": id_schema,
+                "vnfdId": id_schema,
+                "vduId": name_schema,
+                "countIndex": integer0_schema,
+            },
+            "required": ["vnfInstanceId", "vnfdId", "vduId"],
+        },
+    },
+    "required": ["updateType"],
+    "additionalProperties": False,
+}
+
 ns_action = {  # TODO for the moment it is only contemplated the vnfd primitive execution
     "title": "ns action input schema",
     "$schema": "http://json-schema.org/draft-04/schema#",
@@ -442,6 +537,7 @@ ns_action = {  # TODO for the moment it is only contemplated the vnfd primitive
     "required": ["primitive", "primitive_params"],  # TODO add member_vnf_index
     "additionalProperties": False,
 }
+
 ns_scale = {  # TODO for the moment it is only VDU-scaling
     "title": "ns scale input schema",
     "$schema": "http://json-schema.org/draft-04/schema#",
@@ -476,6 +572,90 @@ ns_scale = {  # TODO for the moment it is only VDU-scaling
     "additionalProperties": False,
 }
 
+ns_migrate = {
+    "title": "ns migrate input schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties": {
+        "lcmOperationType": string_schema,
+        "nsInstanceId": id_schema,
+        "vnfInstanceId": id_schema,
+        "migrateToHost": string_schema,
+        "vdu": {
+            "type": "object",
+            "properties": {
+                "vduId": name_schema,
+                "vduCountIndex": integer0_schema,
+            },
+            "required": ["vduId"],
+            "additionalProperties": False,
+        },
+    },
+    "required": ["vnfInstanceId"],
+    "additionalProperties": False,
+}
+
+ns_heal = {
+    "title": "ns heal input schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties": {
+        "lcmOperationType": string_schema,
+        "nsInstanceId": id_schema,
+        "timeout_ns_heal": integer1_schema,
+        "healVnfData": {
+            "type": "array",
+            "items": {
+                "type": "object",
+                "properties": {
+                    "vnfInstanceId": id_schema,
+                    "cause": description_schema,
+                    "additionalParams": {
+                        "type": "object",
+                        "properties": {
+                            "run-day1": bool_schema,
+                            "vdu": {
+                                "type": "array",
+                                "items": {
+                                    "type": "object",
+                                    "properties": {
+                                        "run-day1": bool_schema,
+                                        "vdu-id": name_schema,
+                                        "count-index": integer0_schema,
+                                    },
+                                    "required": ["vdu-id"],
+                                    "additionalProperties": False,
+                                },
+                            },
+                        },
+                        "additionalProperties": False,
+                    },
+                },
+                "required": ["vnfInstanceId"],
+                "additionalProperties": False,
+            },
+        },
+    },
+    "required": ["healVnfData"],
+    "additionalProperties": False,
+}
+
+nslcmop_cancel = {
+    "title": "Cancel nslcmop input schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties": {
+        "nsLcmOpOccId": id_schema,
+        "cancelMode": {
+            "enum": [
+                "GRACEFUL",
+                "FORCEFUL",
+            ]
+        },
+    },
+    "required": ["cancelMode"],
+    "additionalProperties": False,
+}
 
 schema_version = {"type": "string", "enum": ["1.0"]}
 schema_type = {"type": "string"}
@@ -499,6 +679,7 @@ vim_account_edit_schema = {
         "vim_password": passwd_schema,
         "vca": id_schema,
         "config": {"type": "object"},
+        "prometheus-config": {"type": "object"},
     },
     "additionalProperties": False,
 }
@@ -523,6 +704,7 @@ vim_account_new_schema = {
         "vim_password": passwd_schema,
         "vca": id_schema,
         "config": {"type": "object"},
+        "prometheus-config": {"type": "object"},
     },
     "required": [
         "name",
@@ -644,6 +826,17 @@ sdn_external_port_schema = {
 }
 
 # K8s Clusters
+k8scluster_deploy_method_schema = {
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "title": "Deployment methods for K8s cluster",
+    "type": "object",
+    "properties": {
+        "juju-bundle": {"type": "boolean"},
+        "helm-chart-v3": {"type": "boolean"},
+    },
+    "additionalProperties": False,
+    "minProperties": 2,
+}
 k8scluster_nets_schema = {
     "title": "k8scluster nets input schema",
     "$schema": "http://json-schema.org/draft-04/schema#",
@@ -666,6 +859,7 @@ k8scluster_new_schema = {
         "vca_id": id_schema,
         "k8s_version": string_schema,
         "nets": k8scluster_nets_schema,
+        "deployment_methods": k8scluster_deploy_method_schema,
         "namespace": name_schema,
         "cni": nameshort_list_schema,
     },
@@ -751,6 +945,10 @@ k8srepo_properties = {
     "description": description_schema,
     "type": k8srepo_types,
     "url": description_schema,
+    "cacert": long_description_schema,
+    "user": string_schema,
+    "password": passwd_schema,
+    "oci": bool_schema,
 }
 k8srepo_new_schema = {
     "title": "k8scluster creation input schema",
@@ -774,7 +972,7 @@ osmrepo_properties = {
     "name": name_schema,
     "description": description_schema,
     "type": osmrepo_types,
-    "url": description_schema
+    "url": description_schema,
     # "user": string_schema,
     # "password": passwd_schema
 }
@@ -801,7 +999,7 @@ pdu_interface = {
         "name": shortname_schema,
         "mgmt": bool_schema,
         "type": {"enum": ["overlay", "underlay"]},
-        "ip-address": ip_schema,
+        "ip-address": {"oneOf": [ip_schema, ipv6_schema]},
         # TODO, add user, password, ssh-key
         "mac-address": mac_schema,
         "vim-network-name": shortname_schema,  # interface is connected to one vim network, or switch port
@@ -875,6 +1073,147 @@ vnfpkgop_new_schema = {
     "additionalProperties": False,
 }
 
+clustercreation_new_schema = {
+    "title": "cluster creation operation input schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties": {
+        "name": name_schema,
+        "vim_account": string_schema,
+        "k8s_version": string_schema,
+        "node_size": string_schema,
+        "node_count": integer0_schema,
+        "description": string_schema,
+        "region_name": string_schema,
+        "resource_group": string_schema,
+        "infra_controller_profiles": shortname_schema,
+        "infra_config_profiles": shortname_schema,
+        "resource_profiles": shortname_schema,
+        "app_profiles": shortname_schema,
+    },
+    "required": [
+        "name",
+        "vim_account",
+        "k8s_version",
+        "node_size",
+        "node_count",
+        "description",
+    ],
+    "additionalProperties": False,
+}
+
+infra_controller_profile_create_new_schema = {
+    "title": "infra profile creation operation input schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties": {
+        "name": name_schema,
+        "description": string_schema,
+    },
+    "additionalProperties": False,
+}
+
+infra_controller_profile_create_edit_schema = {
+    "title": "infra profile creation operation input schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties": {
+        "name": name_schema,
+        "description": string_schema,
+    },
+    "additionalProperties": False,
+}
+
+infra_config_profile_create_new_schema = {
+    "title": "infra profile creation operation input schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties": {
+        "name": name_schema,
+        "description": string_schema,
+    },
+    "additionalProperties": False,
+}
+
+infra_config_profile_create_edit_schema = {
+    "title": "infra profile creation operation input schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties": {
+        "name": name_schema,
+        "description": string_schema,
+    },
+    "additionalProperties": False,
+}
+
+app_profile_create_new_schema = {
+    "title": "app profile creation operation input schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties": {
+        "name": name_schema,
+        "description": string_schema,
+    },
+    "additionalProperties": False,
+}
+app_profile_create_edit_schema = {
+    "title": "app profile creation operation input schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties": {
+        "name": name_schema,
+        "description": string_schema,
+    },
+    "additionalProperties": False,
+}
+
+resource_profile_create_new_schema = {
+    "title": "resource profile creation operation input schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties": {
+        "name": name_schema,
+        "description": string_schema,
+    },
+    "additionalProperties": False,
+}
+resource_profile_create_edit_schema = {
+    "title": "resource profile creation operation input schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties": {
+        "name": name_schema,
+        "description": string_schema,
+    },
+    "additionalProperties": False,
+}
+
+attach_profile = {
+    "type": "array",
+    "items": {
+        "type": "object",
+        "properties": {"id": id_schema},
+        "additionalProperties": False,
+    },
+}
+remove_profile = {
+    "type": "array",
+    "items": {
+        "type": "object",
+        "properties": {"id": id_schema},
+        "additionalProperties": False,
+    },
+}
+attach_dettach_profile_schema = {
+    "title": "attach/dettach profiles",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties": {
+        "add_profile": attach_profile,
+        "remove_profile": remove_profile,
+    },
+    "additionalProperties": False,
+}
 # USERS
 project_role_mappings = {
     "title": "list pf projects/roles",
@@ -888,6 +1227,7 @@ project_role_mappings = {
     },
     "minItems": 1,
 }
+
 project_role_mappings_optional = {
     "title": "list of projects/roles or projects only",
     "$schema": "http://json-schema.org/draft-04/schema#",
@@ -900,6 +1240,7 @@ project_role_mappings_optional = {
     },
     "minItems": 1,
 }
+
 user_new_schema = {
     "$schema": "http://json-schema.org/draft-04/schema#",
     "title": "New user schema",
@@ -907,7 +1248,7 @@ user_new_schema = {
     "properties": {
         "username": string_schema,
         "domain_name": shortname_schema,
-        "password": passwd_schema,
+        "password": user_passwd_schema,
         "projects": nameshort_list_schema,
         "project_role_mappings": project_role_mappings,
     },
@@ -919,12 +1260,16 @@ user_edit_schema = {
     "title": "User edit schema for administrators",
     "type": "object",
     "properties": {
-        "password": passwd_schema,
+        "password": user_passwd_schema,
+        "old_password": passwd_schema,
         "username": string_schema,  # To allow User Name modification
         "projects": {"oneOf": [nameshort_list_schema, array_edition_schema]},
         "project_role_mappings": project_role_mappings,
         "add_project_role_mappings": project_role_mappings,
         "remove_project_role_mappings": project_role_mappings_optional,
+        "system_admin_id": id_schema,
+        "unlock": bool_schema,
+        "renew": bool_schema,
     },
     "minProperties": 1,
     "additionalProperties": False,
@@ -1028,6 +1373,8 @@ nbi_new_input_schemas = {
     "ns_instantiate": ns_instantiate,
     "ns_action": ns_action,
     "ns_scale": ns_scale,
+    "ns_update": ns_update,
+    "ns_heal": ns_heal,
     "pdus": pdu_new_schema,
 }
 
@@ -1037,6 +1384,9 @@ nbi_edit_input_schemas = {
     "vim_accounts": vim_account_edit_schema,
     "sdns": sdn_edit_schema,
     "pdus": pdu_edit_schema,
+    "vnf": vnf_schema,
+    "vld": vld_schema,
+    "additionalParamsForVnf": additional_params_for_vnf,
 }
 
 # NETSLICE SCHEMAS
@@ -1233,6 +1583,119 @@ subscription = {
     "required": ["CallbackUri"],
 }
 
+vnflcmsub_schema = {
+    "title": "vnflcmsubscription input schema",
+    "$schema": "http://json-schema.org/draft-07/schema#",
+    "type": "object",
+    "properties": {
+        "VnfInstanceSubscriptionFilter": {
+            "type": "object",
+            "properties": {
+                "vnfdIds": {"type": "array"},
+                "vnfInstanceIds": {"type": "array"},
+            },
+        },
+        "notificationTypes": {
+            "type": "array",
+            "items": {
+                "enum": [
+                    "VnfIdentifierCreationNotification",
+                    "VnfLcmOperationOccurrenceNotification",
+                    "VnfIdentifierDeletionNotification",
+                ]
+            },
+        },
+        "operationTypes": {
+            "type": "array",
+            "items": {
+                "enum": [
+                    "INSTANTIATE",
+                    "SCALE",
+                    "SCALE_TO_LEVEL",
+                    "CHANGE_FLAVOUR",
+                    "TERMINATE",
+                    "HEAL",
+                    "OPERATE",
+                    "CHANGE_EXT_CONN",
+                    "MODIFY_INFO",
+                    "CREATE_SNAPSHOT",
+                    "REVERT_TO_SNAPSHOT",
+                    "CHANGE_VNFPKG",
+                ]
+            },
+        },
+        "operationStates": {
+            "type": "array",
+            "items": {
+                "enum": [
+                    "STARTING",
+                    "PROCESSING",
+                    "COMPLETED",
+                    "FAILED_TEMP",
+                    "FAILED",
+                    "ROLLING_BACK",
+                    "ROLLED_BACK",
+                ]
+            },
+        },
+    },
+    "required": ["VnfInstanceSubscriptionFilter", "notificationTypes"],
+}
+
+vnf_subscription = {
+    "title": "vnf subscription input schema",
+    "$schema": "http://json-schema.org/draft-07/schema#",
+    "type": "object",
+    "properties": {
+        "filter": vnflcmsub_schema,
+        "CallbackUri": description_schema,
+        "authentication": authentication_schema,
+    },
+    "required": ["filter", "CallbackUri"],
+}
+
+oka_schema = {
+    "title": "Create OKA package input schema",
+    "$schema": "http://json-schema.org/draft-07/schema#",
+    "type": "object",
+    "properties": {
+        "name": name_schema,
+        "description": description_schema,
+    },
+    "additionalProperties": False,
+}
+
+ksu_schema = {
+    "title": "ksu schema",
+    "$schema": "http://json-schema.org/draft-07/schema#",
+    "type": "object",
+    "properties": {
+        "name": name_schema,
+        "description": description_schema,
+        "profile": {
+            "type": "object",
+            "properties": {
+                "profile_type": string_schema,
+                "_id": id_schema,
+            },
+            "additionalProperties": False,
+        },
+        "oka": {
+            "type": "array",
+            "items": {
+                "type": "object",
+                "properties": {
+                    "_id": id_schema,
+                    "sw_catalog_path": string_schema,
+                    "transformation": object_schema,
+                },
+                "additionalProperties": False,
+            },
+        },
+    },
+    "additionalProperties": False,
+}
+
 
 class ValidationError(Exception):
     def __init__(self, message, http_code=HTTPStatus.UNPROCESSABLE_ENTITY):