new persistent_info param at vimconn class
[osm/RO.git] / openmano_schemas.py
index 4f5edfe..1ea64f6 100644 (file)
@@ -24,7 +24,7 @@
 '''
 JSON schemas used by openmano httpserver.py module to parse the different files and messages sent through the API 
 '''
 '''
 JSON schemas used by openmano httpserver.py module to parse the different files and messages sent through the API 
 '''
-__author__="Alfonso Tierno, Gerardo Garcia"
+__author__="Alfonso Tierno, Gerardo Garcia, Pablo Montes"
 __date__ ="$09-oct-2014 09:09:48$"
 
 #Basis schemas
 __date__ ="$09-oct-2014 09:09:48$"
 
 #Basis schemas
@@ -54,6 +54,8 @@ object_schema={"type":"object"}
 schema_version_2={"type":"integer","minimum":2,"maximum":2}
 #schema_version_string={"type":"string","enum": ["0.1", "2", "0.2", "3", "0.3"]}
 log_level_schema={"type":"string", "enum":["DEBUG", "INFO", "WARNING","ERROR","CRITICAL"]}
 schema_version_2={"type":"integer","minimum":2,"maximum":2}
 #schema_version_string={"type":"string","enum": ["0.1", "2", "0.2", "3", "0.3"]}
 log_level_schema={"type":"string", "enum":["DEBUG", "INFO", "WARNING","ERROR","CRITICAL"]}
