From a389dc7f6e76c0e4cd2ea403bce4d1c05fc1528c Mon Sep 17 00:00:00 2001 From: raul_blanxart Date: Fri, 7 Nov 2025 13:29:10 +0100 Subject: [PATCH] parametrize oauth url in config --- src/main.py | 17 + src/static/openapi.yaml | 4008 +++++++++++++++++++-------------------- 2 files changed, 2021 insertions(+), 2004 deletions(-) diff --git a/src/main.py b/src/main.py index c350407..22b2953 100644 --- a/src/main.py +++ b/src/main.py @@ -20,6 +20,7 @@ Federation Manager application import connexion from flask import render_template import encoder +import yaml from flask_mongoengine import MongoEngine from configparser import ConfigParser @@ -30,6 +31,9 @@ HOST = CONFIG.get("server", "host") PORT = int(CONFIG.get("server", "port")) MONGO_HOST = CONFIG.get("mongodb", "host") MONGO_PORT = CONFIG.get("mongodb", "port") +KEYCLOAK_HOST = CONFIG.get("keycloak", "host") +KEYCLOAK_PORT = int(CONFIG.get("keycloak", "port")) +KEYCLOAK_REALM = CONFIG.get("keycloak", "realm") app = connexion.App(__name__, specification_dir='./swagger/') @@ -46,8 +50,21 @@ def documentation(): """Endpoint to retrieve documentation""" return render_template("swaggerui.html") +def edit_openapi_file(): + with open("static/openapi.yaml", "r") as f: + openapi_data = yaml.safe_load(f) + + token_url = f"http://{KEYCLOAK_HOST}:{KEYCLOAK_PORT}/realms/{KEYCLOAK_REALM}/protocol/openid-connect/token" + + # Update the tokenUrl + openapi_data['components']['securitySchemes']['oAuth2ClientCredentials']['flows']['clientCredentials']['tokenUrl'] = token_url + + with open("static/openapi.yaml", "w") as f: + yaml.dump(openapi_data, f) def main(): + edit_openapi_file() + app.run(host=HOST, port=PORT, threaded=True) diff --git a/src/static/openapi.yaml b/src/static/openapi.yaml index feecc29..faabcef 100644 --- a/src/static/openapi.yaml +++ b/src/static/openapi.yaml @@ -1,462 +1,142 @@ -openapi: 3.0.3 -info: - version: 1.2.0 - title: Federation Management Service - description: "# Introduction\n---\nRESTful APIs that allow an OP to share the edge\ - \ cloud resources and capabilities securely to other partner OPs over E/WBI.\n\ - \n---\n# API Scope\n\n---\nAPIs defined in this version of the implementation\ - \ can be categorized into the following areas:\n* __FederationManagement__ - Create\ - \ and manage directed federation relationship with a partner OP\n* __AvailabilityZoneInfoSynchronization__\ - \ - Management of resources of partner OP zones and status updates\n* __ArtefactManagement__\ - \ - Upload, remove, retrieve and update application descriptors, charts and packages\ - \ over E/WBI towards a partner OP\n* __ApplicationOnboardingManagement__ - Register,\ - \ retrieve, update and remove applications over E/WBI towards a partner OP\n*\ - \ __ApplicationDeploymentManagement__ - Create, update, retrieve and terminate\ - \ application instances over E/WBI towards a partner OP\n\n---\n# Definitions\n\ - ---\nThis section provides definitions of terminologies commonly referred to throughout\ - \ the API descriptions.\n\n* __Accepted Zones__ - List of partner OP zones, which\ - \ the originating OP has confirmed to use for its edge applications.\n* __Application\ - \ Provider__ - An application developer, onboarding his/her edge application on\ - \ a partner operator platform (MEC).\n* __Artefact__ - Descriptor, charts or any\ - \ other package associated with the application.\n* __Availability Zone__ - Zones\ - \ that partner OP can offer to share with originating OP.\n* __Device__ - Refers\ - \ to user equipment like mobile phone, tablet, IOT kit, AR/VR device etc. In context\ - \ of MEC users use these devices to access edge applications.\n* __Directed Federation__\ - \ - A Federation between two OP instances A and B, in which edge compute resources\ - \ are shared by B to A, but not from A to B.\n* __Edge Application__ - Application\ - \ designed to run on MEC edge cloud.\n* __E/WBI__ - East west bound interface.\n\ - * __Federation__ - Relationship among member OPs who agrees to offer services\ - \ and capabilities to the application providers and end users of member OPs.\n\ - * __FederationContextId__ - Partner OP defined string identifier representing\ - \ a certain federation relationship.\n* __Federation Identifier__ - Identify an\ - \ operator platform in federation context.\n* __Flavour__ - A group of compute,\ - \ network and storage resources that can be requested or granted as a single unit.\n\ - * __FlavourIdentifier__ - An OP defined string identifier representing a set of\ - \ compute, storage and networking resources.\n* __Home OP__ - Used in federation\ - \ context to identify the OP with which the application developers or user clients\ - \ are registered.\n* __Instance__ - Application process running on an edge.\n\ - * __LCM Service__ - Partner OP service responsible for life cycle management of\ - \ edge applications. LCM service is defined as HTTP based API endpoint identified\ - \ by a well-defined FQDN or IP.\n* __Offered Zones__ - Zones that partner OP offer\ - \ to share to the Originating OP based on the prior agreement and local configuration.\n\ - * __Onboarding__ - Submitting an application to MEC platform.\n* __OP__ - Operator\ - \ platform.\n* __OperatorIdentifier__ - String identifier representing the owner\ - \ of MEC platform. Owner could be an enterprise, a TSP or some other organization.\n\ - * __Originating OP__ - The OP when initiating the federation creation request\ - \ towards the partner OP is defined as the Originating OP.\n* __Partner OP__ -\ - \ Operator Platform which offers its Edge Cloud capabilities to the other Operator\ - \ Platforms via E/WBI.\n* __Resource__ - Compute, networking and storage resources.\n\ - * __ZoneIdentifier__ - An OP defined string identifier representing a certain\ - \ geographical or logical area where edge resources and services are provided.\n\ - * __Zone Confirmation__ - Procedure via which originating OP acknowledges partner\ - \ OP about the partner zones it wishes to use.\n* __User Clients__ - Lightweight\ - \ client applications used to access edge applications. Application users run\ - \ these clients on their devices (UE, IOT device, AR/VR device etc).\n\n---\n\ - # API Operations\n---\n\n__FederationManagement__\n* __CreateFederation__ - Creates\ - \ a directed federation relationship with a partner OP.\n* __GetFederationDetails__\ - \ - Retrieves details about the federation relationship with the partner OP. The\ - \ response shall provide info about the zones offered by the partner, partner\ - \ OP network codes, information about edge discovery and LCM service etc.\n* __DeleteFederationDetails__\ - \ - Remove existing federation with the partner OP.\n* __NotifyFederationUpdates__\ - \ - Call back notification used by partner OP to update originating OP about any\ - \ change in existing federation relationship.\n* __UpdateFederation__ - API used\ - \ by the Originating OP towards the partner OP, to update the parameters associated\ - \ to the existing federation.\n* __QueryFederationContext__ - The Originating\ - \ OP retrieves federationContextId from the partner OP.\n\n__AvailabilityZoneInfoSynchronization__\n\ - * __ZoneSubscribe__ - Informs partner OP that originating OP is willing to access\ - \ the specified zones and partner OP shall reserve compute and network resources\ - \ for these zones.\n* __ZoneUnsubscribe__ - Informs partner OP that originating\ - \ OP will no longer access the specified partner OP zone.\n* __GetZoneData__ -\ - \ Retrieves details about the computation and network resources that partner OP\ - \ has reserved for an partner OP zone.\n* __Notify Zone Information__ - Call back\ - \ notification used by partner OP to update originating OP about changes in the\ - \ resources reserved on a partner zone.\n\n__ArtefactManagement__\n* __UploadArtefact__\ - \ - Uploads application artefact on partner operator platform.\n* __RemoveArtefact__\ - \ - Removes an artefact from partner operator platform.\n* __GetArtefact__ - Retrieves\ - \ details about an artefact from partner operator platform.\n\n__ApplicationOnboardingManagement__\n\ - * __OnboardApplication__ - Submits an application details to a partner OP. Based\ - \ on the details provided, partner OP shall do bookkeeping, resource validation\ - \ and other pre-deployment operations.\n* __UpdateApplication__ - Updates partner\ - \ OP about changes in application compute resource requirements, QOS Profile,\ - \ associated descriptor or change in associated components.\n* __DeboardApplication__\ - \ - Removes an application from partner OP.\n* __ViewApplication__ - Retrieves\ - \ application details from partner OP.\n* __OnboardExistingAppNewZones__ - Make\ - \ an application available on new additional zones.\n* __LockUnlockApplicationZone__\ - \ - Forbid or permit instantiation of application on a zone.\n\n__Application\ - \ Instance Lifecycle Management__\n* __InstallApp__ - Instantiates an application\ - \ on a partner OP zone.\n* __GetAppInstanceDetails__ - Retrieves an application\ - \ instance details from partner OP.\n* __RemoveApp__ - Terminate an application\ - \ instance on a partner OP zone.\n* __GetAllAppInstances__ - Retrieves details\ - \ about all instances of the application running on partner OP zones.\n\n\n\xA9\ - \ 2023 GSM Association.\nAll rights reserved.\n" -externalDocs: - description: GSMA, E/WBI APIs v1.3.1 - url: http://www.xxxx.com -servers: -- url: /operatorplatform/federation/v1 -security: -- oAuth2ClientCredentials: - - fed-mgmt -components: - parameters: - XInternalHeader: - name: X-Internal - in: header - required: false - schema: - type: string - description: Internal request flag - example: 'true' - XPartnerApiRootHeader: - name: X-Partner-API-Root - in: header - required: false - schema: - type: string - description: Base URL of the partner API - example: http://192.168.123.212:31989 - securitySchemes: - oAuth2ClientCredentials: - type: oauth2 - flows: - clientCredentials: - tokenUrl: http://127.0.0.1:8080/realms/federation/protocol/openid-connect/token - scopes: - fed-mgmt: Access to the federation APIs - schemas: - AppIdentifier: - type: string - pattern: ^[A-Za-z][A-Za-z0-9_]{7,63}$ - description: Identifier used to refer to an application. - AppProviderId: - type: string - pattern: ^[A-Za-z][A-Za-z0-9_]{7,63}$ - description: UserId of the app provider. Identifier is relevant only in context - of this federation. - ArtefactId: - type: string - format: uuid - description: A globally unique identifier associated with the artefact. Originating - OP generates this identifier when artefact is submitted over NBI. - CountryCode: - type: string - description: ISO 3166-1 Alpha-2 code for the country of Partner operator - pattern: ^[A-Z]{2}$ - CPUArchType: - type: string - enum: - - ISA_X86 - - ISA_X86_64 - - ISA_ARM_64 - description: CPU Instruction Set Architecture (ISA) E.g., Intel, Arm etc. - InstanceIdentifier: - type: string - description: Unique identifier generated by the partner OP to identify an instance - of the application on a specific zone. - InstanceState: - type: string - enum: - - PENDING - - READY - - FAILED - - TERMINATING - description: Running status of the application instance. - Ipv4Addr: - type: string - pattern: ^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$ - example: 198.51.100.1 - Ipv6Addr: - type: string - allOf: - - pattern: ^((:|(0?|([1-9a-f][0-9a-f]{0,3}))):)((0?|([1-9a-f][0-9a-f]{0,3})):){0,6}(:|(0?|([1-9a-f][0-9a-f]{0,3})))$ - - pattern: ^((([^:]+:){7}([^:]+))|((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?))$ - example: 2001:db8:85a3::8a2e:370:7334 - Fqdn: - type: string - FixedNetworkIds: - type: array - items: - type: string - description: List of network identifier associated with the fixed line network - of the operator platform. - minItems: 1 - FederationContextId: - type: string - pattern: ^[A-Za-z0-9][A-Za-z0-9-]*$ - readOnly: true - description: This identifier shall be provided by the partner OP on successful - verification and validation of the federation create request and is used by - partner op to identify this newly created federation context. Originating - OP shall provide this identifier in any subsequent request towards the partner - op. - FederationIdentifier: - type: string - pattern: ^[A-Za-z0-9][A-Za-z0-9-]*$ - description: Globally unique identifier allocated to an operator platform. This - is valid and used only in context of MEC federation interface. - FileId: - type: string - format: uuid - description: A globally unique identifier associated with the image file. Originating - OP generates this identifier when file is uploaded over NBI. - FlavourId: - type: string - description: An identifier to refer to a specific combination of compute resources - GeoLocation: - type: string - description: Latitude,Longitude as decimal fraction up to 4 digit precision - pattern: ^([-+]?)([\d]{1,2})((((\.)([\d]{1,4}))?(,)))(([-+]?)([\d]{1,3})((\.)([\d]{1,4}))?)$ - Mcc: - type: string - pattern: ^\d{3}$ - Mnc: - type: string - pattern: ^\d{2,3}$ - Port: - type: integer - minimum: 0 - Status: - type: string - enum: - - FAILED - - TEMPORARY_FAILURE - - AVAILABLE - - LOCKED - - NOT_AVAILABLE - Uri: - type: string - Vcpu: - type: string - pattern: ^\d+((\.\d{1,3})|(m))?$ - description: Number of vcpus in whole, decimal up to millivcpu, or millivcpu - format. - example: - whole: - value: 2 - decimal: - value: 0.5 - millivcpu: - value: 500m - Version: - type: string - pattern: ^(\d{1,2}\.)?(\d{1,2}\.)?(\d{1,2})$ - description: Versioning info in the format major.minor.patch - VirtImageType: - type: string - enum: - - QCOW2 - - DOCKER - - OVA - description: Indicate if the file is Container image or VM image (QCOW2, OVA) - ZoneIdentifier: - type: string - pattern: ^[A-Za-z0-9][A-Za-z0-9-]*$ - description: Human readable name of the zone. - FederationHealthInfo: - type: object - required: - - federationStatus - - numOfAcceptedZones - properties: - federationStatus: - $ref: '#/components/schemas/State' - numOfAcceptedZones: - type: string - numOfActiveAlarms: - type: string - numOfApplications: - type: string - FederationSupportedAPIs: - type: object - required: - - federationBaseAPI - - availabilityZoneAPI - - edgeApplicationAPI - - artefactAPI - - fileAPI - properties: - federationBaseAPI: - $ref: '#/components/schemas/FederationAPIResources' - availabilityZoneAPI: - $ref: '#/components/schemas/FederationAPIResources' - edgeApplicationAPI: - $ref: '#/components/schemas/FederationAPIResources' - artefactAPI: - $ref: '#/components/schemas/FederationAPIResources' - fileAPI: - $ref: '#/components/schemas/FederationAPIResources' - serviceAPIFederation: - $ref: '#/components/schemas/FederationAPIResources' - resourceMonitoringAPI: - $ref: '#/components/schemas/FederationAPIResources' - faultManagementAPI: - $ref: '#/components/schemas/FederationAPIResources' - eventManagementAPI: - $ref: '#/components/schemas/FederationAPIResources' - FederationAPINames: - type: string - enum: - - FEDERATION - - AVAILZONE - - ARTEFACT - - FILE - - SVSAPEFED - - RESMONITOR - - EVENTMGMT - - FAULTMGMT - HttpMethods: - type: string - enum: - - POST - - PUT - - PATCH - - DELETE - - GET - HttpResources: - type: object - required: - - href - - httpMethods - properties: - href: - $ref: '#/components/schemas/Uri' - httpMethods: - type: array - items: - $ref: '#/components/schemas/HttpMethods' - minItems: 1 - description: List of HTTP Methods supported for the given API category - FederationAPIResources: - type: object - required: - - name - - apiOperations - properties: - name: - $ref: '#/components/schemas/FederationAPINames' - apiOperations: - type: array - items: - $ref: '#/components/schemas/HttpResources' - minItems: 1 - description: List of HTTP Methods supported for the given API category - State: - type: object - required: - - alarmState - properties: - alarmState: - type: string - enum: - - RAISED - - UPDATED - - CLEAR - description: Defines the alarm state during its life cycle (raised | updated - | cleared). - serviceType: - type: string - enum: - - api_federation - description: An identifier to refer to partner OP capabilities for application - providers. - serviceAPINames: - type: array - items: +components: + parameters: + XInternalHeader: + description: Internal request flag + example: 'true' + in: header + name: X-Internal + required: false + schema: type: string - enum: - - QualityOnDemand - - DeviceLocation - - DeviceStatus - - SimSwap - - NumberVerification - - DeviceIdentifier - minItems: 1 - description: List of Service API capability names an OP supports and offers - to other OPs "quality_on_demand", "device_location" etc. - serviceAPINameVal: - type: string - enum: - - QualityOnDemand - - DeviceLocation - - DeviceStatus - - SimSwap - - NumberVerification - - DeviceIdentifier - description: Name of the Service API - serviceRoutingInfo: - type: array - items: + XPartnerApiRootHeader: + description: Base URL of the partner API + example: http://192.168.123.212:31989 + in: header + name: X-Partner-API-Root + required: false + schema: type: string - pattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/([0-9]|[1-2][0-9]|3[0-2]))?$ - minItems: 1 - description: List of public IP addresses MNO manages for UEs to connect with - public data networks + responses: + '400': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + description: Bad request + '401': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + description: Unauthorized + '404': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + description: Not Found + '409': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + description: Conflict + '412': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + description: Precondition Failed + '422': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + description: Unprocessable Entity + '500': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + description: Internal Server Error + '501': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + description: Not Implemented + '503': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + description: Service Unavailable + '520': + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + description: Web Server Returned an Unknown Error + default: + description: Generic Error + schemas: AppComponentSpecs: description: An application may consist of more than one component. Each component is associated with a descriptor and may exposes its services externally or internally. App providers are required to provide details about all these components, their associated descriptors and their DNS names. - type: array items: - type: object - required: - - artefactId properties: - serviceNameNB: - type: string + artefactId: + $ref: '#/components/schemas/ArtefactId' + componentName: + description: Must be a valid RFC 1035 label name. Component name must + be unique with an application pattern: ^[A-Za-z0-9][A-Za-z0-9_]{6,62}[A-Za-z0-9]$ - description: Must be a valid RFC 1035 label name. This defines the DNS - name via which the component can be accessed over NBI. Access via serviceNameNB - is restricted on specific ports. Platform shall expose component access - externally via this DNS name - serviceNameEW: type: string - pattern: ^[A-Za-z0-9][A-Za-z0-9_]{6,62}[A-Za-z0-9]$ + serviceNameEW: description: Must be a valid RFC 1035 label name. This defines the DNS name via which the component can be accessed via peer components. Access via serviceNameEW is open on all ports. Platform shall not expose serviceNameEW externally outside edge. - componentName: + pattern: ^[A-Za-z0-9][A-Za-z0-9_]{6,62}[A-Za-z0-9]$ type: string + serviceNameNB: + description: Must be a valid RFC 1035 label name. This defines the DNS + name via which the component can be accessed over NBI. Access via serviceNameNB + is restricted on specific ports. Platform shall expose component access + externally via this DNS name pattern: ^[A-Za-z0-9][A-Za-z0-9_]{6,62}[A-Za-z0-9]$ - description: Must be a valid RFC 1035 label name. Component name must - be unique with an application - artefactId: - $ref: '#/components/schemas/ArtefactId' + type: string + required: + - artefactId + type: object minItems: 1 + type: array + AppIdentifier: + description: Identifier used to refer to an application. + pattern: ^[A-Za-z][A-Za-z0-9_]{7,63}$ + type: string AppMetaData: description: Application metadata details - type: object - required: - - appName - - version - - accessToken properties: - appName: - type: string - pattern: ^[A-Za-z][A-Za-z0-9_]{7,31}$ - description: Name of the application. Application provider define a human - readable name for the application - version: + accessToken: + description: An application Access key, to be used with UNI interface to + authorize UCs Access to a given application + pattern: ^[A-Za-z][A-Za-z0-9_]{31,63}$ type: string - description: Version info of the application appDescription: - type: string - minLength: 16 - maxLength: 256 description: Brief application description provided by application provider - mobilitySupport: - type: boolean - default: false - description: "Indicates if an application is sensitive to user mobility\ - \ and can be relocated. Default is \u201CFALSE\u201D" - accessToken: + maxLength: 256 + minLength: 16 type: string - pattern: ^[A-Za-z][A-Za-z0-9_]{31,63}$ - description: An application Access key, to be used with UNI interface to - authorize UCs Access to a given application - category: + appName: + description: Name of the application. Application provider define a human + readable name for the application + pattern: ^[A-Za-z][A-Za-z0-9_]{7,31}$ type: string + category: + description: Possible categorization of the application enum: - IOT - HEALTH_CARE @@ -471,130 +151,140 @@ components: - INDUSTRIAL - EDUCATION - OTHERS - description: Possible categorization of the application + type: string + mobilitySupport: + default: false + description: "Indicates if an application is sensitive to user mobility\ + \ and can be relocated. Default is \u201CFALSE\u201D" + type: boolean + version: + description: Version info of the application + type: string + required: + - appName + - version + - accessToken + type: object + AppProviderId: + description: UserId of the app provider. Identifier is relevant only in context + of this federation. + pattern: ^[A-Za-z][A-Za-z0-9_]{7,63}$ + type: string AppQoSProfile: description: Parameters corresponding to the performance constraints, tenancy details etc. - type: object - required: - - latencyConstraints properties: + appProvisioning: + default: true + description: Define if application can be instantiated or not + type: boolean + bandwidthRequired: + description: Data transfer bandwidth requirement (minimum limit) for the + application. It should in Mbits/sec + format: int32 + minimum: 1 + type: integer latencyConstraints: - type: string + description: Latency requirements for the application. Allowed values (non-standardized) + are none, low and ultra-low. Ultra-Low may corresponds to range 15 - 30 + msec, Low correspond to range 30 - 50 msec. None means 51 and above enum: - NONE - LOW - ULTRALOW - description: Latency requirements for the application. Allowed values (non-standardized) - are none, low and ultra-low. Ultra-Low may corresponds to range 15 - 30 - msec, Low correspond to range 30 - 50 msec. None means 51 and above - bandwidthRequired: - type: integer - format: int32 - minimum: 1 - description: Data transfer bandwidth requirement (minimum limit) for the - application. It should in Mbits/sec - multiUserClients: type: string - enum: - - APP_TYPE_SINGLE_USER - - APP_TYPE_MULTI_USER + multiUserClients: default: APP_TYPE_SINGLE_USER description: Single user type application are designed to serve just one client. Multi user type application is designed to serve multiple clients + enum: + - APP_TYPE_SINGLE_USER + - APP_TYPE_MULTI_USER + type: string noOfUsersPerAppInst: - type: integer default: 1 description: Maximum no of clients that can connect to an instance of this application. This parameter is relevant only for application of type multi user - appProvisioning: - type: boolean - default: true - description: Define if application can be instantiated or not - CallbackCredentials: + type: integer + required: + - latencyConstraints type: object + ArtefactId: + description: A globally unique identifier associated with the artefact. Originating + OP generates this identifier when artefact is submitted over NBI. + format: uuid + type: string + CPUArchType: + description: CPU Instruction Set Architecture (ISA) E.g., Intel, Arm etc. + enum: + - ISA_X86 + - ISA_X86_64 + - ISA_ARM_64 + type: string + CallbackCredentials: description: Authentication credentials for callbacks. Callbacks use the same security scheme, flows, and scopes as the forward path. - required: - - tokenUrl - - clientId - - clientSecret properties: - tokenUrl: - $ref: '#/components/schemas/Uri' - description: Oauth2 token endpoint. clientId: - type: string description: Client id for oauth2 client credentials flow. - clientSecret: type: string + clientSecret: description: Client secret for oauth2 client credentials flow. + type: string + tokenUrl: + $ref: '#/components/schemas/Uri' + description: Oauth2 token endpoint. + required: + - tokenUrl + - clientId + - clientSecret + type: object + CommandLineParams: + description: List of commands and arguments that shall be invoked when the component + instance is created. This is valid only for container based deployment. + properties: + command: + description: List of commands that application should invoke when an instance + is created. + items: + type: string + type: array + commandArgs: + description: List of arguments required by the command. + items: + type: string + type: array + required: + - command + type: object CompEnvParams: description: Environment variables are key value pairs that should be injected when component in instantiated - type: object - required: - - envVarName - - envValueType properties: - envVarName: - type: string - pattern: ^[A-Za-z0-9][A-Za-z0-9_]{6,30}[A-Za-z0-9]$ - description: Name of environment variable envValueType: - type: string enum: - USER_DEFINED - PLATFORM_DEFINED_DYNAMIC_PORT - PLATFORM_DEFINED_DNS - PLATFORM_DEFINED_IP - envVarValue: type: string - pattern: ^[A-Za-z0-9][A-Za-z0-9_]{6,62}[A-Za-z0-9]$ - description: Value to be assigned to environment variable - envVarSrc: + envVarName: + description: Name of environment variable + pattern: ^[A-Za-z0-9][A-Za-z0-9_]{6,30}[A-Za-z0-9]$ type: string + envVarSrc: description: Full path of parameter from componentSpec that should be used to generate the environment value. Eg. networkResourceProfile[1]. interfaceId. - CommandLineParams: - description: List of commands and arguments that shall be invoked when the component - instance is created. This is valid only for container based deployment. - type: object - required: - - command - properties: - command: - type: array - items: - type: string - description: List of commands that application should invoke when an instance - is created. - commandArgs: - type: array - items: - type: string - description: List of arguments required by the command. - DeploymentConfig: - description: Configuration used when deploying a component. May override other - ComponentSpec parameters related to deployment like restart policy, command - line parameters, environment variables, etc. - type: object - required: - - configType - - contents - properties: - configType: type: string - enum: - - DOCKER_COMPOSE - - KUBERNETES_MANIFEST - - CLOUD_INIT - - HELM_VALUES - description: Config type. - contents: + envVarValue: + description: Value to be assigned to environment variable + pattern: ^[A-Za-z0-9][A-Za-z0-9_]{6,62}[A-Za-z0-9]$ type: string - description: Contents of the configuration. + required: + - envVarName + - envValueType + type: object ComponentSpec: description: Details about compute, networking and storage requirements for each component of the application. App provider should define all information @@ -602,166 +292,229 @@ components: level this section should have information just about the component. In case the artefact is being defined at application level the section should provide details about all the components. - type: object - required: - - componentName - - images - - numOfInstances - - restartPolicy - - computeResourceProfile properties: + commandLineParams: + $ref: '#/components/schemas/CommandLineParams' + compEnvParams: + items: + $ref: '#/components/schemas/CompEnvParams' + type: array componentName: - type: string - pattern: ^[A-Za-z0-9][A-Za-z0-9_]{6,62}[A-Za-z0-9]$ description: Must be a valid RFC 1035 label name. Component name must be unique with an application - images: - description: List of all images associated with the component. Images are - specified using the file identifiers. Partner OP provides these images - using file upload api. - type: array - items: - $ref: '#/components/schemas/FileId' - minItems: 1 - numOfInstances: - type: integer - format: int32 - description: Number of component instances to be launched. - restartPolicy: + pattern: ^[A-Za-z0-9][A-Za-z0-9_]{6,62}[A-Za-z0-9]$ type: string - enum: - - RESTART_POLICY_ALWAYS - - RESTART_POLICY_NEVER - description: How the platform shall handle component failure - commandLineParams: - $ref: '#/components/schemas/CommandLineParams' + computeResourceProfile: + $ref: '#/components/schemas/ComputeResourceInfo' + deploymentConfig: + $ref: '#/components/schemas/DeploymentConfig' exposedInterfaces: description: Each application component exposes some ports either for external users or for inter component communication. Application provider is required to specify which ports are to be exposed and the type of traffic that will flow through these ports. - type: array items: $ref: '#/components/schemas/InterfaceDetails' minItems: 1 - computeResourceProfile: - $ref: '#/components/schemas/ComputeResourceInfo' - compEnvParams: type: array + images: + description: List of all images associated with the component. Images are + specified using the file identifiers. Partner OP provides these images + using file upload api. items: - $ref: '#/components/schemas/CompEnvParams' - deploymentConfig: - $ref: '#/components/schemas/DeploymentConfig' + $ref: '#/components/schemas/FileId' + minItems: 1 + type: array + numOfInstances: + description: Number of component instances to be launched. + format: int32 + type: integer persistentVolumes: description: The ephemeral volume a container process may need to temporary store internal data - type: array items: $ref: '#/components/schemas/PersistentVolumeDetails' minItems: 1 - ComputeResourceInfo: - type: object + type: array + restartPolicy: + description: How the platform shall handle component failure + enum: + - RESTART_POLICY_ALWAYS + - RESTART_POLICY_NEVER + type: string required: - - cpuArchType - - numCPU - - memory + - componentName + - images + - numOfInstances + - restartPolicy + - computeResourceProfile + type: object + ComputeResourceInfo: properties: cpuArchType: - type: string + description: CPU Instruction Set Architecture (ISA) E.g., Intel, Arm etc. enum: - ISA_X86_64 - - ISA_ARM_64 - description: CPU Instruction Set Architecture (ISA) E.g., Intel, Arm etc. - numCPU: - $ref: '#/components/schemas/Vcpu' - memory: - type: integer - format: int64 - description: Amount of RAM in Mbytes + - ISA_ARM_64 + type: string + cpuExclusivity: + description: Support for exclusive CPUs + type: boolean diskStorage: - type: integer - format: int32 description: Amount of disk storage in Gbytes for a given ISA type + format: int32 + type: integer + fpga: + description: Number of FPGAs available for a given ISA type + type: integer gpu: - type: array items: $ref: '#/components/schemas/GpuInfo' - vpu: + type: array + hugepages: + items: + $ref: '#/components/schemas/HugePage' + type: array + memory: + description: Amount of RAM in Mbytes + format: int64 type: integer + numCPU: + $ref: '#/components/schemas/Vcpu' + vpu: description: Number of Intel VPUs available for a given ISA type - fpga: type: integer - description: Number of FPGAs available for a given ISA type - hugepages: - type: array + required: + - cpuArchType + - numCPU + - memory + type: object + CountryCode: + description: ISO 3166-1 Alpha-2 code for the country of Partner operator + pattern: ^[A-Z]{2}$ + type: string + DeploymentConfig: + description: Configuration used when deploying a component. May override other + ComponentSpec parameters related to deployment like restart policy, command + line parameters, environment variables, etc. + properties: + configType: + description: Config type. + enum: + - DOCKER_COMPOSE + - KUBERNETES_MANIFEST + - CLOUD_INIT + - HELM_VALUES + type: string + contents: + description: Contents of the configuration. + type: string + required: + - configType + - contents + type: object + FederationAPINames: + enum: + - FEDERATION + - AVAILZONE + - ARTEFACT + - FILE + - SVSAPEFED + - RESMONITOR + - EVENTMGMT + - FAULTMGMT + type: string + FederationAPIResources: + properties: + apiOperations: + description: List of HTTP Methods supported for the given API category items: - $ref: '#/components/schemas/HugePage' - cpuExclusivity: - type: boolean - description: Support for exclusive CPUs - FederationRequestData: + $ref: '#/components/schemas/HttpResources' + minItems: 1 + type: array + name: + $ref: '#/components/schemas/FederationAPINames' + required: + - name + - apiOperations type: object + FederationContextId: + description: This identifier shall be provided by the partner OP on successful + verification and validation of the federation create request and is used by + partner op to identify this newly created federation context. Originating + OP shall provide this identifier in any subsequent request towards the partner + op. + pattern: ^[A-Za-z0-9][A-Za-z0-9-]*$ + readOnly: true + type: string + FederationHealthInfo: + properties: + federationStatus: + $ref: '#/components/schemas/State' + numOfAcceptedZones: + type: string + numOfActiveAlarms: + type: string + numOfApplications: + type: string required: - - origOPFederationId - - initialDate - - partnerStatusLink + - federationStatus + - numOfAcceptedZones + type: object + FederationIdentifier: + description: Globally unique identifier allocated to an operator platform. This + is valid and used only in context of MEC federation interface. + pattern: ^[A-Za-z0-9][A-Za-z0-9-]*$ + type: string + FederationRequestData: properties: - origOPFederationId: - $ref: '#/components/schemas/FederationIdentifier' + initialDate: + description: Time zone info of the federation initiated by the originating + OP + format: date-time + type: string origOPCountryCode: $ref: '#/components/schemas/CountryCode' - origOPMobileNetworkCodes: - $ref: '#/components/schemas/MobileNetworkIds' + origOPFederationId: + $ref: '#/components/schemas/FederationIdentifier' origOPFixedNetworkCodes: $ref: '#/components/schemas/FixedNetworkIds' - initialDate: - type: string - format: date-time - description: Time zone info of the federation initiated by the originating - OP - partnerStatusLink: - $ref: '#/components/schemas/Uri' + origOPMobileNetworkCodes: + $ref: '#/components/schemas/MobileNetworkIds' partnerCallbackCredentials: $ref: '#/components/schemas/CallbackCredentials' - FederationResponseData: - type: object + partnerStatusLink: + $ref: '#/components/schemas/Uri' required: - - partnerOPFederationId - - federationContextId - - platformCaps + - origOPFederationId + - initialDate + - partnerStatusLink + type: object + FederationResponseData: properties: - partnerOPFederationId: - $ref: '#/components/schemas/FederationIdentifier' - partnerOPCountryCode: - $ref: '#/components/schemas/CountryCode' - federationContextId: - $ref: '#/components/schemas/FederationContextId' edgeDiscoveryServiceEndPoint: $ref: '#/components/schemas/ServiceEndpoint' + federationContextId: + $ref: '#/components/schemas/FederationContextId' lcmServiceEndPoint: $ref: '#/components/schemas/ServiceEndpoint' - partnerOPMobileNetworkCodes: - $ref: '#/components/schemas/MobileNetworkIds' - partnerOPFixedNetworkCodes: - $ref: '#/components/schemas/FixedNetworkIds' offeredAvailabilityZones: - type: array + description: List of zones, which the operator platform wishes to make available + to developers/ISVs of requesting operator platform. items: $ref: '#/components/schemas/ZoneDetails' minItems: 1 - description: List of zones, which the operator platform wishes to make available - to developers/ISVs of requesting operator platform. - platformCaps: type: array + partnerOPCountryCode: + $ref: '#/components/schemas/CountryCode' + partnerOPFederationId: + $ref: '#/components/schemas/FederationIdentifier' + partnerOPFixedNetworkCodes: + $ref: '#/components/schemas/FixedNetworkIds' + partnerOPMobileNetworkCodes: + $ref: '#/components/schemas/MobileNetworkIds' + platformCaps: items: - type: string - enum: - - homeRouting - - Anchoring - - serviceAPIs - - faultMgmt - - eventMgmt - - resourceMonitor description: Home routing - Operator platform is capable of routing edge application data traffic from its edges to user device in their home location. This is the case where user devices are served in their home @@ -771,128 +524,231 @@ components: user devices to edge application in user device home network. Service APIs - Capability to handle Service APIs (e.g., CAMARA APIs) from the Leading OP - Flavour: + enum: + - homeRouting + - Anchoring + - serviceAPIs + - faultMgmt + - eventMgmt + - resourceMonitor + type: string + type: array + required: + - partnerOPFederationId + - federationContextId + - platformCaps type: object + FederationSupportedAPIs: + properties: + artefactAPI: + $ref: '#/components/schemas/FederationAPIResources' + availabilityZoneAPI: + $ref: '#/components/schemas/FederationAPIResources' + edgeApplicationAPI: + $ref: '#/components/schemas/FederationAPIResources' + eventManagementAPI: + $ref: '#/components/schemas/FederationAPIResources' + faultManagementAPI: + $ref: '#/components/schemas/FederationAPIResources' + federationBaseAPI: + $ref: '#/components/schemas/FederationAPIResources' + fileAPI: + $ref: '#/components/schemas/FederationAPIResources' + resourceMonitoringAPI: + $ref: '#/components/schemas/FederationAPIResources' + serviceAPIFederation: + $ref: '#/components/schemas/FederationAPIResources' required: - - flavourId - - cpuArchType - - supportedOSTypes - - numCPU - - memorySize - - storageSize + - federationBaseAPI + - availabilityZoneAPI + - edgeApplicationAPI + - artefactAPI + - fileAPI + type: object + FileId: + description: A globally unique identifier associated with the image file. Originating + OP generates this identifier when file is uploaded over NBI. + format: uuid + type: string + FixedNetworkIds: + description: List of network identifier associated with the fixed line network + of the operator platform. + items: + type: string + minItems: 1 + type: array + Flavour: properties: - flavourId: - $ref: '#/components/schemas/FlavourId' cpuArchType: $ref: '#/components/schemas/CPUArchType' - supportedOSTypes: - description: A list of operating systems which this flavour configuration - can support e.g., RHEL Linux, Ubuntu 18.04 LTS, MS Windows 2012 R2. + cpuExclusivity: + description: Support for exclusive CPUs + type: boolean + flavourId: + $ref: '#/components/schemas/FlavourId' + fpga: + description: Number of FPGAs + format: int32 + type: integer + gpu: + items: + $ref: '#/components/schemas/GpuInfo' type: array + hugepages: items: - $ref: '#/components/schemas/OSType' - minItems: 1 - numCPU: - type: integer - format: int32 - description: Number of available vCPUs + $ref: '#/components/schemas/HugePage' + type: array memorySize: - type: integer - format: int32 description: Amount of RAM in Mbytes - storageSize: + format: int32 type: integer + numCPU: + description: Number of available vCPUs format: int32 - description: Amount of disk storage in Gbytes - gpu: - type: array - items: - $ref: '#/components/schemas/GpuInfo' - fpga: type: integer + storageSize: + description: Amount of disk storage in Gbytes format: int32 - description: Number of FPGAs - vpu: type: integer - description: Number of Intel VPUs available - hugepages: - type: array + supportedOSTypes: + description: A list of operating systems which this flavour configuration + can support e.g., RHEL Linux, Ubuntu 18.04 LTS, MS Windows 2012 R2. items: - $ref: '#/components/schemas/HugePage' - cpuExclusivity: - type: boolean - description: Support for exclusive CPUs - GpuInfo: - type: object + $ref: '#/components/schemas/OSType' + minItems: 1 + type: array + vpu: + description: Number of Intel VPUs available + type: integer required: - - gpuVendorType - - gpuModeName - - gpuMemory - - numGPU + - flavourId + - cpuArchType + - supportedOSTypes + - numCPU + - memorySize + - storageSize + type: object + FlavourId: + description: An identifier to refer to a specific combination of compute resources + type: string + Fqdn: + type: string + GeoLocation: + description: Latitude,Longitude as decimal fraction up to 4 digit precision + pattern: ^([-+]?)([\d]{1,2})((((\.)([\d]{1,4}))?(,)))(([-+]?)([\d]{1,3})((\.)([\d]{1,4}))?)$ + type: string + GpuInfo: properties: - gpuVendorType: + gpuMemory: + description: GPU memory in Mbytes + type: integer + gpuModeName: + description: "Model name corresponding to vendorType may include info e.g.\ + \ for NVIDIA, model name could be \u201CTesla M60\u201D, \u201CTesla V100\u201D\ + \ etc." type: string + gpuVendorType: + description: GPU vendor name e.g. NVIDIA, AMD etc. enum: - GPU_PROVIDER_NVIDIA - GPU_PROVIDER_AMD - description: GPU vendor name e.g. NVIDIA, AMD etc. - gpuModeName: type: string - description: "Model name corresponding to vendorType may include info e.g.\ - \ for NVIDIA, model name could be \u201CTesla M60\u201D, \u201CTesla V100\u201D\ - \ etc." - gpuMemory: - type: integer - description: GPU memory in Mbytes numGPU: - type: integer description: Number of GPUs - HugePage: + type: integer + required: + - gpuVendorType + - gpuModeName + - gpuMemory + - numGPU type: object + HttpMethods: + enum: + - POST + - PUT + - PATCH + - DELETE + - GET + type: string + HttpResources: + properties: + href: + $ref: '#/components/schemas/Uri' + httpMethods: + description: List of HTTP Methods supported for the given API category + items: + $ref: '#/components/schemas/HttpMethods' + minItems: 1 + type: array required: - - pageSize - - number + - href + - httpMethods + type: object + HugePage: properties: + number: + description: Total number of huge pages + type: integer pageSize: - type: string + description: Size of hugepage enum: - 2MB - 4MB - 1GB - description: Size of hugepage - number: - type: integer - description: Total number of huge pages - InterfaceDetails: - type: object + type: string required: - - interfaceId - - commProtocol - - commPort - - visibilityType + - pageSize + - number + type: object + InstanceIdentifier: + description: Unique identifier generated by the partner OP to identify an instance + of the application on a specific zone. + type: string + InstanceState: + description: Running status of the application instance. + enum: + - PENDING + - READY + - FAILED + - TERMINATING + type: string + InterfaceDetails: properties: - interfaceId: + InterfaceName: + description: Interface Name. Required only if application has to be attached + to a network other than default. + pattern: ^[a-z][a-z0-9]{3}$ type: string - description: Each Port and corresponding traffic protocol exposed by the - component is identified by a name. Application client on user device requires - this to uniquely identify the interface. - pattern: ^[A-Za-z0-9][A-Za-z0-9_]{6,30}[A-Za-z0-9]$ + commPort: + description: Port number exposed by the component. OP may generate a dynamic + port towards the UCs corresponding to this internal port and forward the + client traffic from dynamic port to container Port. + format: int32 + maximum: 65535 + minimum: 1 + type: integer commProtocol: - type: string + description: Defines the IP transport communication protocol i.e., TCP, + UDP or HTTP enum: - TCP - UDP - HTTP_HTTPS - description: Defines the IP transport communication protocol i.e., TCP, - UDP or HTTP - commPort: - type: integer - format: int32 - minimum: 1 - maximum: 65535 - description: Port number exposed by the component. OP may generate a dynamic - port towards the UCs corresponding to this internal port and forward the - client traffic from dynamic port to container Port. + type: string + interfaceId: + description: Each Port and corresponding traffic protocol exposed by the + component is identified by a name. Application client on user device requires + this to uniquely identify the interface. + pattern: ^[A-Za-z0-9][A-Za-z0-9_]{6,30}[A-Za-z0-9]$ + type: string + network: + description: Name of the network. In case the application has to be associated + with more than 1 network then app provider must define the name of the + network on which this interface has to be exposed. This parameter is + required only if the port has to be exposed on a specific network other + than default. + pattern: ^[A-Za-z][A-Za-z0-9_]{6,30}[A-Za-z0-9]$ + type: string visibilityType: description: Defines whether the interface is exposed to outer world or not i.e., external, or internal. If this is set to "external", then it @@ -900,25 +756,17 @@ components: to edge application components within edge cloud. When exposed to external world, an external dynamic port is assigned for UC traffic and mapped to the internal container Port - type: string enum: - VISIBILITY_EXTERNAL - VISIBILITY_INTERNAL - network: - type: string - pattern: ^[A-Za-z][A-Za-z0-9_]{6,30}[A-Za-z0-9]$ - description: Name of the network. In case the application has to be associated - with more than 1 network then app provider must define the name of the - network on which this interface has to be exposed. This parameter is - required only if the port has to be exposed on a specific network other - than default. - InterfaceName: type: string - pattern: ^[a-z][a-z0-9]{3}$ - description: Interface Name. Required only if application has to be attached - to a network other than default. - InvalidParam: + required: + - interfaceId + - commProtocol + - commPort + - visibilityType type: object + InvalidParam: properties: param: type: string @@ -926,46 +774,42 @@ components: type: string required: - param - MobileNetworkIds: type: object + Ipv4Addr: + example: 198.51.100.1 + pattern: ^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$ + type: string + Ipv6Addr: + allOf: + - pattern: ^((:|(0?|([1-9a-f][0-9a-f]{0,3}))):)((0?|([1-9a-f][0-9a-f]{0,3})):){0,6}(:|(0?|([1-9a-f][0-9a-f]{0,3})))$ + - pattern: ^((([^:]+:){7}([^:]+))|((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?))$ + example: 2001:db8:85a3::8a2e:370:7334 + type: string + Mcc: + pattern: ^\d{3}$ + type: string + Mnc: + pattern: ^\d{2,3}$ + type: string + MobileNetworkIds: properties: mcc: $ref: '#/components/schemas/Mcc' mncs: - type: array items: $ref: '#/components/schemas/Mnc' minItems: 1 - ObjectRepoLocation: + type: array type: object - properties: - repoURL: - $ref: '#/components/schemas/Uri' - userName: - type: string - description: Username to access the repository - password: - type: string - description: Password to access the repository - token: - type: string - description: Authorization token to access the repository OSType: - type: object - required: - - architecture - - distribution - - version - - license properties: architecture: - type: string enum: - x86_64 - x86 example: x86_64 - distribution: type: string + distribution: enum: - RHEL - UBUNTU @@ -973,8 +817,14 @@ components: - FEDORA - WINDOWS - OTHER - version: type: string + license: + enum: + - OS_LICENSE_TYPE_FREE + - OS_LICENSE_TYPE_ON_DEMAND + - NOT_SPECIFIED + type: string + version: enum: - OS_VERSION_UBUNTU_2204_LTS - OS_VERSION_RHEL_8 @@ -983,71 +833,86 @@ components: - OS_VERSION_COREOS_STABLE - OS_MS_WINDOWS_2012_R2 - OTHER - license: type: string - enum: - - OS_LICENSE_TYPE_FREE - - OS_LICENSE_TYPE_ON_DEMAND - - NOT_SPECIFIED - PersistentVolumeDetails: - type: object required: - - volumeSize - - volumeMountPath - - volumeName + - architecture + - distribution + - version + - license + type: object + ObjectRepoLocation: properties: - volumeSize: + password: + description: Password to access the repository type: string - enum: - - 10Gi - - 20Gi - - 50Gi - - 100Gi - description: size of the volume given by user (10GB, 20GB, 50 GB or 100GB) - volumeMountPath: + repoURL: + $ref: '#/components/schemas/Uri' + token: + description: Authorization token to access the repository type: string - description: Defines the mount path of the volume - volumeName: + userName: + description: Username to access the repository type: string - description: Human readable name for the volume - ephemeralType: - type: boolean - default: false - description: It indicates the ephemeral storage on the node and contents - are not preserved if containers restarts + type: object + PersistentVolumeDetails: + properties: accessMode: - type: string + default: RW + description: Values are RW (read/write) and RO (read-only)l enum: - RW - RO - default: RW - description: Values are RW (read/write) and RO (read-only)l - sharingPolicy: type: string - enum: - - EXCLUSIVE - - SHARED + ephemeralType: + default: false + description: It indicates the ephemeral storage on the node and contents + are not preserved if containers restarts + type: boolean + sharingPolicy: default: EXCLUSIVE description: Exclusive or Shared. If shared, then in case of multiple containers same volume will be shared across the containers. - ProblemDetails: + enum: + - EXCLUSIVE + - SHARED + type: string + volumeMountPath: + description: Defines the mount path of the volume + type: string + volumeName: + description: Human readable name for the volume + type: string + volumeSize: + description: size of the volume given by user (10GB, 20GB, 50 GB or 100GB) + enum: + - 10Gi + - 20Gi + - 50Gi + - 100Gi + type: string + required: + - volumeSize + - volumeMountPath + - volumeName type: object + Port: + minimum: 0 + type: integer + ProblemDetails: properties: - title: + cause: type: string detail: type: string - cause: - type: string invalidParams: - type: array items: $ref: '#/components/schemas/InvalidParam' minItems: 1 - ServiceEndpoint: + type: array + title: + type: string type: object - required: - - port + ServiceEndpoint: anyOf: - required: - fqdn @@ -1056,253 +921,373 @@ components: - required: - ipv6Addresses properties: - port: - $ref: '#/components/schemas/Port' fqdn: $ref: '#/components/schemas/Fqdn' ipv4Addresses: - type: array items: $ref: '#/components/schemas/Ipv4Addr' minItems: 1 - ipv6Addresses: type: array + ipv6Addresses: items: $ref: '#/components/schemas/Ipv6Addr' minItems: 1 - ZoneDetails: + type: array + port: + $ref: '#/components/schemas/Port' + required: + - port type: object + State: + properties: + alarmState: + description: Defines the alarm state during its life cycle (raised | updated + | cleared). + enum: + - RAISED + - UPDATED + - CLEAR + type: string required: - - zoneId - - geolocation - - geographyDetails + - alarmState + type: object + Status: + enum: + - FAILED + - TEMPORARY_FAILURE + - AVAILABLE + - LOCKED + - NOT_AVAILABLE + type: string + Uri: + type: string + Vcpu: + description: Number of vcpus in whole, decimal up to millivcpu, or millivcpu + format. + example: + decimal: + value: 0.5 + millivcpu: + value: 500m + whole: + value: 2 + pattern: ^\d+((\.\d{1,3})|(m))?$ + type: string + Version: + description: Versioning info in the format major.minor.patch + pattern: ^(\d{1,2}\.)?(\d{1,2}\.)?(\d{1,2})$ + type: string + VirtImageType: + description: Indicate if the file is Container image or VM image (QCOW2, OVA) + enum: + - QCOW2 + - DOCKER + - OVA + type: string + ZoneDetails: properties: - zoneId: - $ref: '#/components/schemas/ZoneIdentifier' - geolocation: - $ref: '#/components/schemas/GeoLocation' geographyDetails: - type: string description: Details about cities or state covered by the edge. Details about the type of locality for eg rural, urban, industrial etc. This information is defined in human readable form. - ZoneRegistrationRequestData: - type: object + type: string + geolocation: + $ref: '#/components/schemas/GeoLocation' + zoneId: + $ref: '#/components/schemas/ZoneIdentifier' required: - - acceptedAvailabilityZones - - availZoneNotifLink - properties: - acceptedAvailabilityZones: - type: array - items: - $ref: '#/components/schemas/ZoneIdentifier' - minItems: 1 - availZoneNotifLink: - $ref: '#/components/schemas/Uri' - ZoneRegistrationResponseData: + - zoneId + - geolocation + - geographyDetails type: object - required: - - acceptedZoneResourceInfo - properties: - acceptedZoneResourceInfo: - type: array - items: - $ref: '#/components/schemas/ZoneRegisteredData' - minItems: 1 + ZoneIdentifier: + description: Human readable name of the zone. + pattern: ^[A-Za-z0-9][A-Za-z0-9-]*$ + type: string ZoneRegisteredData: - type: object - required: - - zoneId - - reservedComputeResources - - computeResourceQuotaLimits - - flavoursSupported properties: - zoneId: - $ref: '#/components/schemas/ZoneIdentifier' - reservedComputeResources: - description: Resources exclusively reserved for the originator OP. - type: array - items: - $ref: '#/components/schemas/ComputeResourceInfo' - minItems: 1 computeResourceQuotaLimits: description: Max quota on resources partner OP allows over reserved resources. - type: array items: $ref: '#/components/schemas/ComputeResourceInfo' minItems: 1 - flavoursSupported: type: array + flavoursSupported: items: $ref: '#/components/schemas/Flavour' minItems: 1 + type: array networkResources: - type: object - required: - - egressBandWidth - - dedicatedNIC - - supportSriov - - supportDPDK properties: - egressBandWidth: - type: integer - format: int32 - description: Max dl throughput that this edge can offer. It is defined - in Mbps. dedicatedNIC: - type: integer - format: int32 description: Number of network interface cards which can be dedicatedly assigned to application pods on isolated networks. This includes virtual as well physical NICs - supportSriov: + format: int32 + type: integer + egressBandWidth: + description: Max dl throughput that this edge can offer. It is defined + in Mbps. + format: int32 + type: integer + supportDPDK: + description: If this zone supports DPDK based networking. type: boolean + supportSriov: description: If this zone support SRIOV networks or not - supportDPDK: type: boolean - description: If this zone supports DPDK based networking. + required: + - egressBandWidth + - dedicatedNIC + - supportSriov + - supportDPDK + type: object + reservedComputeResources: + description: Resources exclusively reserved for the originator OP. + items: + $ref: '#/components/schemas/ComputeResourceInfo' + minItems: 1 + type: array + zoneId: + $ref: '#/components/schemas/ZoneIdentifier' zoneServiceLevelObjsInfo: - type: object description: "It is a measure of the actual amount of data that is being\ \ sent over a network per unit of time and indicates m\xE1ximum supported\ \ value for a zone" - required: - - latencyRanges - - jitterRanges - - throughputRanges properties: - latencyRanges: - type: object + jitterRanges: properties: - minLatency: + maxJitter: + description: The maximum limit of network jitter between UC and + Edge App in milli seconds. + format: int32 type: integer + minJitter: format: int32 minimum: 1 - description: "The time for data/packet to reach from UC to edge\ - \ application. It represent m\xEDnimum latency in milli seconds\ - \ that may exist between UCs and edge apps in this zone but it\ - \ can be higher in actual." - maxLatency: type: integer - format: int32 - description: The maximum limit of latency between UC and Edge App - in milli seconds. - jitterRanges: type: object + latencyRanges: properties: - minJitter: + maxLatency: + description: The maximum limit of latency between UC and Edge App + in milli seconds. + format: int32 type: integer + minLatency: + description: "The time for data/packet to reach from UC to edge\ + \ application. It represent m\xEDnimum latency in milli seconds\ + \ that may exist between UCs and edge apps in this zone but it\ + \ can be higher in actual." format: int32 minimum: 1 - maxJitter: type: integer - format: int32 - description: The maximum limit of network jitter between UC and - Edge App in milli seconds. - throughputRanges: type: object + throughputRanges: properties: - minThroughput: - type: integer + maxThroughput: + description: The maximum limit of network throughput between UC + and Edge App in Mega bits per seconds (Mbps). format: int32 - minimum: 1 + type: integer + minThroughput: description: The minimum limit of network throughput between UC and Edge App in Mega bits per seconds (Mbps). - maxThroughput: - type: integer format: int32 - description: The maximum limit of network throughput between UC - and Edge App in Mega bits per seconds (Mbps). - responses: - '400': - description: Bad request - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ProblemDetails' - '401': - description: Unauthorized - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ProblemDetails' - '404': - description: Not Found - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ProblemDetails' - '409': - description: Conflict - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ProblemDetails' - '412': - description: Precondition Failed - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ProblemDetails' - '422': - description: Unprocessable Entity - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ProblemDetails' - '500': - description: Internal Server Error - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ProblemDetails' - '501': - description: Not Implemented - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ProblemDetails' - '503': - description: Service Unavailable - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ProblemDetails' - '520': - description: Web Server Returned an Unknown Error - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ProblemDetails' - default: - description: Generic Error + minimum: 1 + type: integer + type: object + required: + - latencyRanges + - jitterRanges + - throughputRanges + type: object + required: + - zoneId + - reservedComputeResources + - computeResourceQuotaLimits + - flavoursSupported + type: object + ZoneRegistrationRequestData: + properties: + acceptedAvailabilityZones: + items: + $ref: '#/components/schemas/ZoneIdentifier' + minItems: 1 + type: array + availZoneNotifLink: + $ref: '#/components/schemas/Uri' + required: + - acceptedAvailabilityZones + - availZoneNotifLink + type: object + ZoneRegistrationResponseData: + properties: + acceptedZoneResourceInfo: + items: + $ref: '#/components/schemas/ZoneRegisteredData' + minItems: 1 + type: array + required: + - acceptedZoneResourceInfo + type: object + serviceAPINameVal: + description: Name of the Service API + enum: + - QualityOnDemand + - DeviceLocation + - DeviceStatus + - SimSwap + - NumberVerification + - DeviceIdentifier + type: string + serviceAPINames: + description: List of Service API capability names an OP supports and offers + to other OPs "quality_on_demand", "device_location" etc. + items: + enum: + - QualityOnDemand + - DeviceLocation + - DeviceStatus + - SimSwap + - NumberVerification + - DeviceIdentifier + type: string + minItems: 1 + type: array + serviceRoutingInfo: + description: List of public IP addresses MNO manages for UEs to connect with + public data networks + items: + pattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/([0-9]|[1-2][0-9]|3[0-2]))?$ + type: string + minItems: 1 + type: array + serviceType: + description: An identifier to refer to partner OP capabilities for application + providers. + enum: + - api_federation + type: string + securitySchemes: + oAuth2ClientCredentials: + flows: + clientCredentials: + scopes: + fed-mgmt: Access to the federation APIs + tokenUrl: http://localhost:8080/realms/federation/protocol/openid-connect/token + type: oauth2 +externalDocs: + description: GSMA, E/WBI APIs v1.3.1 + url: http://www.xxxx.com +info: + description: "# Introduction\n---\nRESTful APIs that allow an OP to share the edge\ + \ cloud resources and capabilities securely to other partner OPs over E/WBI.\n\ + \n---\n# API Scope\n\n---\nAPIs defined in this version of the implementation\ + \ can be categorized into the following areas:\n* __FederationManagement__ - Create\ + \ and manage directed federation relationship with a partner OP\n* __AvailabilityZoneInfoSynchronization__\ + \ - Management of resources of partner OP zones and status updates\n* __ArtefactManagement__\ + \ - Upload, remove, retrieve and update application descriptors, charts and packages\ + \ over E/WBI towards a partner OP\n* __ApplicationOnboardingManagement__ - Register,\ + \ retrieve, update and remove applications over E/WBI towards a partner OP\n*\ + \ __ApplicationDeploymentManagement__ - Create, update, retrieve and terminate\ + \ application instances over E/WBI towards a partner OP\n\n---\n# Definitions\n\ + ---\nThis section provides definitions of terminologies commonly referred to throughout\ + \ the API descriptions.\n\n* __Accepted Zones__ - List of partner OP zones, which\ + \ the originating OP has confirmed to use for its edge applications.\n* __Application\ + \ Provider__ - An application developer, onboarding his/her edge application on\ + \ a partner operator platform (MEC).\n* __Artefact__ - Descriptor, charts or any\ + \ other package associated with the application.\n* __Availability Zone__ - Zones\ + \ that partner OP can offer to share with originating OP.\n* __Device__ - Refers\ + \ to user equipment like mobile phone, tablet, IOT kit, AR/VR device etc. In context\ + \ of MEC users use these devices to access edge applications.\n* __Directed Federation__\ + \ - A Federation between two OP instances A and B, in which edge compute resources\ + \ are shared by B to A, but not from A to B.\n* __Edge Application__ - Application\ + \ designed to run on MEC edge cloud.\n* __E/WBI__ - East west bound interface.\n\ + * __Federation__ - Relationship among member OPs who agrees to offer services\ + \ and capabilities to the application providers and end users of member OPs.\n\ + * __FederationContextId__ - Partner OP defined string identifier representing\ + \ a certain federation relationship.\n* __Federation Identifier__ - Identify an\ + \ operator platform in federation context.\n* __Flavour__ - A group of compute,\ + \ network and storage resources that can be requested or granted as a single unit.\n\ + * __FlavourIdentifier__ - An OP defined string identifier representing a set of\ + \ compute, storage and networking resources.\n* __Home OP__ - Used in federation\ + \ context to identify the OP with which the application developers or user clients\ + \ are registered.\n* __Instance__ - Application process running on an edge.\n\ + * __LCM Service__ - Partner OP service responsible for life cycle management of\ + \ edge applications. LCM service is defined as HTTP based API endpoint identified\ + \ by a well-defined FQDN or IP.\n* __Offered Zones__ - Zones that partner OP offer\ + \ to share to the Originating OP based on the prior agreement and local configuration.\n\ + * __Onboarding__ - Submitting an application to MEC platform.\n* __OP__ - Operator\ + \ platform.\n* __OperatorIdentifier__ - String identifier representing the owner\ + \ of MEC platform. Owner could be an enterprise, a TSP or some other organization.\n\ + * __Originating OP__ - The OP when initiating the federation creation request\ + \ towards the partner OP is defined as the Originating OP.\n* __Partner OP__ -\ + \ Operator Platform which offers its Edge Cloud capabilities to the other Operator\ + \ Platforms via E/WBI.\n* __Resource__ - Compute, networking and storage resources.\n\ + * __ZoneIdentifier__ - An OP defined string identifier representing a certain\ + \ geographical or logical area where edge resources and services are provided.\n\ + * __Zone Confirmation__ - Procedure via which originating OP acknowledges partner\ + \ OP about the partner zones it wishes to use.\n* __User Clients__ - Lightweight\ + \ client applications used to access edge applications. Application users run\ + \ these clients on their devices (UE, IOT device, AR/VR device etc).\n\n---\n\ + # API Operations\n---\n\n__FederationManagement__\n* __CreateFederation__ - Creates\ + \ a directed federation relationship with a partner OP.\n* __GetFederationDetails__\ + \ - Retrieves details about the federation relationship with the partner OP. The\ + \ response shall provide info about the zones offered by the partner, partner\ + \ OP network codes, information about edge discovery and LCM service etc.\n* __DeleteFederationDetails__\ + \ - Remove existing federation with the partner OP.\n* __NotifyFederationUpdates__\ + \ - Call back notification used by partner OP to update originating OP about any\ + \ change in existing federation relationship.\n* __UpdateFederation__ - API used\ + \ by the Originating OP towards the partner OP, to update the parameters associated\ + \ to the existing federation.\n* __QueryFederationContext__ - The Originating\ + \ OP retrieves federationContextId from the partner OP.\n\n__AvailabilityZoneInfoSynchronization__\n\ + * __ZoneSubscribe__ - Informs partner OP that originating OP is willing to access\ + \ the specified zones and partner OP shall reserve compute and network resources\ + \ for these zones.\n* __ZoneUnsubscribe__ - Informs partner OP that originating\ + \ OP will no longer access the specified partner OP zone.\n* __GetZoneData__ -\ + \ Retrieves details about the computation and network resources that partner OP\ + \ has reserved for an partner OP zone.\n* __Notify Zone Information__ - Call back\ + \ notification used by partner OP to update originating OP about changes in the\ + \ resources reserved on a partner zone.\n\n__ArtefactManagement__\n* __UploadArtefact__\ + \ - Uploads application artefact on partner operator platform.\n* __RemoveArtefact__\ + \ - Removes an artefact from partner operator platform.\n* __GetArtefact__ - Retrieves\ + \ details about an artefact from partner operator platform.\n\n__ApplicationOnboardingManagement__\n\ + * __OnboardApplication__ - Submits an application details to a partner OP. Based\ + \ on the details provided, partner OP shall do bookkeeping, resource validation\ + \ and other pre-deployment operations.\n* __UpdateApplication__ - Updates partner\ + \ OP about changes in application compute resource requirements, QOS Profile,\ + \ associated descriptor or change in associated components.\n* __DeboardApplication__\ + \ - Removes an application from partner OP.\n* __ViewApplication__ - Retrieves\ + \ application details from partner OP.\n* __OnboardExistingAppNewZones__ - Make\ + \ an application available on new additional zones.\n* __LockUnlockApplicationZone__\ + \ - Forbid or permit instantiation of application on a zone.\n\n__Application\ + \ Instance Lifecycle Management__\n* __InstallApp__ - Instantiates an application\ + \ on a partner OP zone.\n* __GetAppInstanceDetails__ - Retrieves an application\ + \ instance details from partner OP.\n* __RemoveApp__ - Terminate an application\ + \ instance on a partner OP zone.\n* __GetAllAppInstances__ - Retrieves details\ + \ about all instances of the application running on partner OP zones.\n\n\n\xA9\ + \ 2023 GSM Association.\nAll rights reserved.\n" + title: Federation Management Service + version: 1.2.0 +openapi: 3.0.3 paths: - /partner: - post: - summary: Creates one direction federation with partner operator platform. - operationId: CreateFederation - tags: - - FederationManagement - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/FederationRequestData' + /fed-context-id: + get: + operationId: GetFederationContextId responses: '200': - description: Federation meta-info request accepted content: application/json: schema: - $ref: '#/components/schemas/FederationResponseData' + properties: + FederationContextId: + $ref: '#/components/schemas/FederationContextId' + required: + - FederationContextId + type: object + description: Federation context identifier retrieval request accepted headers: - Location: - description: 'Contains the URI of the newly created resource, according - to the structure: {apiRoot}/operatorplatform/federation/v1/partner/{federationContextId}' - required: true - schema: - type: string Accept-Encoding: description: Accept-Encoding, described in IETF RFC 7694 schema: @@ -1311,6 +1296,12 @@ paths: description: Content-Encoding, described in IETF RFC 7231 schema: type: string + Location: + description: 'Contains the URI of the existing resource, according to + the structure: {apiRoot}/operatorplatform/federation/v1/partner/{federationContextId}' + required: true + schema: + type: string '400': $ref: '#/components/responses/400' '401': @@ -1329,11 +1320,102 @@ paths: $ref: '#/components/responses/520' default: $ref: '#/components/responses/default' + summary: Retrieves the existing federationContextId with partner operator platform. + tags: + - FederationManagement + parameters: + - $ref: '#/components/parameters/XInternalHeader' + - $ref: '#/components/parameters/XPartnerApiRootHeader' + /partner: + parameters: + - $ref: '#/components/parameters/XInternalHeader' + - $ref: '#/components/parameters/XPartnerApiRootHeader' + post: callbacks: onPartnerStatusEvent: '{$request.body#/partnerStatusLink }': post: requestBody: + content: + application/json: + schema: + properties: + addFixedNetworkIds: + $ref: '#/components/schemas/FixedNetworkIds' + addMobileNetworkIds: + $ref: '#/components/schemas/MobileNetworkIds' + addServiceAPIs: + $ref: '#/components/schemas/serviceAPINames' + addZones: + description: List of zones, which the operator platform + wishes to make available to developers/ISVs of requesting + operator platform. + items: + $ref: '#/components/schemas/ZoneDetails' + minItems: 1 + type: array + edgeDiscoverySvcEndPoint: + $ref: '#/components/schemas/ServiceEndpoint' + federationContextId: + $ref: '#/components/schemas/FederationIdentifier' + federationStatus: + $ref: '#/components/schemas/Status' + lcmSvcEndPoint: + $ref: '#/components/schemas/ServiceEndpoint' + modificationDate: + description: Date and time of the federation modification + by the originating partner OP + format: date-time + type: string + objectType: + enum: + - FEDERATION + - ZONES + - EDGE_DISCOVERY_SERVICE + - LCM_SERVICE + - MOBILE_NETWORK_CODES + - FIXED_NETWORK_CODES + - SERVICE_APIS + type: string + operationType: + enum: + - STATUS + - UPDATE + - ADD + - REMOVE + type: string + removeFixedNetworkIds: + $ref: '#/components/schemas/FixedNetworkIds' + removeMobileNetworkIds: + $ref: '#/components/schemas/MobileNetworkIds' + removeServiceAPIs: + $ref: '#/components/schemas/serviceAPINames' + removeZones: + description: List of zones, which the operator platform + no longer wishes to share. + items: + $ref: '#/components/schemas/ZoneIdentifier' + minItems: 1 + type: array + zoneStatus: + items: + properties: + status: + $ref: '#/components/schemas/Status' + zoneId: + $ref: '#/components/schemas/ZoneIdentifier' + required: + - zoneId + - status + type: object + minItems: 1 + type: array + required: + - federationContextId + - objectType + - operationType + - modificationDate + type: object description: 'OP uses this callback api to notify partner OP about change in federation status, federation metadata or offered zone details. Allowed combinations of objectType and operationType are @@ -1369,89 +1451,150 @@ paths: removeServiceAPIs'' to add or remove Service APIs support. ' + responses: + '204': + description: Expected response to a successful call back processing + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '404': + $ref: '#/components/responses/404' + '409': + $ref: '#/components/responses/409' + '422': + $ref: '#/components/responses/422' + '500': + $ref: '#/components/responses/500' + '503': + $ref: '#/components/responses/503' + '520': + $ref: '#/components/responses/520' + default: + $ref: '#/components/responses/default' + operationId: CreateFederation + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FederationRequestData' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/FederationResponseData' + description: Federation meta-info request accepted + headers: + Accept-Encoding: + description: Accept-Encoding, described in IETF RFC 7694 + schema: + type: string + Content-Encoding: + description: Content-Encoding, described in IETF RFC 7231 + schema: + type: string + Location: + description: 'Contains the URI of the newly created resource, according + to the structure: {apiRoot}/operatorplatform/federation/v1/partner/{federationContextId}' + required: true + schema: + type: string + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '404': + $ref: '#/components/responses/404' + '409': + $ref: '#/components/responses/409' + '422': + $ref: '#/components/responses/422' + '500': + $ref: '#/components/responses/500' + '503': + $ref: '#/components/responses/503' + '520': + $ref: '#/components/responses/520' + default: + $ref: '#/components/responses/default' + summary: Creates one direction federation with partner operator platform. + tags: + - FederationManagement + /{federationContextId}/application/lcm: + parameters: + - $ref: '#/components/parameters/XInternalHeader' + - $ref: '#/components/parameters/XPartnerApiRootHeader' + post: + callbacks: + onInstanceStatusEvent: + '{$request.body#/appInstCallbackLink}': + post: + requestBody: content: application/json: - schema: - type: object - required: - - federationContextId - - objectType - - operationType - - modificationDate + schema: properties: + appId: + $ref: '#/components/schemas/AppIdentifier' + appInstanceId: + $ref: '#/components/schemas/InstanceIdentifier' + appInstanceInfo: + minProperties: 1 + properties: + accesspointInfo: + description: Information about the IP and Port exposed + by the OP. Application clients shall use these access + points to reach this application instance + items: + properties: + accessPoints: + $ref: '#/components/schemas/ServiceEndpoint' + interfaceId: + description: This is the interface Identifier + that app provider defines when application is + onboarded. + pattern: ^[A-Za-z0-9][A-Za-z0-9_]{6,30}[A-Za-z0-9]$ + type: string + required: + - interfaceId + - accessPoints + type: object + minItems: 1 + type: array + appInstanceState: + description: Running status of the application instance. + enum: + - PENDING + - READY + - FAILED + - TERMINATING + type: string + message: + description: Event information or failure message. + type: string + type: object federationContextId: $ref: '#/components/schemas/FederationIdentifier' - objectType: - type: string - enum: - - FEDERATION - - ZONES - - EDGE_DISCOVERY_SERVICE - - LCM_SERVICE - - MOBILE_NETWORK_CODES - - FIXED_NETWORK_CODES - - SERVICE_APIS - operationType: - type: string - enum: - - STATUS - - UPDATE - - ADD - - REMOVE - edgeDiscoverySvcEndPoint: - $ref: '#/components/schemas/ServiceEndpoint' - lcmSvcEndPoint: - $ref: '#/components/schemas/ServiceEndpoint' - addMobileNetworkIds: - $ref: '#/components/schemas/MobileNetworkIds' - removeMobileNetworkIds: - $ref: '#/components/schemas/MobileNetworkIds' - addFixedNetworkIds: - $ref: '#/components/schemas/FixedNetworkIds' - removeFixedNetworkIds: - $ref: '#/components/schemas/FixedNetworkIds' - addZones: - type: array - items: - $ref: '#/components/schemas/ZoneDetails' - description: List of zones, which the operator platform - wishes to make available to developers/ISVs of requesting - operator platform. - minItems: 1 - removeZones: - type: array - items: - $ref: '#/components/schemas/ZoneIdentifier' - description: List of zones, which the operator platform - no longer wishes to share. - minItems: 1 - addServiceAPIs: - $ref: '#/components/schemas/serviceAPINames' - removeServiceAPIs: - $ref: '#/components/schemas/serviceAPINames' - zoneStatus: - type: array - items: - type: object - required: - - zoneId - - status - properties: - zoneId: - $ref: '#/components/schemas/ZoneIdentifier' - status: - $ref: '#/components/schemas/Status' - minItems: 1 - federationStatus: - $ref: '#/components/schemas/Status' modificationDate: - type: string + description: Date and time of the instance state modification + by partner OP. format: date-time - description: Date and time of the federation modification - by the originating partner OP + type: string + zoneId: + $ref: '#/components/schemas/ZoneIdentifier' + required: + - federationContextId + - appId + - appInstanceId + - zoneId + - appInstanceInfo + type: object + description: Notification payload. responses: '204': - description: Expected response to a successful call back processing + description: Application instance state notification acknowledged '400': $ref: '#/components/responses/400' '401': @@ -1470,47 +1613,153 @@ paths: $ref: '#/components/responses/520' default: $ref: '#/components/responses/default' - parameters: - - $ref: '#/components/parameters/XInternalHeader' - - $ref: '#/components/parameters/XPartnerApiRootHeader' - /{federationContextId}/partner: - get: - summary: Retrieves details about the federation context with the partner OP. - The response shall provide info about the zones offered by the partner, partner - OP network codes, information about edge discovery and LCM service etc. - operationId: GetFederationDetails + operationId: InstallApp + parameters: + - in: path + name: federationContextId + required: true + schema: + $ref: '#/components/schemas/FederationContextId' + requestBody: + content: + application/json: + schema: + properties: + appId: + $ref: '#/components/schemas/AppIdentifier' + appInstCallbackLink: + $ref: '#/components/schemas/Uri' + appProviderId: + $ref: '#/components/schemas/AppProviderId' + appVersion: + description: Version info of the application + type: string + zoneInfo: + properties: + flavourId: + $ref: '#/components/schemas/FlavourId' + resPool: + description: Resource pool to be used for application instantiation + on this zone. Valid only if IE 'resourceConsumption' is set + to 'RESERVED_RES_SHALL' or 'RESERVED_RES_PREFER' + pattern: ^[A-Za-z0-9][A-Za-z0-9_]{6,30}[A-Za-z0-9]$ + type: string + resourceConsumption: + default: RESERVED_RES_AVOID + description: Specifies if the application can be instantiated + using pre-reserved resource or not. App provider can pre-reserve + a pool of compute resource on each zone. 'RESERVED_RES_SHALL' + instruct OP to use only the pre-reserved resources. 'RESERVED_RES_PREFER' + instruct to first try using pre-reserved resource, if none + available go for non-reserved resources. 'RESERVED_RES_AVOID' + instruct OP not to use pre-reserved resource if possible, + it is a choice depending upon circumstances 'RESERVED_RES_FORBID' + instruct OP not to use pre-reserved resources. + enum: + - RESERVED_RES_SHALL + - RESERVED_RES_PREFER + - RESERVED_RES_AVOID + - RESERVED_RES_FORBID + type: string + zoneId: + type: string + required: + - flavourId + type: object + required: + - appId + - appProviderId + - appVersion + - zoneInfo + - appInstCallbackLink + type: object + description: Details about application and zones where application instance + should be created. It also definea call back URI which the partner OP shall + use update home OP about a change in instance status. + responses: + '202': + content: + application/json: + schema: + properties: + appInstIdentifier: + $ref: '#/components/schemas/InstanceIdentifier' + zoneId: + $ref: '#/components/schemas/ZoneIdentifier' + required: + - zoneId + - appInstIdentifier + type: object + description: Application instance creation request accepted. + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '404': + $ref: '#/components/responses/404' + '409': + $ref: '#/components/responses/409' + '422': + $ref: '#/components/responses/422' + '500': + $ref: '#/components/responses/500' + '503': + $ref: '#/components/responses/503' + '520': + $ref: '#/components/responses/520' + default: + $ref: '#/components/responses/default' + summary: Instantiates an application on a partner OP zone. tags: - - FederationManagement + - ApplicationDeploymentManagement + /{federationContextId}/application/lcm/app/{appId}/appProvider/{appProviderId}: + get: + operationId: GetAllAppInstances parameters: - - name: federationContextId - in: path + - in: path + name: federationContextId required: true schema: $ref: '#/components/schemas/FederationContextId' + - in: path + name: appId + required: true + schema: + $ref: '#/components/schemas/AppIdentifier' + - in: path + name: appProviderId + required: true + schema: + $ref: '#/components/schemas/AppProviderId' responses: '200': - description: Federation meta-info request accepted content: application/json: schema: - type: object - required: - - edgeDiscoveryServiceEndPoint - - lcmServiceEndPoint - properties: - edgeDiscoveryServiceEndPoint: - $ref: '#/components/schemas/ServiceEndpoint' - lcmServiceEndPoint: - $ref: '#/components/schemas/ServiceEndpoint' - allowedMobileNetworkIds: - $ref: '#/components/schemas/MobileNetworkIds' - allowedFixedNetworkIds: - $ref: '#/components/schemas/FixedNetworkIds' - offeredAvailabilityZones: - type: array - items: - $ref: '#/components/schemas/ZoneDetails' - minItems: 1 + items: + properties: + appInstanceInfo: + items: + properties: + appInstIdentifier: + $ref: '#/components/schemas/InstanceIdentifier' + appInstanceState: + $ref: '#/components/schemas/InstanceState' + required: + - appInstIdentifier + - appInstanceState + type: object + minItems: 1 + type: array + zoneId: + $ref: '#/components/schemas/ZoneIdentifier' + required: + - zoneId + - appInstanceInfo + type: object + minItems: 1 + type: array + description: Application Instance details '400': $ref: '#/components/responses/400' '401': @@ -1529,78 +1778,39 @@ paths: $ref: '#/components/responses/520' default: $ref: '#/components/responses/default' - patch: - summary: API used by the Originating OP towards the partner OP, to update the - parameters associated to the existing federation - operationId: UpdateFederation + summary: Retrieves all application instance of partner OP tags: - - FederationManagement + - ApplicationDeploymentManagement + parameters: + - $ref: '#/components/parameters/XInternalHeader' + - $ref: '#/components/parameters/XPartnerApiRootHeader' + /{federationContextId}/application/lcm/app/{appId}/instance/{appInstanceId}/zone/{zoneId}: + delete: + operationId: RemoveApp parameters: - - name: federationContextId - in: path + - in: path + name: federationContextId required: true schema: $ref: '#/components/schemas/FederationContextId' - requestBody: + - in: path + name: appId required: true - description: Details about changes origination OP wished to apply - content: - application/json: - schema: - type: object - required: - - objectType - - operationType - - modificationDate - properties: - objectType: - type: string - enum: - - MOBILE_NETWORK_CODES - - FIXED_NETWORK_CODES - operationType: - type: string - enum: - - ADD_CODES - - REMOVE_CODES - - UPDATE_CODES - addMobileNetworkIds: - $ref: '#/components/schemas/MobileNetworkIds' - removeMobileNetworkIds: - $ref: '#/components/schemas/MobileNetworkIds' - addFixedNetworkIds: - $ref: '#/components/schemas/FixedNetworkIds' - removeFixedNetworkIds: - $ref: '#/components/schemas/FixedNetworkIds' - modificationDate: - type: string - format: date-time - description: Date and time of the federation modification by the - originating partner OP + schema: + $ref: '#/components/schemas/AppIdentifier' + - in: path + name: appInstanceId + required: true + schema: + $ref: '#/components/schemas/InstanceIdentifier' + - in: path + name: zoneId + required: true + schema: + $ref: '#/components/schemas/ZoneIdentifier' responses: '200': - description: Federation meta-info request accepted - content: - application/json: - schema: - type: object - required: - - edgeDiscoveryServiceEndPoint - - lcmServiceEndPoint - properties: - edgeDiscoveryServiceEndPoint: - $ref: '#/components/schemas/ServiceEndpoint' - lcmServiceEndPoint: - $ref: '#/components/schemas/ServiceEndpoint' - allowedMobileNetworkIds: - $ref: '#/components/schemas/MobileNetworkIds' - allowedFixedNetworkIds: - $ref: '#/components/schemas/FixedNetworkIds' - offeredAvailabilityZones: - type: array - items: - $ref: '#/components/schemas/ZoneDetails' - minItems: 1 + description: Application instance termination request accepted '400': $ref: '#/components/responses/400' '401': @@ -1619,20 +1829,62 @@ paths: $ref: '#/components/responses/520' default: $ref: '#/components/responses/default' - delete: - summary: Remove existing federation with the partner OP - operationId: DeleteFederationDetails + summary: Terminate an application instance on a partner OP zone. tags: - - FederationManagement + - ApplicationDeploymentManagement + get: + operationId: GetAppInstanceDetails parameters: - - name: federationContextId - in: path + - in: path + name: federationContextId required: true schema: $ref: '#/components/schemas/FederationContextId' + - in: path + name: appId + required: true + schema: + $ref: '#/components/schemas/AppIdentifier' + - in: path + name: appInstanceId + required: true + schema: + $ref: '#/components/schemas/InstanceIdentifier' + - in: path + name: zoneId + required: true + schema: + $ref: '#/components/schemas/ZoneIdentifier' responses: '200': - description: Federation removed successfully + content: + application/json: + schema: + minProperties: 1 + properties: + accesspointInfo: + description: Information about the IP and Port exposed by the + OP. Application clients shall use these access points to reach + this application instance + items: + properties: + accessPoints: + $ref: '#/components/schemas/ServiceEndpoint' + interfaceId: + description: This is the interface identifier that app provider + defines when application is onboarded. + pattern: ^[A-Za-z0-9][A-Za-z0-9_]{6,30}[A-Za-z0-9]$ + type: string + required: + - interfaceId + - accessPoints + type: object + minItems: 1 + type: array + appInstanceState: + $ref: '#/components/schemas/InstanceState' + type: object + description: Application instance details '400': $ref: '#/components/responses/400' '401': @@ -1651,42 +1903,127 @@ paths: $ref: '#/components/responses/520' default: $ref: '#/components/responses/default' + summary: Retrieves an application instance details from partner OP. + tags: + - ApplicationDeploymentManagement parameters: - $ref: '#/components/parameters/XInternalHeader' - $ref: '#/components/parameters/XPartnerApiRootHeader' - /fed-context-id: - get: - summary: Retrieves the existing federationContextId with partner operator platform. - operationId: GetFederationContextId - tags: - - FederationManagement + /{federationContextId}/application/onboarding: + parameters: + - $ref: '#/components/parameters/XInternalHeader' + - $ref: '#/components/parameters/XPartnerApiRootHeader' + post: + callbacks: + onApplicationOnboardStatusEvent: + '{$request.body#/appStatusCallbackLink}': + post: + requestBody: + content: + application/json: + schema: + properties: + appId: + $ref: '#/components/schemas/AppIdentifier' + federationContextId: + $ref: '#/components/schemas/FederationIdentifier' + statusInfo: + items: + properties: + onboardStatusInfo: + description: Defines change in application status. + This change could be related to application itself + or an application instance status + enum: + - PENDING + - ONBOARDED + - DEBOARDING + - REMOVED + - FAILED + type: string + zoneId: + $ref: '#/components/schemas/ZoneIdentifier' + required: + - zoneId + - onboardStatusInfo + type: object + minItems: 1 + type: array + required: + - federationContextId + - appId + - statusInfo + type: object + description: Notification payload. + responses: + '204': + description: Application status updated + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '404': + $ref: '#/components/responses/404' + '409': + $ref: '#/components/responses/409' + '422': + $ref: '#/components/responses/422' + '500': + $ref: '#/components/responses/500' + '503': + $ref: '#/components/responses/503' + '520': + $ref: '#/components/responses/520' + default: + $ref: '#/components/responses/default' + operationId: OnboardApplication + parameters: + - in: path + name: federationContextId + required: true + schema: + $ref: '#/components/schemas/FederationContextId' + requestBody: + content: + application/json: + schema: + properties: + appComponentSpecs: + $ref: '#/components/schemas/AppComponentSpecs' + appDeploymentZones: + description: Details about partner OP zones where the application + should be made available; This field when specified will instruct + the OP to restrict application instantiation only on the listed + zones. + items: + $ref: '#/components/schemas/ZoneIdentifier' + minItems: 1 + type: array + appId: + $ref: '#/components/schemas/AppIdentifier' + appMetaData: + $ref: '#/components/schemas/AppMetaData' + appProviderId: + $ref: '#/components/schemas/AppProviderId' + appQoSProfile: + $ref: '#/components/schemas/AppQoSProfile' + appStatusCallbackLink: + $ref: '#/components/schemas/Uri' + required: + - appId + - appProviderId + - appMetaData + - appQoSProfile + - appComponentSpecs + - appStatusCallbackLink + type: object + description: Details about application compute resource requirements, associated + artefacts, QoS profile and regions where application shall be made available + etc. + required: true responses: - '200': - description: Federation context identifier retrieval request accepted - content: - application/json: - schema: - type: object - required: - - FederationContextId - properties: - FederationContextId: - $ref: '#/components/schemas/FederationContextId' - headers: - Location: - description: 'Contains the URI of the existing resource, according to - the structure: {apiRoot}/operatorplatform/federation/v1/partner/{federationContextId}' - required: true - schema: - type: string - Accept-Encoding: - description: Accept-Encoding, described in IETF RFC 7694 - schema: - type: string - Content-Encoding: - description: Content-Encoding, described in IETF RFC 7231 - schema: - type: string + '202': + description: Application onboarded request accepted '400': $ref: '#/components/responses/400' '401': @@ -1705,36 +2042,28 @@ paths: $ref: '#/components/responses/520' default: $ref: '#/components/responses/default' - parameters: - - $ref: '#/components/parameters/XInternalHeader' - - $ref: '#/components/parameters/XPartnerApiRootHeader' - /{federationContextId}/zones: - post: - summary: Originating OP informs partner OP that it is willing to access the - specified zones and partner OP shall reserve compute and network resources - for these zones. - operationId: ZoneSubscribe + summary: Submits an application details to a partner OP. Based on the details + provided, partner OP shall do bookkeeping, resource validation and other + pre-deployment operations. tags: - - AvailabilityZoneInfoSynchronization + - ApplicationOnboardingManagement + /{federationContextId}/application/onboarding/app/{appId}: + delete: + operationId: DeleteApp parameters: - - name: federationContextId - in: path + - in: path + name: federationContextId required: true schema: $ref: '#/components/schemas/FederationContextId' - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ZoneRegistrationRequestData' + - in: path + name: appId required: true + schema: + $ref: '#/components/schemas/AppIdentifier' responses: '200': - description: Zone registered successfully - content: - application/json: - schema: - $ref: '#/components/schemas/ZoneRegistrationResponseData' + description: App deletion successful '400': $ref: '#/components/responses/400' '401': @@ -1753,103 +2082,64 @@ paths: $ref: '#/components/responses/520' default: $ref: '#/components/responses/default' - callbacks: - onZoneResourceUpdateEvent: - '{$request.body#/availZoneNotifLink}': - post: - requestBody: - description: Notification about resource availability. - content: - application/json: - schema: - type: object - required: - - federationContextId - - zoneId - - zoneResUpdInfo - properties: - federationContextId: - $ref: '#/components/schemas/FederationIdentifier' - zoneId: - $ref: '#/components/schemas/ZoneIdentifier' - zoneResUpdInfo: - type: array - items: - type: object - minProperties: 1 - properties: - availableCompResources: - description: Resources exclusively reserved for the - originator OP. - type: array - items: - $ref: '#/components/schemas/ComputeResourceInfo' - minItems: 1 - availableNetResources: - type: object - properties: - egressBandWidth: - type: integer - format: int32 - description: Max dl throughput that this edge - can offer. It is defined in Mbps. - dedicatedNIC: - type: integer - format: int32 - supportSriov: - type: boolean - description: If this zone support SRIOV networks - or not - supportDPDK: - type: boolean - description: If this zone supports DPDK based - networking - minProperties: 1 - responses: - '200': - description: Zone info notification acknowledged - '400': - $ref: '#/components/responses/400' - '401': - $ref: '#/components/responses/401' - '404': - $ref: '#/components/responses/404' - '409': - $ref: '#/components/responses/409' - '422': - $ref: '#/components/responses/422' - '500': - $ref: '#/components/responses/500' - '503': - $ref: '#/components/responses/503' - '520': - $ref: '#/components/responses/520' - default: - $ref: '#/components/responses/default' - parameters: - - $ref: '#/components/parameters/XInternalHeader' - - $ref: '#/components/parameters/XPartnerApiRootHeader' - /{federationContextId}/zones/{zoneId}: - delete: - summary: Assert usage of a partner OP zone. Originating OP informs partner OP - that it will no longer access the specified zone. - operationId: ZoneUnsubscribe + summary: Deboards the application from any zones, if any, and deletes the App. tags: - - AvailabilityZoneInfoSynchronization + - ApplicationOnboardingManagement + get: + operationId: ViewApplication parameters: - - name: federationContextId - in: path + - in: path + name: federationContextId required: true schema: $ref: '#/components/schemas/FederationContextId' - - name: zoneId - in: path + - in: path + name: appId required: true schema: - $ref: '#/components/schemas/ZoneIdentifier' + $ref: '#/components/schemas/AppIdentifier' responses: '200': - description: Zone deregistered successfully + content: + application/json: + schema: + properties: + appComponentSpecs: + $ref: '#/components/schemas/AppComponentSpecs' + appDeploymentZones: + description: Details about partner OP zones where the application + should be made available; This field when specified will instruct + the OP to restrict application instantiation only on the listed + zones. + items: + properties: + countryCode: + $ref: '#/components/schemas/CountryCode' + zoneInfo: + $ref: '#/components/schemas/ZoneIdentifier' + required: + - countryCode + - zoneInfo + type: object + minItems: 1 + type: array + appId: + $ref: '#/components/schemas/AppIdentifier' + appMetaData: + $ref: '#/components/schemas/AppMetaData' + appProviderId: + $ref: '#/components/schemas/AppProviderId' + appQoSProfile: + $ref: '#/components/schemas/AppQoSProfile' + required: + - appId + - appProviderId + - appDeploymentZones + - appMetaData + - appQoSProfile + - appComponentSpecs + type: object + description: Application details '400': $ref: '#/components/responses/400' '401': @@ -1868,30 +2158,95 @@ paths: $ref: '#/components/responses/520' default: $ref: '#/components/responses/default' - get: - summary: Retrieves details about the computation and network resources that - partner OP has reserved for this zone. - operationId: GetZoneData + summary: Retrieves application details from partner OP tags: - - AvailabilityZoneInfoSynchronization + - ApplicationOnboardingManagement + parameters: + - $ref: '#/components/parameters/XInternalHeader' + - $ref: '#/components/parameters/XPartnerApiRootHeader' + patch: + operationId: UpdateApplication parameters: - - name: federationContextId - in: path + - in: path + name: federationContextId required: true schema: $ref: '#/components/schemas/FederationContextId' - - name: zoneId - in: path + - in: path + name: appId + required: true + schema: + $ref: '#/components/schemas/AppIdentifier' + requestBody: + content: + application/json: + schema: + minProperties: 1 + properties: + appComponentSpecs: + $ref: '#/components/schemas/AppComponentSpecs' + appUpdQoSProfile: + anyOf: + - required: + - latencyConstraint + - required: + - bandwidthRequired + - required: + - mobilitySupport + - required: + - multiUserClients + - required: + - appProvisioning + description: Parameters corresponding to the performance constraints, + tenancy details etc. + properties: + appProvisioning: + default: true + description: Define if application can be instantiated or not + type: boolean + bandwidthRequired: + description: Data transfer bandwidth requirement (minimum limit) + for the application. It should in Mbits/sec + format: int32 + minimum: 1 + type: integer + latencyConstraints: + description: Latency requirements for the application.Allowed + values (non-standardized) are none, low and ultra-low. Ultra-Low + may corresponds to range 15 - 30 msec, Low correspond to range + 30 - 50 msec. None means 51 and above + enum: + - NONE + - LOW + - ULTRALOW + type: string + mobilitySupport: + default: false + description: "Indicates if an application is sensitive to user\ + \ mobility and can be relocated. Default is \u201CFALSE\u201D" + type: boolean + multiUserClients: + description: Single user type application are designed to serve + just one client. Multi user type application is designed to + serve multiple clients + enum: + - APP_TYPE_SINGLE_USER + - APP_TYPE_MULTI_USER + type: string + noOfUsersPerAppInst: + default: 1 + description: Maximum no of clients that can connect to an instance + of this application. This parameter is relevant only for application + of type multi user + type: integer + type: object + type: object + description: Details about application compute resource requirements, associated + artefact and QOS profile that needs to be updated. required: true - schema: - $ref: '#/components/schemas/ZoneIdentifier' responses: - '200': - description: Zone metadata - content: - application/json: - schema: - $ref: '#/components/schemas/ZoneRegisteredData' + '202': + description: Application update request accepted '400': $ref: '#/components/responses/400' '401': @@ -1910,230 +2265,114 @@ paths: $ref: '#/components/responses/520' default: $ref: '#/components/responses/default' + summary: Updates partner OP about changes in application compute resource requirements, + QOS Profile, associated descriptor or change in associated components + tags: + - ApplicationOnboardingManagement + /{federationContextId}/artefact: parameters: - $ref: '#/components/parameters/XInternalHeader' - $ref: '#/components/parameters/XPartnerApiRootHeader' - /{federationContextId}/artefact: post: - summary: Uploads application artefact on partner OP. Artefact is a zip file - containing scripts and/or packaging files like Terraform or Helm which are - required to create an instance of an application. operationId: UploadArtefact - tags: - - ArtefactManagement parameters: - - name: federationContextId - in: path + - in: path + name: federationContextId required: true schema: $ref: '#/components/schemas/FederationContextId' requestBody: - description: An application can consist of multiple components. App providers - are allowed to define separate artefacts for each component or they could - define a consolidated artefact at application level. content: application/json: schema: - type: object properties: - artefactId: - $ref: '#/components/schemas/ArtefactId' appProviderId: $ref: '#/components/schemas/AppProviderId' - artefactName: - type: string - pattern: ^[A-Za-z][A-Za-z0-9_]{7,31}$ - description: Name of the artefact. - artefactVersionInfo: - type: string - description: Artefact version information artefactDescription: - type: string - maxLength: 256 description: Brief description of the artefact by the application provider - artefactVirtType: + maxLength: 256 type: string + artefactDescriptorType: + description: Type of descriptor present in the artefact. App provider + can either define either a Helm chart or a Terraform script or + container spec. enum: - - VM_TYPE - - CONTAINER_TYPE - artefactFileName: + - HELM + - TERRAFORM + - ANSIBLE + - SHELL + - COMPONENTSPEC type: string - minLength: 8 - maxLength: 32 - description: Name of the file. - artefactFileFormat: + artefactFile: + description: Helm archive/Terraform archive/container spec file + or Binary image associated with an application component. + format: binary type: string + artefactFileFormat: + description: Artefacts like Helm charts or Terraform scripts may + need compressed format. enum: - WINZIP - TAR - TEXT - TARGZ - description: Artefacts like Helm charts or Terraform scripts may - need compressed format. - artefactDescriptorType: type: string - enum: - - HELM - - TERRAFORM - - ANSIBLE - - SHELL - - COMPONENTSPEC - description: Type of descriptor present in the artefact. App provider - can either define either a Helm chart or a Terraform script or - container spec. - repoType: + artefactFileName: + description: Name of the file. + maxLength: 32 + minLength: 8 + type: string + artefactId: + $ref: '#/components/schemas/ArtefactId' + artefactName: + description: Name of the artefact. + pattern: ^[A-Za-z][A-Za-z0-9_]{7,31}$ type: string - enum: - - PRIVATEREPO - - PUBLICREPO - - UPLOAD - description: "Artefact or file repository location. PUBLICREPO is\ - \ used of public URLs like GitHub, Helm repo, docker registry\ - \ etc., PRIVATEREPO is used for private repo managed by the application\ - \ developer, UPLOAD is for the case when artefact/file is uploaded\ - \ from MEC web portal. OP should pull the image from \u2018repoUrl'\ - \ immediately after receiving the request and then send back the\ - \ response. In case the repoURL corresponds to a docker registry,\ - \ use docker v2 http api to do the pull." artefactRepoLocation: $ref: '#/components/schemas/ObjectRepoLocation' - artefactFile: + artefactVersionInfo: + description: Artefact version information + type: string + artefactVirtType: + enum: + - VM_TYPE + - CONTAINER_TYPE type: string - format: binary - description: Helm archive/Terraform archive/container spec file - or Binary image associated with an application component. componentSpec: - description: Details about compute, networking and storage requirements - for each component of the application. App provider should define - all information needed to instantiate the component. If artefact - is being defined at component level this section should have information - just about the component. In case the artefact is being defined - at application level the section should provide details about - all the components. - type: array - items: - $ref: '#/components/schemas/ComponentSpec' - minItems: 1 - required: true - responses: - '200': - description: Artefact uploaded successfully - '400': - $ref: '#/components/responses/400' - '401': - $ref: '#/components/responses/401' - '404': - $ref: '#/components/responses/404' - '409': - $ref: '#/components/responses/409' - '422': - $ref: '#/components/responses/422' - '500': - $ref: '#/components/responses/500' - '503': - $ref: '#/components/responses/503' - '520': - $ref: '#/components/responses/520' - default: - $ref: '#/components/responses/default' - parameters: - - $ref: '#/components/parameters/XInternalHeader' - - $ref: '#/components/parameters/XPartnerApiRootHeader' - /{federationContextId}/artefact/{artefactId}: - get: - summary: Retrieves details about an artefact. - operationId: GetArtefact - tags: - - ArtefactManagement - parameters: - - name: federationContextId - in: path - required: true - schema: - $ref: '#/components/schemas/FederationContextId' - - name: artefactId - in: path - required: true - schema: - $ref: '#/components/schemas/ArtefactId' - responses: - '200': - description: Artefact details - content: - application/json: - schema: - type: object - required: - - artefactId - - appProviderId - - artefactName - - artefactVersionInfo - - artefactVirtType - - artefactDescriptorType - properties: - artefactId: - $ref: '#/components/schemas/ArtefactId' - appProviderId: - $ref: '#/components/schemas/AppProviderId' - artefactName: - type: string - pattern: ^[A-Za-z][A-Za-z0-9_]{7,31}$ - description: Name of the artefact. - artefactDescription: - type: string - maxLength: 256 - description: Brief description of the artefact by the application - provider - artefactVersionInfo: - type: string - description: Artefact version information - artefactVirtType: - type: string - enum: - - VM_TYPE - - CONTAINER_TYPE - artefactFileName: - type: string - minLength: 8 - maxLength: 32 - description: Name of the file. - artefactFileFormat: - type: string - enum: - - WINZIP - - TAR - - TEXT - - TARGZ - description: Artefacts like Helm charts or Terraform scripts may - need compressed format. - artefactDescriptorType: - type: string - enum: - - HELM - - TERRAFORM - - ANSIBLE - - SHELL - - COMPONENTSPEC - description: Type of descriptor present in the artefact. App - provider can either define either a Helm chart or a Terraform - script or container spec. - repoType: - type: string - enum: - - PRIVATEREPO - - PUBLICREPO - - UPLOAD - description: "Artefact or file repository location. PUBLICREPO\ - \ is used of public URLs like GitHub, Helm repo, docker registry\ - \ etc., PRIVATEREPO is used for private repo managed by the\ - \ application developer, UPLOAD is for the case when artefact/file\ - \ is uploaded from MEC web portal. OP should pull the image\ - \ from \u2018repoUrl' immediately after receiving the request\ - \ and then send back the response. In case the repoURL corresponds\ - \ to a docker registry, use docker v2 http api to do the pull." - artefactRepoLocation: - $ref: '#/components/schemas/ObjectRepoLocation' + description: Details about compute, networking and storage requirements + for each component of the application. App provider should define + all information needed to instantiate the component. If artefact + is being defined at component level this section should have information + just about the component. In case the artefact is being defined + at application level the section should provide details about + all the components. + items: + $ref: '#/components/schemas/ComponentSpec' + minItems: 1 + type: array + repoType: + description: "Artefact or file repository location. PUBLICREPO is\ + \ used of public URLs like GitHub, Helm repo, docker registry\ + \ etc., PRIVATEREPO is used for private repo managed by the application\ + \ developer, UPLOAD is for the case when artefact/file is uploaded\ + \ from MEC web portal. OP should pull the image from \u2018repoUrl'\ + \ immediately after receiving the request and then send back the\ + \ response. In case the repoURL corresponds to a docker registry,\ + \ use docker v2 http api to do the pull." + enum: + - PRIVATEREPO + - PUBLICREPO + - UPLOAD + type: string + type: object + description: An application can consist of multiple components. App providers + are allowed to define separate artefacts for each component or they could + define a consolidated artefact at application level. + required: true + responses: + '200': + description: Artefact uploaded successfully '400': $ref: '#/components/responses/400' '401': @@ -2152,19 +2391,22 @@ paths: $ref: '#/components/responses/520' default: $ref: '#/components/responses/default' - delete: - summary: Removes an artefact from partner OP. - operationId: RemoveArtefact + summary: Uploads application artefact on partner OP. Artefact is a zip file + containing scripts and/or packaging files like Terraform or Helm which are + required to create an instance of an application. tags: - ArtefactManagement + /{federationContextId}/artefact/{artefactId}: + delete: + operationId: RemoveArtefact parameters: - - name: federationContextId - in: path + - in: path + name: federationContextId required: true schema: $ref: '#/components/schemas/FederationContextId' - - name: artefactId - in: path + - in: path + name: artefactId required: true schema: $ref: '#/components/schemas/ArtefactId' @@ -2189,167 +2431,99 @@ paths: $ref: '#/components/responses/520' default: $ref: '#/components/responses/default' - parameters: - - $ref: '#/components/parameters/XInternalHeader' - - $ref: '#/components/parameters/XPartnerApiRootHeader' - /{federationContextId}/application/onboarding: - post: - summary: Submits an application details to a partner OP. Based on the details - provided, partner OP shall do bookkeeping, resource validation and other - pre-deployment operations. - operationId: OnboardApplication - tags: - - ApplicationOnboardingManagement - parameters: - - name: federationContextId - in: path - required: true - schema: - $ref: '#/components/schemas/FederationContextId' - requestBody: - required: true - description: Details about application compute resource requirements, associated - artefacts, QoS profile and regions where application shall be made available - etc. - content: - application/json: - schema: - type: object - required: - - appId - - appProviderId - - appMetaData - - appQoSProfile - - appComponentSpecs - - appStatusCallbackLink - properties: - appId: - $ref: '#/components/schemas/AppIdentifier' - appProviderId: - $ref: '#/components/schemas/AppProviderId' - appDeploymentZones: - description: Details about partner OP zones where the application - should be made available; This field when specified will instruct - the OP to restrict application instantiation only on the listed - zones. - type: array - items: - $ref: '#/components/schemas/ZoneIdentifier' - minItems: 1 - appMetaData: - $ref: '#/components/schemas/AppMetaData' - appQoSProfile: - $ref: '#/components/schemas/AppQoSProfile' - appComponentSpecs: - $ref: '#/components/schemas/AppComponentSpecs' - appStatusCallbackLink: - $ref: '#/components/schemas/Uri' - responses: - '202': - description: Application onboarded request accepted - '400': - $ref: '#/components/responses/400' - '401': - $ref: '#/components/responses/401' - '404': - $ref: '#/components/responses/404' - '409': - $ref: '#/components/responses/409' - '422': - $ref: '#/components/responses/422' - '500': - $ref: '#/components/responses/500' - '503': - $ref: '#/components/responses/503' - '520': - $ref: '#/components/responses/520' - default: - $ref: '#/components/responses/default' - callbacks: - onApplicationOnboardStatusEvent: - '{$request.body#/appStatusCallbackLink}': - post: - requestBody: - description: Notification payload. - content: - application/json: - schema: - type: object - required: - - federationContextId - - appId - - statusInfo - properties: - federationContextId: - $ref: '#/components/schemas/FederationIdentifier' - appId: - $ref: '#/components/schemas/AppIdentifier' - statusInfo: - type: array - items: - type: object - required: - - zoneId - - onboardStatusInfo - properties: - zoneId: - $ref: '#/components/schemas/ZoneIdentifier' - onboardStatusInfo: - description: Defines change in application status. - This change could be related to application itself - or an application instance status - type: string - enum: - - PENDING - - ONBOARDED - - DEBOARDING - - REMOVED - - FAILED - minItems: 1 - responses: - '204': - description: Application status updated - '400': - $ref: '#/components/responses/400' - '401': - $ref: '#/components/responses/401' - '404': - $ref: '#/components/responses/404' - '409': - $ref: '#/components/responses/409' - '422': - $ref: '#/components/responses/422' - '500': - $ref: '#/components/responses/500' - '503': - $ref: '#/components/responses/503' - '520': - $ref: '#/components/responses/520' - default: - $ref: '#/components/responses/default' - parameters: - - $ref: '#/components/parameters/XInternalHeader' - - $ref: '#/components/parameters/XPartnerApiRootHeader' - /{federationContextId}/application/onboarding/app/{appId}: - delete: - summary: Deboards the application from any zones, if any, and deletes the App. - operationId: DeleteApp + summary: Removes an artefact from partner OP. tags: - - ApplicationOnboardingManagement + - ArtefactManagement + get: + operationId: GetArtefact parameters: - - name: federationContextId - in: path + - in: path + name: federationContextId required: true schema: $ref: '#/components/schemas/FederationContextId' - - name: appId - in: path + - in: path + name: artefactId required: true schema: - $ref: '#/components/schemas/AppIdentifier' + $ref: '#/components/schemas/ArtefactId' responses: '200': - description: App deletion successful + content: + application/json: + schema: + properties: + appProviderId: + $ref: '#/components/schemas/AppProviderId' + artefactDescription: + description: Brief description of the artefact by the application + provider + maxLength: 256 + type: string + artefactDescriptorType: + description: Type of descriptor present in the artefact. App + provider can either define either a Helm chart or a Terraform + script or container spec. + enum: + - HELM + - TERRAFORM + - ANSIBLE + - SHELL + - COMPONENTSPEC + type: string + artefactFileFormat: + description: Artefacts like Helm charts or Terraform scripts may + need compressed format. + enum: + - WINZIP + - TAR + - TEXT + - TARGZ + type: string + artefactFileName: + description: Name of the file. + maxLength: 32 + minLength: 8 + type: string + artefactId: + $ref: '#/components/schemas/ArtefactId' + artefactName: + description: Name of the artefact. + pattern: ^[A-Za-z][A-Za-z0-9_]{7,31}$ + type: string + artefactRepoLocation: + $ref: '#/components/schemas/ObjectRepoLocation' + artefactVersionInfo: + description: Artefact version information + type: string + artefactVirtType: + enum: + - VM_TYPE + - CONTAINER_TYPE + type: string + repoType: + description: "Artefact or file repository location. PUBLICREPO\ + \ is used of public URLs like GitHub, Helm repo, docker registry\ + \ etc., PRIVATEREPO is used for private repo managed by the\ + \ application developer, UPLOAD is for the case when artefact/file\ + \ is uploaded from MEC web portal. OP should pull the image\ + \ from \u2018repoUrl' immediately after receiving the request\ + \ and then send back the response. In case the repoURL corresponds\ + \ to a docker registry, use docker v2 http api to do the pull." + enum: + - PRIVATEREPO + - PUBLICREPO + - UPLOAD + type: string + required: + - artefactId + - appProviderId + - artefactName + - artefactVersionInfo + - artefactVirtType + - artefactDescriptorType + type: object + description: Artefact details '400': $ref: '#/components/responses/400' '401': @@ -2368,93 +2542,24 @@ paths: $ref: '#/components/responses/520' default: $ref: '#/components/responses/default' - patch: - summary: Updates partner OP about changes in application compute resource requirements, - QOS Profile, associated descriptor or change in associated components - operationId: UpdateApplication + summary: Retrieves details about an artefact. tags: - - ApplicationOnboardingManagement + - ArtefactManagement + parameters: + - $ref: '#/components/parameters/XInternalHeader' + - $ref: '#/components/parameters/XPartnerApiRootHeader' + /{federationContextId}/partner: + delete: + operationId: DeleteFederationDetails parameters: - - name: federationContextId - in: path + - in: path + name: federationContextId required: true schema: $ref: '#/components/schemas/FederationContextId' - - name: appId - in: path - required: true - schema: - $ref: '#/components/schemas/AppIdentifier' - requestBody: - required: true - description: Details about application compute resource requirements, associated - artefact and QOS profile that needs to be updated. - content: - application/json: - schema: - type: object - minProperties: 1 - properties: - appUpdQoSProfile: - description: Parameters corresponding to the performance constraints, - tenancy details etc. - type: object - anyOf: - - required: - - latencyConstraint - - required: - - bandwidthRequired - - required: - - mobilitySupport - - required: - - multiUserClients - - required: - - appProvisioning - properties: - latencyConstraints: - type: string - enum: - - NONE - - LOW - - ULTRALOW - description: Latency requirements for the application.Allowed - values (non-standardized) are none, low and ultra-low. Ultra-Low - may corresponds to range 15 - 30 msec, Low correspond to range - 30 - 50 msec. None means 51 and above - bandwidthRequired: - type: integer - format: int32 - minimum: 1 - description: Data transfer bandwidth requirement (minimum limit) - for the application. It should in Mbits/sec - mobilitySupport: - type: boolean - default: false - description: "Indicates if an application is sensitive to user\ - \ mobility and can be relocated. Default is \u201CFALSE\u201D" - multiUserClients: - type: string - enum: - - APP_TYPE_SINGLE_USER - - APP_TYPE_MULTI_USER - description: Single user type application are designed to serve - just one client. Multi user type application is designed to - serve multiple clients - noOfUsersPerAppInst: - type: integer - default: 1 - description: Maximum no of clients that can connect to an instance - of this application. This parameter is relevant only for application - of type multi user - appProvisioning: - type: boolean - default: true - description: Define if application can be instantiated or not - appComponentSpecs: - $ref: '#/components/schemas/AppComponentSpecs' responses: - '202': - description: Application update request accepted + '200': + description: Federation removed successfully '400': $ref: '#/components/responses/400' '401': @@ -2473,64 +2578,41 @@ paths: $ref: '#/components/responses/520' default: $ref: '#/components/responses/default' - get: - summary: Retrieves application details from partner OP - operationId: ViewApplication + summary: Remove existing federation with the partner OP tags: - - ApplicationOnboardingManagement + - FederationManagement + get: + operationId: GetFederationDetails parameters: - - name: federationContextId - in: path + - in: path + name: federationContextId required: true schema: $ref: '#/components/schemas/FederationContextId' - - name: appId - in: path - required: true - schema: - $ref: '#/components/schemas/AppIdentifier' responses: '200': - description: Application details content: application/json: schema: - type: object - required: - - appId - - appProviderId - - appDeploymentZones - - appMetaData - - appQoSProfile - - appComponentSpecs properties: - appId: - $ref: '#/components/schemas/AppIdentifier' - appProviderId: - $ref: '#/components/schemas/AppProviderId' - appDeploymentZones: - description: Details about partner OP zones where the application - should be made available; This field when specified will instruct - the OP to restrict application instantiation only on the listed - zones. - type: array + allowedFixedNetworkIds: + $ref: '#/components/schemas/FixedNetworkIds' + allowedMobileNetworkIds: + $ref: '#/components/schemas/MobileNetworkIds' + edgeDiscoveryServiceEndPoint: + $ref: '#/components/schemas/ServiceEndpoint' + lcmServiceEndPoint: + $ref: '#/components/schemas/ServiceEndpoint' + offeredAvailabilityZones: items: - type: object - required: - - countryCode - - zoneInfo - properties: - countryCode: - $ref: '#/components/schemas/CountryCode' - zoneInfo: - $ref: '#/components/schemas/ZoneIdentifier' + $ref: '#/components/schemas/ZoneDetails' minItems: 1 - appMetaData: - $ref: '#/components/schemas/AppMetaData' - appQoSProfile: - $ref: '#/components/schemas/AppQoSProfile' - appComponentSpecs: - $ref: '#/components/schemas/AppComponentSpecs' + type: array + required: + - edgeDiscoveryServiceEndPoint + - lcmServiceEndPoint + type: object + description: Federation meta-info request accepted '400': $ref: '#/components/responses/400' '401': @@ -2549,92 +2631,82 @@ paths: $ref: '#/components/responses/520' default: $ref: '#/components/responses/default' + summary: Retrieves details about the federation context with the partner OP. + The response shall provide info about the zones offered by the partner, partner + OP network codes, information about edge discovery and LCM service etc. + tags: + - FederationManagement parameters: - $ref: '#/components/parameters/XInternalHeader' - $ref: '#/components/parameters/XPartnerApiRootHeader' - /{federationContextId}/application/lcm: - post: - summary: Instantiates an application on a partner OP zone. - operationId: InstallApp - tags: - - ApplicationDeploymentManagement + patch: + operationId: UpdateFederation parameters: - - name: federationContextId - in: path + - in: path + name: federationContextId required: true schema: $ref: '#/components/schemas/FederationContextId' requestBody: - description: Details about application and zones where application instance - should be created. It also definea call back URI which the partner OP shall - use update home OP about a change in instance status. content: application/json: schema: - type: object - required: - - appId - - appProviderId - - appVersion - - zoneInfo - - appInstCallbackLink properties: - appId: - $ref: '#/components/schemas/AppIdentifier' - appVersion: + addFixedNetworkIds: + $ref: '#/components/schemas/FixedNetworkIds' + addMobileNetworkIds: + $ref: '#/components/schemas/MobileNetworkIds' + modificationDate: + description: Date and time of the federation modification by the + originating partner OP + format: date-time type: string - description: Version info of the application - appProviderId: - $ref: '#/components/schemas/AppProviderId' - zoneInfo: - type: object - required: - - flavourId - properties: - zoneId: - type: string - flavourId: - $ref: '#/components/schemas/FlavourId' - resourceConsumption: - type: string - enum: - - RESERVED_RES_SHALL - - RESERVED_RES_PREFER - - RESERVED_RES_AVOID - - RESERVED_RES_FORBID - default: RESERVED_RES_AVOID - description: Specifies if the application can be instantiated - using pre-reserved resource or not. App provider can pre-reserve - a pool of compute resource on each zone. 'RESERVED_RES_SHALL' - instruct OP to use only the pre-reserved resources. 'RESERVED_RES_PREFER' - instruct to first try using pre-reserved resource, if none - available go for non-reserved resources. 'RESERVED_RES_AVOID' - instruct OP not to use pre-reserved resource if possible, - it is a choice depending upon circumstances 'RESERVED_RES_FORBID' - instruct OP not to use pre-reserved resources. - resPool: - type: string - pattern: ^[A-Za-z0-9][A-Za-z0-9_]{6,30}[A-Za-z0-9]$ - description: Resource pool to be used for application instantiation - on this zone. Valid only if IE 'resourceConsumption' is set - to 'RESERVED_RES_SHALL' or 'RESERVED_RES_PREFER' - appInstCallbackLink: - $ref: '#/components/schemas/Uri' - responses: - '202': - description: Application instance creation request accepted. + objectType: + enum: + - MOBILE_NETWORK_CODES + - FIXED_NETWORK_CODES + type: string + operationType: + enum: + - ADD_CODES + - REMOVE_CODES + - UPDATE_CODES + type: string + removeFixedNetworkIds: + $ref: '#/components/schemas/FixedNetworkIds' + removeMobileNetworkIds: + $ref: '#/components/schemas/MobileNetworkIds' + required: + - objectType + - operationType + - modificationDate + type: object + description: Details about changes origination OP wished to apply + required: true + responses: + '200': content: application/json: schema: - type: object - required: - - zoneId - - appInstIdentifier properties: - zoneId: - $ref: '#/components/schemas/ZoneIdentifier' - appInstIdentifier: - $ref: '#/components/schemas/InstanceIdentifier' + allowedFixedNetworkIds: + $ref: '#/components/schemas/FixedNetworkIds' + allowedMobileNetworkIds: + $ref: '#/components/schemas/MobileNetworkIds' + edgeDiscoveryServiceEndPoint: + $ref: '#/components/schemas/ServiceEndpoint' + lcmServiceEndPoint: + $ref: '#/components/schemas/ServiceEndpoint' + offeredAvailabilityZones: + items: + $ref: '#/components/schemas/ZoneDetails' + minItems: 1 + type: array + required: + - edgeDiscoveryServiceEndPoint + - lcmServiceEndPoint + type: object + description: Federation meta-info request accepted '400': $ref: '#/components/responses/400' '401': @@ -2653,74 +2725,70 @@ paths: $ref: '#/components/responses/520' default: $ref: '#/components/responses/default' + summary: API used by the Originating OP towards the partner OP, to update the + parameters associated to the existing federation + tags: + - FederationManagement + /{federationContextId}/zones: + parameters: + - $ref: '#/components/parameters/XInternalHeader' + - $ref: '#/components/parameters/XPartnerApiRootHeader' + post: callbacks: - onInstanceStatusEvent: - '{$request.body#/appInstCallbackLink}': + onZoneResourceUpdateEvent: + '{$request.body#/availZoneNotifLink}': post: requestBody: - description: Notification payload. content: application/json: schema: - type: object - required: - - federationContextId - - appId - - appInstanceId - - zoneId - - appInstanceInfo properties: federationContextId: $ref: '#/components/schemas/FederationIdentifier' - appId: - $ref: '#/components/schemas/AppIdentifier' - appInstanceId: - $ref: '#/components/schemas/InstanceIdentifier' zoneId: $ref: '#/components/schemas/ZoneIdentifier' - appInstanceInfo: - type: object - properties: - appInstanceState: - type: string - enum: - - PENDING - - READY - - FAILED - - TERMINATING - description: Running status of the application instance. - message: - type: string - description: Event information or failure message. - accesspointInfo: - description: Information about the IP and Port exposed - by the OP. Application clients shall use these access - points to reach this application instance - type: array - items: - type: object - required: - - interfaceId - - accessPoints + zoneResUpdInfo: + items: + minProperties: 1 + properties: + availableCompResources: + description: Resources exclusively reserved for the + originator OP. + items: + $ref: '#/components/schemas/ComputeResourceInfo' + minItems: 1 + type: array + availableNetResources: + minProperties: 1 properties: - interfaceId: - type: string - pattern: ^[A-Za-z0-9][A-Za-z0-9_]{6,30}[A-Za-z0-9]$ - description: This is the interface Identifier - that app provider defines when application is - onboarded. - accessPoints: - $ref: '#/components/schemas/ServiceEndpoint' - minItems: 1 - minProperties: 1 - modificationDate: - type: string - format: date-time - description: Date and time of the instance state modification - by partner OP. + dedicatedNIC: + format: int32 + type: integer + egressBandWidth: + description: Max dl throughput that this edge + can offer. It is defined in Mbps. + format: int32 + type: integer + supportDPDK: + description: If this zone supports DPDK based + networking + type: boolean + supportSriov: + description: If this zone support SRIOV networks + or not + type: boolean + type: object + type: object + type: array + required: + - federationContextId + - zoneId + - zoneResUpdInfo + type: object + description: Notification about resource availability. responses: - '204': - description: Application instance state notification acknowledged + '200': + description: Zone info notification acknowledged '400': $ref: '#/components/responses/400' '401': @@ -2739,66 +2807,26 @@ paths: $ref: '#/components/responses/520' default: $ref: '#/components/responses/default' - parameters: - - $ref: '#/components/parameters/XInternalHeader' - - $ref: '#/components/parameters/XPartnerApiRootHeader' - /{federationContextId}/application/lcm/app/{appId}/instance/{appInstanceId}/zone/{zoneId}: - get: - summary: Retrieves an application instance details from partner OP. - operationId: GetAppInstanceDetails - tags: - - ApplicationDeploymentManagement + operationId: ZoneSubscribe parameters: - - name: federationContextId - in: path + - in: path + name: federationContextId required: true schema: $ref: '#/components/schemas/FederationContextId' - - name: appId - in: path - required: true - schema: - $ref: '#/components/schemas/AppIdentifier' - - name: appInstanceId - in: path - required: true - schema: - $ref: '#/components/schemas/InstanceIdentifier' - - name: zoneId - in: path + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ZoneRegistrationRequestData' required: true - schema: - $ref: '#/components/schemas/ZoneIdentifier' responses: '200': - description: Application instance details content: application/json: schema: - type: object - properties: - appInstanceState: - $ref: '#/components/schemas/InstanceState' - accesspointInfo: - description: Information about the IP and Port exposed by the - OP. Application clients shall use these access points to reach - this application instance - type: array - items: - type: object - required: - - interfaceId - - accessPoints - properties: - interfaceId: - type: string - pattern: ^[A-Za-z0-9][A-Za-z0-9_]{6,30}[A-Za-z0-9]$ - description: This is the interface identifier that app provider - defines when application is onboarded. - accessPoints: - $ref: '#/components/schemas/ServiceEndpoint' - minItems: 1 - minProperties: 1 + $ref: '#/components/schemas/ZoneRegistrationResponseData' + description: Zone registered successfully '400': $ref: '#/components/responses/400' '401': @@ -2817,35 +2845,28 @@ paths: $ref: '#/components/responses/520' default: $ref: '#/components/responses/default' - delete: - summary: Terminate an application instance on a partner OP zone. - operationId: RemoveApp + summary: Originating OP informs partner OP that it is willing to access the + specified zones and partner OP shall reserve compute and network resources + for these zones. tags: - - ApplicationDeploymentManagement + - AvailabilityZoneInfoSynchronization + /{federationContextId}/zones/{zoneId}: + delete: + operationId: ZoneUnsubscribe parameters: - - name: federationContextId - in: path + - in: path + name: federationContextId required: true schema: $ref: '#/components/schemas/FederationContextId' - - name: appId - in: path - required: true - schema: - $ref: '#/components/schemas/AppIdentifier' - - name: appInstanceId - in: path - required: true - schema: - $ref: '#/components/schemas/InstanceIdentifier' - - name: zoneId - in: path + - in: path + name: zoneId required: true schema: $ref: '#/components/schemas/ZoneIdentifier' responses: '200': - description: Application instance termination request accepted + description: Zone deregistered successfully '400': $ref: '#/components/responses/400' '401': @@ -2864,60 +2885,30 @@ paths: $ref: '#/components/responses/520' default: $ref: '#/components/responses/default' - parameters: - - $ref: '#/components/parameters/XInternalHeader' - - $ref: '#/components/parameters/XPartnerApiRootHeader' - /{federationContextId}/application/lcm/app/{appId}/appProvider/{appProviderId}: - get: - summary: Retrieves all application instance of partner OP - operationId: GetAllAppInstances + summary: Assert usage of a partner OP zone. Originating OP informs partner OP + that it will no longer access the specified zone. tags: - - ApplicationDeploymentManagement + - AvailabilityZoneInfoSynchronization + get: + operationId: GetZoneData parameters: - - name: federationContextId - in: path + - in: path + name: federationContextId required: true schema: $ref: '#/components/schemas/FederationContextId' - - name: appId - in: path + - in: path + name: zoneId required: true schema: - $ref: '#/components/schemas/AppIdentifier' - - name: appProviderId - in: path - required: true - schema: - $ref: '#/components/schemas/AppProviderId' + $ref: '#/components/schemas/ZoneIdentifier' responses: '200': - description: Application Instance details content: application/json: schema: - type: array - items: - type: object - required: - - zoneId - - appInstanceInfo - properties: - zoneId: - $ref: '#/components/schemas/ZoneIdentifier' - appInstanceInfo: - type: array - items: - type: object - required: - - appInstIdentifier - - appInstanceState - properties: - appInstIdentifier: - $ref: '#/components/schemas/InstanceIdentifier' - appInstanceState: - $ref: '#/components/schemas/InstanceState' - minItems: 1 - minItems: 1 + $ref: '#/components/schemas/ZoneRegisteredData' + description: Zone metadata '400': $ref: '#/components/responses/400' '401': @@ -2936,6 +2927,15 @@ paths: $ref: '#/components/responses/520' default: $ref: '#/components/responses/default' + summary: Retrieves details about the computation and network resources that + partner OP has reserved for this zone. + tags: + - AvailabilityZoneInfoSynchronization parameters: - $ref: '#/components/parameters/XInternalHeader' - $ref: '#/components/parameters/XPartnerApiRootHeader' +security: +- oAuth2ClientCredentials: + - fed-mgmt +servers: +- url: /operatorplatform/federation/v1 -- GitLab