Beispiel #1
0
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",
            error_message="Cannot connect to local helm repo.",
            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)
    except ValidationError as err:
        log.debug(err.message)
        response_message = response(model=error_message_model,
                                    status_code=400,
                                    error_source="config-file.json",
                                    error_message=err.message,
                                    status="Input payload validation failed")
        return response_message.get_return()
    except SchemaError as err:
        log.debug(err.message)
        response_message = response(model=error_message_model,
                                    status_code=400,
                                    error_source="schema.json",
                                    error_message=err.message,
                                    status="Input payload validation failed")
        return response_message.get_return()

    try:
        xapp = xApp(config_file, schema_file)
        xapp.package_chart()
        xapp.distribute_chart()
    except xAppError as err:
        log.error(str(err))
        response_message = response(model=error_message_model,
                                    status_code=err.status_code,
                                    error_source="xApp_builder",
                                    error_message=str(err),
                                    status="xApp onboarding failed")
        return response_message.get_return()
    return response(model=status_message_model,
                    status_code=201,
                    status="Created").get_return()
Beispiel #2
0
 def get(self):
     """
     Returns the health condition of the xApp onboarder
     """
     if not repo_manager.is_repo_ready():
         response_message = response(
             model=error_message_model,
             status_code=500,
             error_source="xapp_onboarder",
             error_message="Cannot connect to local helm repo.",
             status="Service not ready.")
         return response_message.get_return()
     return response(model=status_message_model,
                     status_code=200,
                     status="OK").get_return()
Beispiel #3
0
def get_charts_list(xapp_chart_name=None):

    if not repo_manager.is_repo_ready():
        response_message = response(
            model=error_message_model,
            status_code=500,
            error_source="xapp_onboarder",
            error_message="Cannot connect to local helm repo.",
            status="Service not ready.")
        return response_message.get_return()

    try:
        content = repo_manager.get_xapp_list(xapp_chart_name=xapp_chart_name)
    except RepoManagerError as err:
        log.error(str(err))
        response_message = response(model=error_message_model,
                                    status_code=err.status_code,
                                    error_source="charts_fetcher",
                                    error_message=str(err),
                                    status="Fetching helm chart list failed")
        return response_message.get_return()
    return content, 200
Beispiel #4
0
def download_chart_package(xapp_chart_name, version):

    if not repo_manager.is_repo_ready():
        response_message = response(
            model=error_message_model,
            status_code=500,
            error_source="xapp_onboarder",
            error_message="Cannot connect to local helm repo.",
            status="Service not ready.")
        return response_message.get_return()
    try:
        content = repo_manager.download_xapp_chart(
            xapp_chart_name=xapp_chart_name, version=version)
    except RepoManagerError as err:
        log.error(str(err))
        response_message = response(
            model=error_message_model,
            status_code=err.status_code,
            error_source="charts_fetcher",
            error_message=str(err),
            status="Downloading helm chart package failed")
        return response_message.get_return()
    return content, 200
Beispiel #5
0
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",
            error_message="Cannot connect to local helm repo.",
            status="Service not ready.")
        return response_message.get_return()

    session = requests_retry_session()
    try:
        response_content = session.get(config_file_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="config-file.json",
            error_message=err.message,
            status="Downloading config-file.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)
            response_message = response(
                model=error_message_model,
                status_code=500,
                error_source="config-file.json",
                error_message=error_message,
                status="Downloading config-file.json failed")
            return response_message.get_return()
        config_file = json.loads(response_content.content)

    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=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)
                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, controls_schema_file)
Beispiel #6
0
 def health(self):
     """Health check. If xapp onboarder is not ready, it return false."""
     return repo_manager.is_repo_ready()