+checksum_schema={"type":"string", "pattern":"^[0-9a-fA-F]{32}$"}
+size_schema={"type":"integer","minimum":1,"maximum":100}
 
 metadata_schema={
     "type":"object",
 
 metadata_schema={
     "type":"object",
@@ -78,6 +80,7 @@ config_schema = {
         "http_port": port_schema,
         "http_admin_port": port_schema,
         "http_host": nameshort_schema,
         "http_port": port_schema,
         "http_admin_port": port_schema,
         "http_host": nameshort_schema,
+        "auto_push_VNF_to_VIMs": {"type":"boolean"},
         "vnf_repository": path_schema,
         "db_host": nameshort_schema,
         "db_user": nameshort_schema,
         "vnf_repository": path_schema,
         "db_host": nameshort_schema,
         "db_user": nameshort_schema,
@@ -102,8 +105,15 @@ config_schema = {
         "log_level": log_level_schema,
         "log_socket_level": log_level_schema,
         "log_level_db": log_level_schema,
         "log_level": log_level_schema,
         "log_socket_level": log_level_schema,
         "log_level_db": log_level_schema,
-        "log_level_vimconn": log_level_schema,
+        "log_level_vim": log_level_schema,
         "log_level_nfvo": log_level_schema,
         "log_level_nfvo": log_level_schema,
+        "log_level_http": log_level_schema,
+        "log_level_console": log_level_schema,
+        "log_file_db": path_schema,
+        "log_file_vim": path_schema,
+        "log_file_nfvo": path_schema,
+        "log_file_http": path_schema,
+        "log_file_console": path_schema,
         "log_socket_host": nameshort_schema,
         "log_socket_port": port_schema,
         "log_file": path_schema,
         "log_socket_host": nameshort_schema,
         "log_socket_port": port_schema,
         "log_file": path_schema,
@@ -269,10 +279,11 @@ datacenter_associate_schema={
         "datacenter":{
             "type":"object",
             "properties":{
         "datacenter":{
             "type":"object",
             "properties":{
-                "vim_tenant": id_schema,
-                "vim_tenant_name": nameshort_schema,
+                "vim_tenant": name_schema,
+                "vim_tenant_name": name_schema,
                 "vim_username": nameshort_schema,
                 "vim_password": nameshort_schema,
                 "vim_username": nameshort_schema,
                 "vim_password": nameshort_schema,
+                "config": {"type": "object"}
             },
 #            "required": ["vim_tenant"],
             "additionalProperties": True
             },
 #            "required": ["vim_tenant"],
             "additionalProperties": True
@@ -290,7 +301,8 @@ dhcp_schema = {
         "enabled": {"type": "boolean"},
         "start-address": ip_schema,
         "count": integer1_schema
         "enabled": {"type": "boolean"},
         "start-address": ip_schema,
         "count": integer1_schema
-    }
+    },
+    "required": ["enabled", "start-address", "count"],
 }
 
 ip_profile_schema = {
 }
 
 ip_profile_schema = {
@@ -301,7 +313,6 @@ ip_profile_schema = {
         "ip-version": {"type":"string", "enum":["IPv4","IPv6"]},
         "subnet-address": ip_prefix_schema,
         "gateway-address": ip_schema,
         "ip-version": {"type":"string", "enum":["IPv4","IPv6"]},
         "subnet-address": ip_prefix_schema,
         "gateway-address": ip_schema,
-        "security-group": {"type":"string"},
         "dns-address": ip_schema,
         "dhcp": dhcp_schema
     },
         "dns-address": ip_schema,
         "dhcp": dhcp_schema
     },
@@ -380,11 +391,11 @@ internal_connection_schema_v02 = {
         "name": name_schema,
         "description":description_schema,
         "type": {"type": "string", "enum":["e-line", "e-lan"]},
         "name": name_schema,
         "description":description_schema,
         "type": {"type": "string", "enum":["e-line", "e-lan"]},
-        "implementation": {"type": "string", "enum":["virtual", "underlay"]},
+        "implementation": {"type": "string", "enum":["overlay", "underlay"]},
         "ip-profile": ip_profile_schema,
         "elements": {"type" : "array", "items": internal_connection_element_schema_v02, "minItems":2}
     },
         "ip-profile": ip_profile_schema,
         "elements": {"type" : "array", "items": internal_connection_element_schema_v02, "minItems":2}
     },
-    "required": ["name", "type", "elements"],
+    "required": ["name", "type", "implementation", "elements"],
     "additionalProperties": False
 }
 
     "additionalProperties": False
 }
 
@@ -401,15 +412,19 @@ external_connection_schema = {
     "additionalProperties": False
 }
 
     "additionalProperties": False
 }
 
+#Not yet used
 external_connection_schema_v02 = {
     "type":"object",
     "properties":{
         "name": name_schema,
 external_connection_schema_v02 = {
     "type":"object",
     "properties":{
         "name": name_schema,
+        "mgmt": {"type":"boolean"},
+        "type": {"type": "string", "enum":["e-line", "e-lan"]}, 
+        "implementation": {"type": "string", "enum":["overlay", "underlay"]},
         "VNFC": name_schema,
         "local_iface_name": name_schema ,
         "description":description_schema
     },
         "VNFC": name_schema,
         "local_iface_name": name_schema ,
         "description":description_schema
     },
-    "required": ["name", "VNFC", "local_iface_name"],
+    "required": ["name", "type", "VNFC", "local_iface_name"],
     "additionalProperties": False
 }
 
     "additionalProperties": False
 }
 
@@ -438,7 +453,9 @@ bridge_interfaces_schema={
             "bandwidth":bandwidth_schema,
             "vpci":pci_schema,
             "mac_address": mac_schema,
             "bandwidth":bandwidth_schema,
             "vpci":pci_schema,
             "mac_address": mac_schema,
-            "model": {"type":"string", "enum":["virtio","e1000","ne2k_pci","pcnet","rtl8139"]}
+            "model": {"type":"string", "enum":["virtio","e1000","ne2k_pci","pcnet","rtl8139"]},
+            "port-security": {"type" : "boolean"},
+            "floating-ip": {"type" : "boolean"}
         },
         "additionalProperties": False,
         "required": ["name"]
         },
         "additionalProperties": False,
         "required": ["name"]
