Commit 101cdacb authored by Sergio Gimenez's avatar Sergio Gimenez
Browse files

Merge branch 'feature/srm-fm-integration-and-spec-compliance' into 'develop'

Align FM EWBI with GSMA and integrate through SRM

See merge request !10
parents c2e7b78e 44eb0754
Loading
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -34,10 +34,17 @@ RUN apt-get update && apt-get install -y \
  && rm -rf /var/lib/apt/lists/*
# Copy application code
COPY . . 
# Install Python dependencies (use ETSI GitLab registry for TF SDK)
RUN python -m pip install --no-cache-dir -r requirements.txt \
  --extra-index-url https://labs.etsi.org/rep/api/v4/projects/396/packages/pypi/simple \
  --trusted-host labs.etsi.org
ARG PIP_INDEX_URL
ARG PIP_EXTRA_INDEX_URL
ARG PIP_TRUSTED_HOST
# Create pip.conf for indexes
RUN mkdir -p /root/.config/pip && \
    echo "[global]" > /root/.config/pip/pip.conf && \
    if [ -n "$PIP_INDEX_URL" ]; then echo "index-url = ${PIP_INDEX_URL}" >> /root/.config/pip/pip.conf; fi && \
    if [ -n "$PIP_EXTRA_INDEX_URL" ]; then echo "extra-index-url = ${PIP_EXTRA_INDEX_URL}" >> /root/.config/pip/pip.conf; fi && \
    if [ -n "$PIP_TRUSTED_HOST" ]; then echo "trusted-host = ${PIP_TRUSTED_HOST}" >> /root/.config/pip/pip.conf; fi
# Install Python dependencies
RUN python -m pip install --no-cache-dir -r requirements.txt
WORKDIR /usr/app/src/
EXPOSE 8989
# Set Gunicorn as the entrypoint
+0 −1
Original line number Diff line number Diff line
@@ -37,7 +37,6 @@ requests==2.32.4
rpds-py==0.13.2
six==1.16.0
setuptools==80.9.0
sunrise6g-opensdk==1.0.21
swagger-ui-bundle==0.0.9
urllib3==2.1.0
Werkzeug==2.2.3
+3 −1
Original line number Diff line number Diff line
@@ -261,6 +261,8 @@ def remove_app(federation_context_id, app_id, app_instance_id, zone_id, bearer_t


def install_app_originating_op(federation_id, partner_federation_id, body, response_partner):
    zone_id = response_partner.get("zoneId") or response_partner.get("zoneID")

    # Convert the original model instance to the MongoEngine document
    deployment_data = {
        "orig_ad_federation_context_id": federation_id,
@@ -268,7 +270,7 @@ def install_app_originating_op(federation_id, partner_federation_id, body, respo
        "orig_ad_app_id": body.app_id,
        "orig_ad_app_version": body.app_version,
        "orig_ad_app_provider_id": body.app_provider_id,
        "orig_ad_zone_info_zone_id": response_partner.get("zoneId"),
        "orig_ad_zone_info_zone_id": zone_id,
        "orig_ad_zone_info_flavour_id": body.zone_info.flavour_id,
        "orig_ad_zone_info_resource_consumption": body.zone_info.resource_consumption,
        "orig_ad_zone_info_res_pool": body.zone_info.res_pool,
+15 −16
Original line number Diff line number Diff line
@@ -137,10 +137,9 @@ def onboard_application(body, federation_context_id, bearer_token, partner_api_r
                error_message = response_get["error"]
                raise APIError(status_code, f"Partner API error: {error_message}")
            # 404 means application doesn't exist at partner, continue with onboarding logic
            if find_application_onboarding_at_originating_op(federation_context_id, body.app_id):
                raise APIError(409, "Application onboarding exist in originating operator but not exist at partner operator")
            else:
                # Create application profile at partner
            originating_ao_objects = find_application_onboarding_at_originating_op(federation_context_id, body.app_id)

            # Recreate partner onboarding if partner runtime/bookkeeping was lost after a rebuild.
            response_data = fm_client.create_profile(originating_op_instance.partner_federation_id, body, bearer_token,
                                                     partner_api_root)

@@ -150,7 +149,7 @@ def onboard_application(body, federation_context_id, bearer_token, partner_api_r
                error_message = response_data["error"]
                raise APIError(status_code, f"Partner API error: {error_message}")
            elif "accepted" in response_data:
                    # Create application onboarding in originating
                if not originating_ao_objects:
                    create_application_onboarding_originating_op(federation_context_id,
                                                                 originating_op_instance.partner_federation_id, body)
                return response_data, 202
+2 −2
Original line number Diff line number Diff line
@@ -108,7 +108,7 @@ def get_federation_details(federation_context_id, bearer_token, partner_api_root
            status_code = federation_response_data["status_code"]
            error_message = federation_response_data["error"]
            raise APIError(status_code, f"Partner API error: {error_message}")
        elif "edgeDiscoveryServiceEndPoint" in federation_response_data:
        elif "offeredAvailabilityZones" in federation_response_data or "platformCaps" in federation_response_data:
            federation_response_data = InlineResponse2001.from_dict(federation_response_data)
            return federation_response_data, 200
        else:
@@ -152,7 +152,7 @@ def update_federation(federation_context_id, body, bearer_token, partner_api_roo
            status_code = federation_response_data["status_code"]
            error_message = federation_response_data["error"]
            raise APIError(status_code, f"Partner API error: {error_message}")
        elif "edgeDiscoveryServiceEndPoint" in federation_response_data:
        elif "offeredAvailabilityZones" in federation_response_data or "platformCaps" in federation_response_data:
            federation_response_data = update_federation_at_originating_op(originating_op_instance, body,
                                                                           federation_response_data)
            federation_response_data = InlineResponse2001.from_dict(federation_response_data)
Loading