Implement the new xApp descriptor format
[it/dev.git] / xapp_onboarder / xapp_onboarder / api / onboard.py
index bdc80eb..71b8f62 100644 (file)
 
 import logging
 import json
+import copy
 from jsonschema import ValidationError, SchemaError
 from jsonschema import validate, Draft7Validator
 from xapp_onboarder.helm_controller.xApp_builder import xApp, xAppError
 from xapp_onboarder.server import settings
 from xapp_onboarder.repo_manager.repo_manager import requests_retry_session, repo_manager
 from xapp_onboarder.api.models.response_models import error_message_model, response, status_message_model
-
+from xapp_onboarder.helm_controller.xapp_schema import schema as xapp_schema
 
 log = logging.getLogger(__name__)
 
 
-def onboard(config_file, schema_file):
+def onboard(config_file, controls_schema_file):
     if not repo_manager.is_repo_ready():
         response_message = response(model=error_message_model, status_code=500,
                                     error_source="xapp_onboarder",
@@ -35,6 +36,11 @@ def onboard(config_file, schema_file):
                                     status="Service not ready.")
         return response_message.get_return()
 
+    schema_file = copy.deepcopy(xapp_schema)
+
+    if controls_schema_file:
+        schema_file["properties"]["controls"] = controls_schema_file
+
     try:
         Draft7Validator.check_schema(schema_file)
         validate(config_file, schema_file)
@@ -67,7 +73,7 @@ def onboard(config_file, schema_file):
     return response(model=status_message_model, status_code=201, status="Created").get_return()
 
 
-def download_config_and_schema_and_onboard(config_file_url, schema_url):
+def download_config_and_schema_and_onboard(config_file_url, controls_schema_url):
     if not repo_manager.is_repo_ready():
         response_message = response(model=error_message_model, status_code=500,
                                     error_source="xapp_onboarder",
@@ -96,24 +102,27 @@ def download_config_and_schema_and_onboard(config_file_url, schema_url):
             return response_message.get_return()
         config_file = json.loads(response_content.content)
 
-    try:
-        response_content = session.get(schema_url, timeout=settings.HTTP_TIME_OUT)
-    except Exception as err:
-        log.error(err.message)
-        response_message = response(model=error_message_model, status_code=500,
-                                    error_source="schema.json",
-                                    error_message=err.message,
-                                    status="Downloading schema.json failed")
-        return response_message.get_return()
-    else:
-        if response_content.status_code != 200:
-            error_message = "Wrong response code. {}, {}".format(response_content.status_code, response_content.content.decode("utf-8"))
-            log.error(error_message)
+    controls_schema_file = None
+    if controls_schema_url:
+        try:
+            response_content = session.get(controls_schema_url, timeout=settings.HTTP_TIME_OUT)
+        except Exception as err:
+            log.error(err.message)
             response_message = response(model=error_message_model, status_code=500,
                                         error_source="schema.json",
-                                        error_message=error_message,
+                                        error_message=err.message,
                                         status="Downloading schema.json failed")
             return response_message.get_return()
-        schema_file = json.loads(response_content.content)
+        else:
+            if response_content.status_code != 200:
+                error_message = "Wrong response code. {}, {}".format(response_content.status_code, response_content.content.decode("utf-8"))
+                log.error(error_message)
+                response_message = response(model=error_message_model, status_code=500,
+                                            error_source="schema.json",
+                                            error_message=error_message,
+                                            status="Downloading schema.json failed")
+                return response_message.get_return()
+            controls_schema_file = json.loads(response_content.content)
+
 
-    return onboard(config_file, schema_file)
+    return onboard(config_file, controls_schema_file)