@@ -452,7 +469,10 @@ devices_schema={
         "properties":{
             "type":{"type":"string", "enum":["disk","cdrom","xml"] },
             "image": path_schema,
         "properties":{
             "type":{"type":"string", "enum":["disk","cdrom","xml"] },
             "image": path_schema,
-            "image metadata": metadata_schema, 
+            "image name": name_schema,
+            "image checksum": checksum_schema,
+            "image metadata": metadata_schema,
+            "size": size_schema,
             "vpci":pci_schema,
             "xml":xml_text_schema,
         },
             "vpci":pci_schema,
             "xml":xml_text_schema,
         },
@@ -478,12 +498,45 @@ numa_schema = {
     #"required": ["memory"]
 }
 
     #"required": ["memory"]
 }
 
+config_files_schema = {
+    "title": "Config files for cloud init schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties": {
+        "dest": path_schema,
+        "encoding": {"type": "string", "enum": ["b64", "base64", "gz", "gz+b64", "gz+base64", "gzip+b64", "gzip+base64"]},  #by default text
+        "content": {"type": "string"},
+        "permissions": {"type": "string"}, # tiypically octal notation '0644'
+        "owner": {"type": "string"},  # format:   owner:group
+
+    },
+    "additionalProperties": False,
+    "required": ["dest", "content"],
+}
+
+boot_data_vdu_schema  = {
+    "title": "Boot data (Cloud-init) configuration schema",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "properties":{
+        "key-pairs": {"type" : "array", "items": {"type":"string"}},
+        "users": {"type" : "array", "items": cloud_config_user_schema},
+        "user-data": {"type" : "string"},  # scrip to run
+        "config-files": {"type": "array", "items": config_files_schema},
+        # NOTE: “user-data” are mutually exclusive with users and config-files because user/files are injected using user-data
+        "boot-data-drive": {"type": "boolean"},
+    },
+    "additionalProperties": False,
+}
+
 vnfc_schema = {
     "type":"object",
     "properties":{
         "name": name_schema,
         "description": description_schema,
         "VNFC image": {"oneOf": [path_schema, http_schema]},
 vnfc_schema = {
     "type":"object",
     "properties":{
         "name": name_schema,
         "description": description_schema,
         "VNFC image": {"oneOf": [path_schema, http_schema]},
+        "image name": name_schema,
+        "image checksum": checksum_schema,
         "image metadata": metadata_schema, 
         #"cloud-config": cloud_config_schema, #common for all vnfs in the scenario
         "processor": {
         "image metadata": metadata_schema, 
         #"cloud-config": cloud_config_schema, #common for all vnfs in the scenario
         "processor": {
@@ -510,10 +563,15 @@ vnfc_schema = {
             "items": numa_schema
         },
         "bridge-ifaces": bridge_interfaces_schema,
             "items": numa_schema
         },
         "bridge-ifaces": bridge_interfaces_schema,
-        "devices": devices_schema
+        "devices": devices_schema,
+        "boot-data" : boot_data_vdu_schema
         
     },
         
     },
-    "required": ["name", "VNFC image"],
+    "required": ["name"],
+    "oneOf": [
+        {"required": ["VNFC image"]},
+        {"required": ["image name"]}
+    ],
     "additionalProperties": False
 }
 
     "additionalProperties": False
 }
 
@@ -559,7 +617,7 @@ vnfd_schema_v02 = {
                 "public": {"type" : "boolean"},
                 "physical": {"type" : "boolean"},
                 "tenant_id": id_schema, #only valid for admin
                 "public": {"type" : "boolean"},
                 "physical": {"type" : "boolean"},
                 "tenant_id": id_schema, #only valid for admin
-                "external-connections": {"type" : "array", "items": external_connection_schema_v02, "minItems":1},
+                "external-connections": {"type" : "array", "items": external_connection_schema, "minItems":1},
                 "internal-connections": {"type" : "array", "items": internal_connection_schema_v02, "minItems":1},
                 # "cloud-config": cloud_config_schema, #common for all vnfcs
                 "VNFC":{"type" : "array", "items": vnfc_schema, "minItems":1}
                 "internal-connections": {"type" : "array", "items": internal_connection_schema_v02, "minItems":1},
                 # "cloud-config": cloud_config_schema, #common for all vnfcs
                 "VNFC":{"type" : "array", "items": vnfc_schema, "minItems":1}
@@ -769,15 +827,15 @@ nsd_schema_v03 = {
                                     "items":{
                                         "type":"object",
                                         "properties":{
                                     "items":{
                                         "type":"object",
                                         "properties":{
+                                            "vnf": name_schema,
+                                            "vnf_interface": name_schema,
                                             "ip_address": ip_schema
                                         },
                                             "ip_address": ip_schema
                                         },
-                                        "patternProperties":{
-                                            ".": {"type": "string"}
-                                        }
+                                        "required": ["vnf", "vnf_interface"],
                                     }
                                 },
                                 "type": {"type": "string", "enum":["e-line", "e-lan"]},
                                     }
                                 },
                                 "type": {"type": "string", "enum":["e-line", "e-lan"]},
-                                "implementation": {"type": "string", "enum":["virtual", "underlay"]},
+                                "implementation": {"type": "string", "enum":["overlay", "underlay"]},
                                 "external" : {"type": "boolean"},
                                 "graph": graph_schema,
                                 "ip-profile": ip_profile_schema
                                 "external" : {"type": "boolean"},
                                 "graph": graph_schema,
                                 "ip-profile": ip_profile_schema
@@ -966,19 +1024,41 @@ instance_scenario_create_schema_v01 = {
                                     "items":{
                                         "type":"object",
                                         "properties":{
                                     "items":{
                                         "type":"object",
                                         "properties":{
-                                            "ip_address": ip_schema
+                                            "ip_address": ip_schema,
+                                            "datacenter": name_schema,
+                                            "vim-network-name": name_schema
                                         },
                                         "patternProperties":{
                                             ".": {"type": "string"}
                                         }
                                     }
                                 },
                                         },
                                         "patternProperties":{
                                             ".": {"type": "string"}
                                         }
                                     }
                                 },
-                                "netmap-create": {"oneOf":[name_schema,{"type": "null"}]}, #datacenter network to use. Null if must be created as an internal net
-                                "netmap-use": name_schema,
-                                #"name": name_schema, #override network name
                                 "ip-profile": ip_profile_schema,
                                 "ip-profile": ip_profile_schema,
-                                #"datacenter": name_schema,
-                                "vim-network-name": name_schema
+                                #if the network connects VNFs deployed at different sites, you must specify one entry per site that this network connect to 
+                                "sites": {
+                                    "type":"array",
+                                    "minLength":1,
+                                    "items":{
+                                        "type":"object",
+                                        "properties":{
+                                            # By default for an scenario 'external' network openmano looks for an existing VIM network to map this external scenario network,
+                                            # for other networks openamno creates at VIM
+                                            # Use netmap-create to force to create an external scenario network  
+                                            "netmap-create": {"oneOf":[name_schema,{"type": "null"}]}, #datacenter network to use. Null if must be created as an internal net
+                                            #netmap-use:   Indicates an existing VIM network that must be used for this scenario network. 
+                                            #Can use both the VIM network name (if it is not ambiguous) or the VIM net UUID
+                                            #If both 'netmap-create' and 'netmap-use'are supplied, netmap-use precedes, but if fails openmano follows the netmap-create
+                                            #In oder words, it is the same as 'try to map to the VIM network (netmap-use) if exist, and if not create the network (netmap-create)
+                                            "netmap-use": name_schema, # 
+                                            "vim-network-name": name_schema, #override network name
+                                            #"ip-profile": ip_profile_schema,
+                                            "datacenter": name_schema,                                        
+                                        }
+                                    }
+                                },
+                                
+
+
                             }
                         }
                     },
                             }
                         }
                     },