--- openapi: 3.0.3 info: title: Open Exposure Gateway API version: 1.0.1-wip description: | Open Exposure Gateway API allows API consumers to manage the Life Cycle of an Application, Discover Edge Cloud Zones and request Network Resources. # Overview The reference scenario foresees a distributed Telco Edge Cloud where any Application Delevoper, known as an Application Provider, can host and deploy their application according to their specifications and operational criteria (e.g. within an specific geographical zone for data protection purposes, ensure a minimum QoS for the application clients, etc). Through Telco Edge Cloud services Developers around the globe can be benefit from the traditional Cloud strengths but expertise and advantages of the Mobile Network Operators offering to their users an evolved experience for XR, V2X, Holographic and other new services. # Introduction The Edge Application Management API provides capabilities for lifecycle management of application, instances and edge cloud zone discovery. Lifecycle Management allows Application Provider to onboard their application to the Edge Cloud Platform which do bookkeeping, resource validation and other pre-deployment operations. Application details can contain components network specification, package type (QCOW2, OVA, CONTAINER, HELM), operating system details and respository to download the image of the desired application. Once the application is available on the Edge Cloud Platform, the Application Provider can instantiate the application. Edge Cloud Provider helps Application Provider to decide where to instantiate the applications allowing them to retrieve a list of Edge Cloud Zones that meets the provided criteria. This discovery can be filtered by an specific geographical region (e.g when data residency is need) and by status (active, inactive, unknown) Application Provider can ask the Edge Cloud Platform to instantiate the application to one or several Edge Cloud Zones that meet the criteria. Typically when more than one Edge Cloud Zone is required in the same geographic boundary, Application Provider can define instead the entire Edge Cloud Region. Application Provider can retrieve the information of the instances for a given application, the information could be the Edge Cloud Zone where the instance is, status (ready, instantiating, failed, terminating, unknown) and endpoint (ip, port, fqdn). Application Provider can terminate an instance of an application (appInstanceId) or all the instances for a given appId. # Quick Start The usage of this API is based on several resources including GSMA Edge Platform, Public Cloud and SDOs, to define a first approach on the lifecycle management of application instances and edge cloud zones discovery Before starting to use the API, the developer needs to know about the below specified details. __Application Management__ * __submitApp__ - Submits application details to an Edge Cloud Provider. Based on the details provided, Edge Cloud Provider shall do bookkeeping, resource validation and other pre-deployment operations. * __deleteApp__ - Removes an application from an Edge Cloud Provider, if there is a running instance of the given application, the request cannot be done. * __getApp__ - Retrieves the information of a given application. __Application Instance Management__ * __createAppInstance__ Request the Edge Cloud Provider to instatiate an instance of an application in a given Edge Cloud Zone, if this parameter is not set, the Edge Cloud Provider will instantiate the applications in all the Edge Cloud Zones. * __getAppInstance__ Retrieves the list with information of the instances related to a given application. * __deleteAppInstance__ - Removes a given application instance from an Edge Cloud Zone. __Edge Cloud information__ * __getEdgeCloudZones__ List of the operators Edge Cloud Zones and their status, ordering the results by location and filtering by status (active/inactive/unknown) # Authentication and Authorization CAMARA guidelines defines a set of authorization flows which can grant API clients access to the API functionality, as outlined in the document [CAMARA-API-access-and-user-consent.md](https://github.com/camaraproject\ /IdentityAndConsentManagement/blob/main/documentation/CAMARA-API-access\ -and-user-consent.md). Which specific authorization flows are to be used will be determined during onboarding process, happening between the API Client and the Telco Edge exposing the API, taking into account the declared purpose for accessing the API, while also being subject to the prevailing legal framework dictated by local legislation. It is important to remark that in cases where personal user data is processed by the API, and users can exercise their rights through mechanisms such as opt-in and/or opt-out, the use of 3-legged access tokens becomes mandatory. This measure ensures that the API remains in strict compliance with user privacy preferences and regulatory obligations, upholding the principles of transparency and user-centric data control. # API documentation Two operations have been defined in Edge Application Management API. *__Application__* - The Application Provider submit application metadata to the Edge Cloud Platform. The Edge Cloud Platform generates an appId for that metadata that will be used to instantiate the application within the Edge Cloud Zone. *__Edge Cloud__* - Retrieves all the Edge Cloud Zones available according to some defined parameters where an application can be instantiated. Definitions of terminologies commonly referred to throughout the API descriptions. * __Application Provider__ - The provider of the application that accesses an Edge Cloud Provider to deploy its application on the Edge Cloud. An Application Provider may be part of a larger organisation, like an enterprise, enterprise customer of an Edge Cloud Provider, or be an independent entity. * __Application__ - Contains the information about the application to be instantiated. Descriptor, binary image, charts or any other package assosiated with the application. The Application Provider request contains mandatory criteria (e.g. required CPU, memory, storage, bandwidth) defined in an Application. The Edge Cloud Platform generates a unique ID for an Application that is ready to be instantiated. * __Application Instance__ - Is an instance (VM or Container based) running in an Edge Cloud Zone. The Edge Cloud Platform generates a unique ID for each instance. * __Edge Cloud__ - Cloud-like capabilities located at the network edge including, from the Application Provider's perspective, access to elastically allocated compute, data storage and network resources, this access is provided through the Edge Cloud Platform. * __Edge Cloud Provider__ - Company name of the provider offering the Edge Services through the Edge Cloud Platform. Could be an Operator or a Cloud Provider. * __Edge Cloud Region__ - An Edge Cloud Region is equivalent to a Region on a Public Cloud. The higher construct in the hierarchy exposed to an Application Provider who wishes to deploy an Application on the Edge Cloud and broadly represents a geography. An Edge CloudRegion typically contains one or multiple Edge Cloud Zones. An Edge Cloud Region exists within an Edge Cloud. * __Edge Cloud Zone__ - An Edge Cloud Zone is the lowest level of abstraction exposed to an Application Provider who wants to deploy an Application on Edge Cloud. Edge Cloud Zones exists within a Edge Cloud Region. --- contact: email: sp-edc@lists.camaraproject.org license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html externalDocs: description: Product documentation at Camara0 url: https://github.com/camaraproject/EdgeCloud servers: - url: http://vitrualserver:8080/oeg/1.0.0 paths: /apps: post: # security: # - openId: # - edge-application-management:apps:write tags: - Application summary: Submit application metadata to the Edge Cloud Provider. description: | Contains the information about the application to be instantiated in the Edge Cloud operationId: edge_cloud_management_api.controllers.app_controllers.submit_app parameters: - $ref: "#/components/parameters/x-correlator" requestBody: description: | The Application Provider request contains mandatory criteria (e.g. required CPU, memory, storage, bandwidth) and optional parameters. content: application/json: schema: $ref: "#/components/schemas/AppManifest" examples: KubernetesExample: summary: Example for Kubernetes app value: appId: 3fa85f64-5717-4562-b3fc-2c963f66afa6 name: nginx_web_app appProvider: nginx_inc version: 1.0.0 packageType: HELM operatingSystem: architecture: x86_64 family: UBUNTU version: OS_VERSION_UBUNTU_2204_LTS license: OS_LICENSE_TYPE_FREE appRepo: type: PRIVATEREPO imagePath: "https://charts.bitnami.com/bitnami/nginx:1.25.2" userName: helm-user credentials: secure-token authType: DOCKER checksum: sha256:4d67e4c1a4b4c8... requiredResources: infraKind: kubernetes applicationResources: cpuPool: numCPU: 2 memory: 4096 topology: minNumberOfNodes: 3 minNodeCpu: 2 minNodeMemory: 4096 gpuPool: numCPU: 4 memory: 8192 gpuMemory: 32 topology: minNumberOfNodes: 2 minNodeCpu: 4 minNodeMemory: 8192 minNodeGpuMemory: 16 isStandalone: false version: "1.29" additionalStorage: 100GB networking: primaryNetwork: provider: cilium version: "1.13" additionalNetworks: - name: net1 interfaceType: vfio-pci - name: backend-net interfaceType: netdevice - name: db-net interfaceType: interface addons: monitoring: true ingress: true componentSpec: - componentName: nginx_server networkInterfaces: - interfaceId: eth0 protocol: TCP port: 80 visibilityType: VISIBILITY_EXTERNAL - interfaceId: eth1 protocol: TCP port: 443 visibilityType: VISIBILITY_EXTERNAL required: true responses: "200": description: Application created successfully headers: x-correlator: $ref: "#/components/headers/x-correlator" content: application/json: schema: $ref: "#/components/schemas/SubmittedApp" "400": $ref: "#/components/responses/400" "401": $ref: "#/components/responses/401" "403": $ref: "#/components/responses/403" "409": description: Conflict content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" example: status: 409 code: CONFLICT message: "App already exists" "500": $ref: "#/components/responses/500" "501": $ref: "#/components/responses/501" "503": $ref: "#/components/responses/503" get: # security: # - openId: # - edge-application-management:apps:read tags: - Application summary: Retrieve a list of existing Applications description: | Get the list of all existing Application definitions from the Edge Cloud Provider that the user has permission to view. operationId: edge_cloud_management_api.controllers.app_controllers.get_apps parameters: - $ref: "#/components/parameters/x-correlator" responses: "200": description: List of existing applications headers: x-correlator: $ref: "#/components/headers/x-correlator" content: application/json: schema: type: array items: $ref: "#/components/schemas/AppManifest" "401": $ref: "#/components/responses/401" "403": $ref: "#/components/responses/403" "404": $ref: "#/components/responses/404" "500": $ref: "#/components/responses/500" "503": $ref: "#/components/responses/503" /apps/{appId}: get: # security: # - openId: # - edge-application-management:apps:read tags: - Application summary: Retrieve the information of an Application description: | Ask the Edge Cloud Provider the information for a given application operationId: edge_cloud_management_api.controllers.app_controllers.get_app parameters: - $ref: "#/components/parameters/x-correlator" - name: appId description: | A globally unique identifier associated with the application. Edge Cloud Provider generates this identifier when the application is submitted. in: path required: true schema: $ref: "#/components/schemas/AppId" responses: "200": description: Information of Application headers: x-correlator: $ref: "#/components/headers/x-correlator" content: application/json: schema: type: object properties: appManifest: $ref: "#/components/schemas/AppManifest" "401": $ref: "#/components/responses/401" "403": $ref: "#/components/responses/403" "404": $ref: "#/components/responses/404" "500": $ref: "#/components/responses/500" "503": $ref: "#/components/responses/503" delete: # security: # - openId: # - edge-application-management:apps:delete tags: - Application summary: | Delete an Application from an Edge Cloud Provider description: Delete all the information and content related to an Application operationId: edge_cloud_management_api.controllers.app_controllers.delete_app parameters: - $ref: "#/components/parameters/x-correlator" - name: appId in: path description: | Identificator of the application to be deleted provided by the Edge Cloud Provider once the submission was successful required: true schema: $ref: "#/components/schemas/AppId" responses: "200": description: App deleted "202": description: Request accepted headers: x-correlator: $ref: "#/components/headers/x-correlator" "400": $ref: "#/components/responses/400" "401": $ref: "#/components/responses/401" "403": $ref: "#/components/responses/403" "404": $ref: "#/components/responses/404" "409": description: Conflict content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" example: status: 409 code: CONFLICT message: "App with a running application instance cannot be deleted" "500": $ref: "#/components/responses/500" "503": $ref: "#/components/responses/503" /appinstances: post: # security: # - openId: # - edge-application-management:instances:write tags: - Application summary: Instantiation of an Application description: | Ask the Edge Cloud Platform to instantiate an application to one or several Edge Cloud Zones with an Application as an input and an Application Instance as the output. operationId: edge_cloud_management_api.controllers.app_controllers.create_app_instance parameters: - $ref: "#/components/parameters/x-correlator" requestBody: description: | Information about the application and where to deploy it. content: application/json: schema: type: object required: # - name - appId - appZones # - edgeCloudZoneId properties: # name: # $ref: '#/components/schemas/AppInstanceName' appId: $ref: "#/components/schemas/AppId" # edgeCloudZoneId: # $ref: "#/components/schemas/EdgeCloudZoneId" # kubernetesClusterRef: # $ref: "#/components/schemas/KubernetesClusterRef" appZones: $ref: "#/components/schemas/EdgeCloudZones" required: true responses: "202": description: Application instantiation accepted headers: x-correlator: $ref: "#/components/headers/x-correlator" Location: description: Contains the URI of the newly created application. required: true schema: type: string content: application/json: schema: type: object properties: appInstances: type: array items: $ref: "#/components/schemas/AppInstanceInfo" minItems: 1 "400": $ref: "#/components/responses/400" "401": $ref: "#/components/responses/401" "403": $ref: "#/components/responses/403" "409": description: Conflict content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" example: status: 409 code: CONFLICT message: "Application already instantiated in the given Edge Cloud Zone or Edge Cloud Region" "500": $ref: "#/components/responses/500" "501": $ref: "#/components/responses/501" "503": $ref: "#/components/responses/503" get: # security: # - openId: # - edge-application-management:instances:read tags: - Application summary: Retrieve the information of Application Instances for a given App description: | Ask the Edge Cloud Provider the information of the instances for a given application operationId: edge_cloud_management_api.controllers.app_controllers.get_app_instance parameters: - $ref: "#/components/parameters/x-correlator" - name: appId description: | A globally unique identifier associated with the application. Edge Cloud Provider generates this identifier when the application is submitted. in: query required: false schema: $ref: "#/components/schemas/AppId" - name: appInstanceId description: | A globally unique identifier associated with a running instance of an application within an specific Edge Cloud Zone. Edge Cloud Provider generates this identifier. in: query required: false schema: $ref: "#/components/schemas/AppInstanceId" - name: region description: | Human readable name of the geographical Edge Cloud Region of the Edge Cloud. Defined by the Edge Cloud Provider. in: query required: false schema: $ref: "#/components/schemas/EdgeCloudRegion" responses: "200": description: Information of Application Instances headers: x-correlator: $ref: "#/components/headers/x-correlator" content: application/json: schema: type: object properties: appInstanceInfo: type: array items: $ref: "#/components/schemas/AppInstanceInfo" minItems: 1 "401": $ref: "#/components/responses/401" "403": $ref: "#/components/responses/403" "404": $ref: "#/components/responses/404" "500": $ref: "#/components/responses/500" "503": $ref: "#/components/responses/503" /appinstances/{appInstanceId}: delete: # security: # - openId: # - edge-application-management:instances:delete tags: - Application summary: Terminate an Application Instance description: | Terminate a running instance of an application within an Edge Cloud Zone operationId: edge_cloud_management_api.controllers.app_controllers.delete_app_instance parameters: - $ref: "#/components/parameters/x-correlator" - name: appInstanceId in: path description: | Identificator of the specific application instance that will be terminated required: true schema: $ref: "#/components/schemas/AppInstanceId" responses: "202": description: | Request accepted to be processed. It applies for async deletion process headers: x-correlator: $ref: "#/components/headers/x-correlator" "204": description: Application Instance Deleted "400": $ref: "#/components/responses/400" "401": $ref: "#/components/responses/401" "403": $ref: "#/components/responses/403" "404": $ref: "#/components/responses/404" "500": $ref: "#/components/responses/500" "503": $ref: "#/components/responses/503" /edge-cloud-zones: get: # security: # - openId: # - edge-application-management:edge-cloud-zones:read tags: - Edge Cloud Zones summary: Retrieve a list of the operators Edge Cloud Zones and their status description: | List of the operators Edge Cloud Zones and their status, ordering the results by location and filtering by status (active/inactive/unknown) operationId: edge_cloud_management_api.controllers.edge_cloud_controller.get_edge_cloud_zones parameters: - $ref: "#/components/parameters/x-correlator" - name: region description: | Human readable name of the geographical Edge Cloud Region of the Edge Cloud. Defined by the Edge Cloud Provider. in: query required: false schema: $ref: "#/components/schemas/EdgeCloudRegion" - name: status description: Human readable status of the Edge Cloud Zone in: query required: false schema: $ref: "#/components/schemas/EdgeCloudZoneStatus" responses: "200": description: | Successful response, returning the Available Edge Cloud Zones. headers: x-correlator: $ref: "#/components/headers/x-correlator" content: application/json: schema: $ref: "#/components/schemas/EdgeCloudZones" "401": $ref: "#/components/responses/401" "403": $ref: "#/components/responses/403" "404": $ref: "#/components/responses/404" "500": $ref: "#/components/responses/500" "503": $ref: "#/components/responses/503" /edge-cloud-zones/{zoneId}: get: tags: - Edge Cloud Zones summary: Retrieve the details of an Edge Cloud Zone description: | List of the operators Edge Cloud Zones and their status, ordering the results by location and filtering by status (active/inactive/unknown) operationId: edge_cloud_management_api.controllers.edge_cloud_controller.edge_cloud_zone_details parameters: - $ref: "#/components/parameters/x-correlator" - name: zoneId in: path description: | UID of the specific edge cloud zone required: true style: simple schema: type: string responses: "200": description: | Successful response, returning the Edge Cloud Zone details "404": $ref: "#/components/responses/404" /sessions: post: tags: - Quality on Demand Functions summary: Creates a new QoD Session operationId: edge_cloud_management_api.controllers.network_functions_controller.create_qod_session requestBody: description: QoD Session body. content: application/json: schema: $ref: '#/components/schemas/QoDSchema' responses: "200": description: Session created. /sessions/{sessionId}: get: tags: - Quality on Demand Functions summary: Retrieve details of a QoD Session operationId: edge_cloud_management_api.controllers.network_functions_controller.get_qod_session parameters: - name: sessionId in: path description: Represents a QoD Session. required: true style: simple explode: false schema: type: string responses: "200": description: QoD Session found "405": description: Method not allowed "404": description: Session not found delete: tags: - Quality on Demand Functions summary: Remove QoD Session operationId: edge_cloud_management_api.controllers.network_functions_controller.delete_qod_session parameters: - name: sessionId in: path description: Represents a QoD Session. required: true style: simple explode: false schema: type: string responses: "201": description: QoD Session deleted "405": description: Method not allowed "404": description: Session not found # /traffic-influences: # post: # tags: # - Traffic Influence Functions # summary: Creates a new TrafficInfluence resource # operationId: edge_cloud_management_api.controllers.network_functions_controller.create_traffic_influence_resource # requestBody: # description: TrafficInfluence body. # content: # application/json: # schema: # $ref: '#/components/schemas/TrafficInfluenceSchema' # responses: # "200": # description: Resource created. # get: # tags: # - Traffic Influence Functions # summary: Retrieves all TrafficInfluence resources # operationId: edge_cloud_management_api.controllers.network_functions_controller.get_all_traffic_influence_resources # responses: # "200": # description: Resources retrieved. # /traffic-influences/{id}: # get: # tags: # - Traffic Influence Functions # summary: Retrieve details of a TrafficInfluence resource # operationId: edge_cloud_management_api.controllers.network_functions_controller.get_traffic_influence_resource # parameters: # - name: id # in: path # description: Represents a TrafficInfluence resource. # required: true # style: simple # explode: false # schema: # type: string # responses: # "200": # description: TrafficInfluence resource found # "405": # description: Method not allowed # "404": # description: Session not found # delete: # tags: # - Traffic Influence Functions # summary: Remove TrafficInfluence resource # operationId: edge_cloud_management_api.controllers.network_functions_controller.delete_traffic_influence_resource # parameters: # - name: id # in: path # description: Represents a TrafficInfluence resource # required: true # style: simple # explode: false # schema: # type: string # responses: # "201": # description: TrafficInfluence resource deleted # "405": # description: Method not allowed # "404": # description: Session not found /location/retrieve: post: tags: - Location Retrieval Functions summary: Retrieve the location of a device description: | Retrieve the location of a device using the CAMARA Device Location API. The request is forwarded to the Service Resource Manager which delegates to the configured network adapter. operationId: edge_cloud_management_api.controllers.network_functions_controller.retrieve_location requestBody: description: Location retrieval request following CAMARA Device Location API. content: application/json: schema: $ref: '#/components/schemas/RetrievalLocationRequest' examples: PhoneNumberExample: summary: Retrieve location by phone number value: device: phoneNumber: "+123456789" maxAge: 60 Ipv4Example: summary: Retrieve location by IPv4 address value: device: ipv4Address: publicAddress: "198.51.100.1" publicPort: 59765 maxAge: 120 maxSurface: 10000 responses: "200": description: Device location retrieved successfully content: application/json: schema: $ref: '#/components/schemas/LocationResponse' "400": $ref: "#/components/responses/400" "401": $ref: "#/components/responses/401" "404": $ref: "#/components/responses/404" "500": $ref: "#/components/responses/500" "503": $ref: "#/components/responses/503" /partner: post: tags: - FederationManagement summary: Creates one direction federation with partner operator platform. # security: # - oAuth2ClientCredentials: # - fed-mgmt # security: # - jwt: [ ] operationId: edge_cloud_management_api.controllers.federation_manager_controller.create_federation requestBody: content: application/json: schema: $ref: '#/components/schemas/FederationRequestData' required: true responses: "200": description: Federation meta-info 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 style: simple explode: false schema: type: string Accept-Encoding: description: "Accept-Encoding, described in IETF RFC 7694" style: simple explode: false schema: type: string Content-Encoding: description: "Content-Encoding, described in IETF RFC 7231" style: simple explode: false schema: type: string content: application/json: schema: $ref: '#/components/schemas/FederationResponseData' # "400": # description: Bad request # content: # application/problem+json: # schema: # $ref: '#/components/schemas/ProblemDetails' # "404": # description: Unauthorized # content: # application/problem+json: # schema: # $ref: '#/components/schemas/ProblemDetails' # "408": # description: Timeout # content: # application/problem+json: # schema: # $ref: '#/components/schemas/ProblemDetails' # "409": # description: Conflict # content: # application/problem+json: # schema: # $ref: '#/components/schemas/ProblemDetails' # "500": # description: Internal Server Error # content: # application/problem+json: # schema: # $ref: '#/components/schemas/ProblemDetails' # callbacks: # onPartnerStatusEvent: # '{$request.body#/partnerStatusLink }': # post: # requestBody: # 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 # - FEDERATION - STATUS: Status specified by parameter 'federationStatus'. # - ZONES - STATUS: Status specified by parameter 'zoneStatus'. # - ZONES - ADD: Use parameter 'addZones' to define add new zones # - ZONES - REMOVE: Use parameter 'removeZones' to define remove zones. # - EDGE_DISCOVERY_SERVICE - UPDATE: Use parameter 'edgeDiscoverySvcEndPoint' to specify new endpoints # - LCM_SERVICE - UPDATE: Use parameter 'lcmSvcEndPoint' to specify new endpoints # - MOBILE_NETWORK_CODES - ADD: Use parameter 'addMobileNetworkIds' to define new mobile network codes. # - MOBILE_NETWORK_CODES - REMOVE: Use parameter 'removeMobileNetworkIds' to remove mobile network codes. # - FIXED_NETWORK_CODES - ADD: Use parameter 'addFixedNetworkIds' to define new fixed network codes. # - FIXED_NETWORK_CODES - REMOVE: Use parameter 'removeFixedNetworkIds' to remove fixed network codes. # - SERVICE_APIS - ADD/REMOVE: Parameter Usage 'addServiceAPIs / removeServiceAPIs' to add or remove Service APIs support. # content: # application/json: # schema: # required: # - federationContextId # - modificationDate # - objectType # - operationType # type: object # properties: # 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: # minItems: 1 # 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' # removeZones: # minItems: 1 # type: array # description: "List of zones, which the operator platform\ # \ no longer wishes to share." # items: # $ref: '#/components/schemas/ZoneIdentifier' # addServiceAPIs: # $ref: '#/components/schemas/serviceAPINames' # removeServiceAPIs: # $ref: '#/components/schemas/serviceAPINames' # zoneStatus: # minItems: 1 # type: array # items: # required: # - status # - zoneId # type: object # properties: # zoneId: # $ref: '#/components/schemas/ZoneIdentifier' # status: # $ref: '#/components/schemas/Status' # federationStatus: # $ref: '#/components/schemas/Status' # modificationDate: # type: string # description: Date and time of the federation modification # by the originating partner OP # format: date-time # responses: # "204": # description: Expected response to a successful call back processing # "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' # "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' # "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 /{federationContextId}/partner: get: tags: - FederationManagement 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." # security: # - jwt: [ ] operationId: edge_cloud_management_api.controllers.federation_manager_controller.get_federation parameters: - name: federationContextId in: path required: true style: simple explode: false schema: $ref: '#/components/schemas/FederationContextId' responses: "200": description: Federation meta-info request accepted content: application/json: schema: $ref: '#/components/schemas/inline_response_200_1' # "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' # "500": # description: Internal Server Error # content: # application/problem+json: # schema: # $ref: '#/components/schemas/ProblemDetails' delete: tags: - FederationManagement summary: Remove existing federation with the partner OP # security: # - jwt: [ ] operationId: edge_cloud_management_api.controllers.federation_manager_controller.delete_federation parameters: - name: federationContextId in: path required: true style: simple explode: false schema: $ref: '#/components/schemas/FederationContextId' responses: "200": description: Federation removed successfully # "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' # "500": # description: Internal Server Error # content: # application/problem+json: # schema: # $ref: '#/components/schemas/ProblemDetails' /{federationContextId}/zones: post: tags: - FederationManagement summary: Subscribe to availability zones for a federation context. operationId: edge_cloud_management_api.controllers.federation_manager_controller.request_zone_synch parameters: - name: federationContextId in: path required: true style: simple explode: false schema: $ref: '#/components/schemas/FederationContextId' requestBody: required: true content: application/json: schema: type: object responses: "200": description: Zone subscription accepted "400": description: Bad request "404": description: Federation not found /{federationContextId}/zones/{zoneId}: get: tags: - FederationManagement summary: Retrieve reserved resources for a federated zone. description: | Retrieves details about the computation and network resources that the partner OP has reserved for this zone. operationId: edge_cloud_management_api.controllers.federation_manager_controller.get_zone_resource_info parameters: - name: federationContextId in: path required: true style: simple explode: false schema: $ref: '#/components/schemas/FederationContextId' - name: zoneId in: path required: true style: simple explode: false schema: type: string responses: "200": description: Zone resource info retrieved content: application/json: schema: $ref: '#/components/schemas/ZoneResourceInfo' "404": description: Zone not found delete: tags: - FederationManagement summary: Remove availability zone reservation for a federation context. description: | Originating OP informs partner OP that it will no longer access the specified zone. operationId: edge_cloud_management_api.controllers.federation_manager_controller.remove_zone_sync parameters: - name: federationContextId in: path required: true style: simple explode: false schema: $ref: '#/components/schemas/FederationContextId' - name: zoneId in: path required: true style: simple explode: false schema: type: string responses: "200": description: Zone reservation removed content: application/json: schema: $ref: '#/components/schemas/ZoneReservationRemoval' "404": description: Zone not found /fed-context-id: get: tags: - FederationManagement summary: Retrieves the existing federationContextId with partner operator platform. # security: # - jwt: [ ] operationId: edge_cloud_management_api.controllers.federation_manager_controller.get_federation_context_ids responses: "200": description: Federation context identifier retrieval request accepted content: application/json: schema: $ref: '#/components/schemas/inline_response_200_2' # "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' # "408": # description: Request timed out # content: # application/problem+json: # schema: # $ref: '#/components/schemas/ProblemDetails' # "504": # description: Connection Error # content: # application/problem+json: # schema: # $ref: '#/components/schemas/ProblemDetails' # "500": # description: Interal Server Error # content: # application/problem+json: # schema: # $ref: '#/components/schemas/ProblemDetails' components: # securitySchemes: # jwt: # arbitrary name for the security scheme # type: http # scheme: bearer # bearerFormat: JWT # x-bearerInfoFunc: edge_cloud_management_api.controllers.security_controller.decode_token # x-bearerInfoFunc: edge_cloud_management_api.controllers.security_controller.decode_token # securitySchemes: # oAuth2ClientCredentials: # type: oauth2 # flows: # clientCredentials: # tokenUrl: http://federation-manager.federation-manager.svc.cluster.local:8080/realms/federation/protocol/openid-connect/token # scopes: # fed-mgmt: Access to the federation APIs # x-tokenInfoFunc: edge_cloud_management_api.controllers.security_controller.check_oAuth2ClientCredentials # x-scopeValidateFunc: edge_cloud_management_api.controllers.security_controller.validate_scope_oAuth2ClientCredentials parameters: x-correlator: name: x-correlator in: header description: | Correlation id for the different services schema: type: string headers: x-correlator: description: | Correlation id for the different services required: false schema: type: string format: uuid schemas: QoDSchema: type: object properties: device: type: object properties: phoneNumber: type: string networkAccessIdentifier: type: string ipv4Address: type: object properties: publicAddress: type: string publicPort: type: integer ipv6Address: type: string applicationServer: type: object properties: ipv4Address: type: string ipv6Address: type: string devicePorts: type: object properties: ranges: type: array items: type: object required: - from - to properties: from: type: integer to: type: integer ports: type: array items: type: integer applicationServerPorts: type: object properties: ranges: type: array items: type: object required: - from - to properties: from: type: integer to: type: integer ports: type: array items: type: integer qosProfile: type: string sink: type: string duration: type: integer TrafficInfluenceSchema: type: object properties: apiConsumerId: type: string appId: type: string appInstanceId: type: string edgeCloudRegion: type: string edgeCloudZoneId: type: string sourceTrafficFilters: type: object properties: sourcePort: type: integer destinationTrafficFilters: type: object properties: destinationPort: type: integer destinationProtocol: type: string notificationUri: type: string notificationAuthToken: type: string notificationSink: type: object properties: sink: type: string sinkCredentials: type: object properties: credentialtype: type: string accessToken: type: string accessTokenExpireUtc: type: string accessTokenType: type: string RetrievalLocationRequest: type: object properties: device: $ref: '#/components/schemas/Device' maxAge: type: integer description: Maximum age of the location information accepted (in seconds). example: 60 maxSurface: type: integer description: Maximum surface in square meters accepted for the location retrieval. minimum: 1 example: 10000 Device: type: object properties: phoneNumber: type: string description: Phone number of the device in E.164 format. example: "+123456789" networkAccessIdentifier: type: string description: External identifier of the device (e.g. GPSI). example: "device@testnet.net" ipv4Address: $ref: '#/components/schemas/DeviceIpv4Addr' ipv6Address: type: string description: IPv6 address of the device. example: "2001:db8::1" DeviceIpv4Addr: type: object properties: publicAddress: type: string example: "198.51.100.1" privateAddress: type: string example: "10.0.0.1" publicPort: type: integer example: 59765 LocationResponse: type: object properties: lastLocationTime: type: string format: date-time description: Timestamp of the last known location. example: "2024-06-01T12:00:00Z" area: $ref: '#/components/schemas/LocationArea' LocationArea: type: object description: Geographic area of the location (Circle or Polygon). properties: areaType: type: string enum: - CIRCLE - POLYGON example: CIRCLE center: $ref: '#/components/schemas/GeoPoint' radius: type: number description: Radius in meters (when areaType is CIRCLE). example: 800 boundary: type: array description: List of points forming the polygon boundary (when areaType is POLYGON). items: $ref: '#/components/schemas/GeoPoint' GeoPoint: type: object properties: latitude: type: number minimum: -90 maximum: 90 example: 37.9553 longitude: type: number minimum: -180 maximum: 180 example: 23.8522 AccessEndpoint: type: object description: | Application Endpoint for an especific instance that is running in an specific Edge Cloud Zone. required: - port anyOf: - required: - fqdn - required: - ipv4Addresses - required: - ipv6Addresses properties: port: $ref: "#/components/schemas/Port" fqdn: $ref: "#/components/schemas/Fqdn" ipv4Addresses: description: IP version 4 of an application instance type: array items: $ref: "#/components/schemas/Ipv4Addr" minItems: 1 ipv6Addresses: description: IP version 6 of an application instance. type: array items: $ref: "#/components/schemas/Ipv6Addr" minItems: 1 AppId: type: string format: uuid description: | A globally unique identifier associated with the application. Edge Cloud Platform generates this identifier when the Application is submitted. AppInstanceId: type: string format: uuid description: | A globally unique identifier associated with a running instance of an application. Edge Cloud Platform generates this identifier when the instantiation in the Edge Cloud Zone is successful. AppInstanceName: type: string # pattern: ^[A-Za-z][A-Za-z0-9_]{1,63}$ description: Name of the App instance, scoped to the AppProvider AppInstanceInfo: description: Information about the application instance. type: object properties: appInstanceId: $ref: "#/components/schemas/AppInstanceId" status: description: Status of the application instance (default is 'unknown') type: string enum: - ready - instantiating - failed - terminating - unknown default: unknown componentEndpointInfo: description: | Information about the IP and Port exposed by the Edge Cloud Platform. Application Client 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 Application Provider defines when application is being submitted. accessPoints: $ref: "#/components/schemas/AccessEndpoint" minItems: 1 kubernetesClusterRef: $ref: "#/components/schemas/KubernetesClusterRef" edgeCloudZone: $ref: "#/components/schemas/EdgeCloudZone" AppZones: description: | Collection of Edge Cloud Zones and/or Kubernetes cluster reference where the Application Provider wants to instantiate the application. type: array items: type: object properties: kubernetesClusterRef: $ref: "#/components/schemas/KubernetesClusterRef" EdgeCloudZone: $ref: "#/components/schemas/EdgeCloudZone" required: - EdgeCloudZone minItems: 1 additionalProperties: false AppManifest: description: | Application information and requirements provided by the Application Provider type: object properties: appId: $ref: "#/components/schemas/AppId" name: type: string # pattern: ^[A-Za-z][A-Za-z0-9_]{1,63}$ description: Name of the application. appProvider: $ref: "#/components/schemas/AppProvider" version: type: string description: Application version information packageType: description: Format of the application image package type: string enum: - QCOW2 - OVA - CONTAINER - HELM operatingSystem: $ref: "#/components/schemas/OperatingSystem" appRepo: description: | Repository where Application Provider stores the application image type: object required: - type - imagePath properties: type: type: string enum: - PRIVATEREPO - PUBLICREPO description: | Application repository and image URI information. PUBLICREPO is used of public urls like github, helm repo etc. PRIVATEREPO is used for private repo managed by the application developer. Private repo can be accessed by using the app developer provided userName and password. Password is recommended to be the personal access token created by developer e.g. in Github repo. imagePath: $ref: "#/components/schemas/Uri" userName: type: string description: | Username to acces the Helm chart, docker-compose file or VM image repository credentials: type: string maxLength: 128 description: | Password or personal access token created by developer to acces the app repository. API users can generate a personal access token e.g. docker clients to use them as password. authType: type: string enum: - DOCKER - HTTP_BASIC - HTTP_BEARER - NONE description: | The credentials can also be formatted as a Basic auth or Bearer auth in HTTP "Authorization" header. checksum: type: string description: | MD5 checksum for VM and file-based images, sha256 digest for containers requiredResources: $ref: "#/components/schemas/RequiredResources" componentSpec: description: | Information defined in "appRepo" point to the application descriptor e.g. Helm chart, docker-compose yaml file etc. The descriptor may contain one or more containers and their associated meta-data. A component refers to additional details about these containers to expose the instances of the containers to external client applications. App provider can define one or more components (via the associated network port) in componentSpec corresponding to the containers in helm charts or docker-compose yaml file as part of app descriptors. type: array items: type: object required: - componentName - networkInterfaces properties: componentName: type: string description: Component name must be unique with an application networkInterfaces: 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.The underlying platform may assign a dynamic port against the "extPort" that the application clients will use to connect with edge application instance. type: array items: type: object required: - interfaceId - protocol - port - visibilityType properties: interfaceId: type: string # pattern: ^[A-Za-z][A-Za-z0-9_]{3,31}$ description: | Each Port and corresponding traffic protocol exposed by the component is identified by a name. Application client on user device requires this to uniquley idenify the interface. protocol: type: string enum: - TCP - UDP - ANY description: | Defines the IP transport communication protocol i.e., TCP, UDP or ANY port: type: integer format: int32 minimum: 1 maximum: 65535 description: | Port number exposed by the component. Edge Cloud Provider may generate a dynamic port towards the component instance which forwards external traffic to the component port. 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 is exposed to external applications otherwise it is exposed internally 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 extPort type: string enum: - VISIBILITY_EXTERNAL - VISIBILITY_INTERNAL minItems: 1 required: - name - version # - appProvider - packageType - appRepo # - requiredResources - componentSpec AppProvider: type: string # pattern: ^[A-Za-z][A-Za-z0-9_]{7,63}$ description: Human readable name of the Application Provider. AppIdentifier: # pattern: "^[A-Za-z][A-Za-z0-9_]{7,63}$" type: string description: Identifier used to refer to an application. AppProviderId: # pattern: "^[A-Za-z][A-Za-z0-9_]{7,63}$" type: string description: UserId of the app provider. Identifier is relevant only in context of this federation. ArtefactId: type: string description: A globally unique identifier associated with the artefact. Originating OP generates this identifier when artefact is submitted over NBI. format: uuid CountryCode: pattern: "^[A-Z]{2}$" type: string description: ISO 3166-1 Alpha-2 code for the country of Partner operator CPUArchType: type: string description: "CPU Instruction Set Architecture (ISA) E.g., Intel, Arm etc." enum: - ISA_X86 - ISA_X86_64 - ISA_ARM_64 CallbackCredentials: required: - clientId - clientSecret - tokenUrl type: object properties: tokenUrl: $ref: '#/components/schemas/Uri' clientId: type: string description: Client id for oauth2 client credentials flow. clientSecret: type: string description: Client secret for oauth2 client credentials flow. description: "Authentication credentials for callbacks. Callbacks use the same\ \ security scheme, flows, and scopes as the forward path." GeoLocation: pattern: "^([-+]?)([\\d]{1,2})((((\\.)([\\d]{1,4}))?(,)))(([-+]?)([\\d]{1,3})((\\\ .)([\\d]{1,4}))?)$" type: string description: "Latitude,Longitude as decimal fraction up to 4 digit precision" InstanceIdentifier: # pattern: "^[A-Za-z0-9][A-Za-z0-9_]{6,62}[A-Za-z0-9]$" type: string description: Unique identifier generated by the partner OP to identify an instance of the application on a specific zone. InstanceState: type: string description: Running status of the application instance. enum: - PENDING - READY - FAILED - TERMINATING inline_response_200: required: - federationSupportedAPIs type: object properties: federationSupportedAPIs: $ref: '#/components/schemas/FederationSupportedAPIs' example: federationSupportedAPIs: availabilityZoneAPI: null artefactAPI: null fileAPI: null resourceMonitoringAPI: null faultManagementAPI: null federationBaseAPI: name: FEDERATION apiOperations: - httpMethods: - POST - POST href: href - httpMethods: - POST - POST href: href serviceAPIFederation: null eventManagementAPI: null edgeApplicationAPI: null inline_response_200_1: required: - edgeDiscoveryServiceEndPoint - lcmServiceEndPoint type: object properties: edgeDiscoveryServiceEndPoint: $ref: '#/components/schemas/ServiceEndpoint' lcmServiceEndPoint: $ref: '#/components/schemas/ServiceEndpoint' allowedMobileNetworkIds: $ref: '#/components/schemas/MobileNetworkIds' allowedFixedNetworkIds: $ref: '#/components/schemas/FixedNetworkIds' offeredAvailabilityZones: minItems: 1 type: array items: $ref: '#/components/schemas/ZoneDetails' example: allowedFixedNetworkIds: - allowedFixedNetworkIds - allowedFixedNetworkIds offeredAvailabilityZones: - geographyDetails: geographyDetails zoneId: zoneId geolocation: geolocation - geographyDetails: geographyDetails zoneId: zoneId geolocation: geolocation lcmServiceEndPoint: null allowedMobileNetworkIds: mncs: - mncs - mncs mcc: mcc edgeDiscoveryServiceEndPoint: ipv4Addresses: - 198.51.100.1 - 198.51.100.1 port: 0 fqdn: fqdn ipv6Addresses: - 2001:db8:85a3::8a2e:370:7334 - 2001:db8:85a3::8a2e:370:7334 inline_response_200_2: required: - FederationContextId type: object properties: FederationContextId: $ref: '#/components/schemas/FederationContextId' example: FederationContextId: FederationContextId EdgeCloudProvider: type: string description: Human readable name of the Edge Cloud Provider. EdgeCloudRegion: type: string description: | Human readable name of the geographical Edge Cloud Region of the Edge Cloud. Defined by the Edge Cloud Provider. EdgeCloudZones: type: array items: $ref: "#/components/schemas/ZoneObject" minItems: 1 description: | A collection of Edge Cloud Zones where the Application Provider can instantiate an Application Instance. additionalProperties: false ZoneObject: type: object required: - EdgeCloudZone properties: EdgeCloudZone: $ref: "#/components/schemas/EdgeCloudZone" EdgeCloudZoneId: type: string format: uuid description: | Unique identifier created by the Edge Cloud Platform to identify an Edge Cloud Zone within an Edge Cloud. EdgeCloudZone: type: object description: | An Edge Cloud Zone, uniquely identified by a combination of the value of the Edge Cloud Zone Id object and the value of the Edge Cloud Provider object. This value is used to identify an Edge Cloud zone between Edge Clouds from different Edge Cloud Providers. required: - edgeCloudZoneId - edgeCloudZoneName - edgeCloudProvider properties: edgeCloudZoneId: $ref: "#/components/schemas/EdgeCloudZoneId" edgeCloudZoneName: $ref: "#/components/schemas/EdgeCloudZoneName" edgeCloudZoneStatus: $ref: "#/components/schemas/EdgeCloudZoneStatus" edgeCloudProvider: $ref: "#/components/schemas/EdgeCloudProvider" edgeCloudRegion: $ref: "#/components/schemas/EdgeCloudRegion" minItems: 1 EdgeCloudZoneName: type: string description: | Human readable name of the geographical zone of the Edge Cloud. Defined by the Edge Cloud Provider. EdgeCloudZoneStatus: description: Status of the Edge Cloud Zone (default is 'unknown') type: string enum: - active - inactive - unknown default: unknown ErrorInfo: type: object description: Information about the error properties: status: type: integer description: HTTP status code returned along with this error response code: type: string description: Code given to this error message: type: string description: Detailed error description required: - status - code - message FederationAPINames: type: string enum: - FEDERATION - AVAILZONE - ARTEFACT - FILE - SVSAPEFED - RESMONITOR - EVENTMGMT - FAULTMGMT HttpMethods: type: string enum: - POST - PUT - PATCH - DELETE - GET HttpResources: required: - href - httpMethods type: object properties: href: $ref: '#/components/schemas/Uri' httpMethods: type: array description: List of HTTP Methods supported for the given API category items: $ref: '#/components/schemas/HttpMethods' example: httpMethods: - POST - POST href: href FederationAPIResources: required: - apiOperations - name type: object properties: name: $ref: '#/components/schemas/FederationAPINames' apiOperations: type: array description: List of HTTP Methods supported for the given API category items: $ref: '#/components/schemas/HttpResources' example: name: FEDERATION apiOperations: - httpMethods: - POST - POST href: href - httpMethods: - POST - POST href: href State: required: - alarmState type: object properties: alarmState: type: string description: Defines the alarm state during its life cycle (raised | updated | cleared). enum: - RAISED - UPDATED - CLEAR example: alarmState: RAISED serviceType: type: string description: An identifier to refer to partner OP capabilities for application providers. enum: - api_federation FederationSupportedAPIs: required: - artefactAPI - availabilityZoneAPI - edgeApplicationAPI - federationBaseAPI - fileAPI type: object 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' example: availabilityZoneAPI: null artefactAPI: null fileAPI: null resourceMonitoringAPI: null faultManagementAPI: null federationBaseAPI: name: FEDERATION apiOperations: - httpMethods: - POST - POST href: href - httpMethods: - POST - POST href: href serviceAPIFederation: null eventManagementAPI: null edgeApplicationAPI: null FederationIdentifier: pattern: "^[A-Za-z0-9][A-Za-z0-9-]*$" type: string description: Globally unique identifier allocated to an operator platform. This is valid and used only in context of MEC federation interface. FederationRequestData: required: - initialDate - origOPFederationId - partnerStatusLink type: object properties: origOPFederationId: $ref: '#/components/schemas/FederationIdentifier' origOPCountryCode: $ref: '#/components/schemas/CountryCode' origOPMobileNetworkCodes: $ref: '#/components/schemas/MobileNetworkIds' origOPFixedNetworkCodes: $ref: '#/components/schemas/FixedNetworkIds' initialDate: type: string description: Time zone info of the federation initiated by the originating OP format: date-time partnerStatusLink: $ref: '#/components/schemas/Uri' partnerCallbackCredentials: $ref: '#/components/schemas/CallbackCredentials' FederationResponseData: required: - federationContextId - partnerOPFederationId - platformCaps type: object properties: partnerOPFederationId: $ref: '#/components/schemas/FederationIdentifier' partnerOPCountryCode: $ref: '#/components/schemas/CountryCode' federationContextId: $ref: '#/components/schemas/FederationContextId' edgeDiscoveryServiceEndPoint: $ref: '#/components/schemas/ServiceEndpoint' lcmServiceEndPoint: $ref: '#/components/schemas/ServiceEndpoint' partnerOPMobileNetworkCodes: $ref: '#/components/schemas/MobileNetworkIds' partnerOPFixedNetworkCodes: $ref: '#/components/schemas/FixedNetworkIds' offeredAvailabilityZones: minItems: 1 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' FederationContextId: pattern: "^[A-Za-z0-9][A-Za-z0-9-]*$" type: string 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. readOnly: true ProblemDetails: type: object properties: title: type: string detail: type: string cause: type: string invalidParams: minItems: 1 type: array items: $ref: '#/components/schemas/InvalidParam' ServiceEndpoint: required: - port type: object properties: port: $ref: '#/components/schemas/Port' fqdn: $ref: '#/components/schemas/Fqdn' ipv4Addresses: minItems: 1 type: array items: $ref: '#/components/schemas/Ipv4Addr' ipv6Addresses: minItems: 1 type: array items: $ref: '#/components/schemas/Ipv6Addr' example: ipv4Addresses: - 198.51.100.1 - 198.51.100.1 port: 0 fqdn: fqdn ipv6Addresses: - 2001:db8:85a3::8a2e:370:7334 - 2001:db8:85a3::8a2e:370:7334 anyOf: - required: - fqdn - required: - ipv4Addresses - required: - ipv6Addresses InvalidParam: required: - param type: object properties: param: type: string reason: type: string ZoneDetails: required: - geographyDetails - geolocation - zoneId type: object 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." example: geographyDetails: geographyDetails zoneId: zoneId geolocation: geolocation ZoneIdentifier: pattern: "^[A-Za-z0-9][A-Za-z0-9-]*$" type: string description: Human readable name of the zone. ZoneRegistrationRequestData: required: - acceptedAvailabilityZones - availZoneNotifLink type: object properties: acceptedAvailabilityZones: minItems: 1 type: array items: $ref: '#/components/schemas/ZoneIdentifier' availZoneNotifLink: $ref: '#/components/schemas/Uri' ZoneResourceInfo: type: object properties: zoneId: $ref: '#/components/schemas/ZoneIdentifier' computeResourceQuotaLimits: type: array items: $ref: '#/components/schemas/ComputeResource' reservedComputeResources: type: array items: $ref: '#/components/schemas/ComputeResource' flavoursSupported: type: array items: $ref: '#/components/schemas/ZoneFlavour' ZoneReservationRemoval: type: object properties: status: type: string example: status: deleted ComputeResource: type: object properties: cpuArchType: $ref: '#/components/schemas/CPUArchType' numCPU: type: integer format: int32 memory: type: integer format: int32 hugepages: type: array items: type: string ZoneFlavour: type: object properties: flavourId: type: string cpuArchType: $ref: '#/components/schemas/CPUArchType' numCPU: type: integer format: int32 memorySize: type: integer format: int32 storageSize: type: integer format: int32 supportedOSTypes: type: array items: $ref: '#/components/schemas/OSType' OSType: type: object properties: distribution: type: string version: type: string architecture: type: string license: type: string FixedNetworkIds: minItems: 1 type: array description: List of network identifier associated with the fixed line network of the operator platform. items: type: string Fqdn: type: string description: | Full qualified domain name of an application instance GpuInfo: type: object description: Information about the supported GPUs required: - gpuMemory - numGPU properties: gpuMemory: type: integer description: GPU memory in mega bytes numGPU: type: integer description: Number of GPUs K8sAddons: description: | Addons for the Kubernetes cluster. Additional addons should be defined in application the helm chart (Service Mesh, Serverless, AI). type: object properties: monitoring: type: boolean example: true default: false description: Enable monitoring for Kubernetes cluster. ingress: type: boolean example: true default: false description: Enable ingress for Kubernetes cluster. K8sNetworking: description: | Kubernetes networking definition type: object properties: primaryNetwork: description: Definition of Kubernetes primary Network type: object properties: provider: description: CNI provider name type: string example: cilium version: description: CNI provider version type: string example: "1.13" additionalNetworks: description: Additional Networks for the Kubernetes cluster. type: array items: type: object description: Additional network interface definition properties: name: description: Additional Network Name type: string example: net1 interfaceType: description: | Type of additional Interface: netdevice: (SR-IOV) A regular kernel network device in the Network Namespace (netns) of the container vfio-pci: (SR-IOV) A PCI network interface directly mounted in the container interface: Additional interface to be used by cni plugins such as macvlan, ipvlan Note: The use of SR-IOV interfaces automatically configure the required kernel parameters for the nodes. type: string example: vfio-pci enum: - netdevice - vfio-pci - interface Mcc: pattern: "^\\d{3}$" type: string Mnc: pattern: "^\\d{2,3}$" MobileNetworkIds: type: object properties: mcc: $ref: '#/components/schemas/Mcc' mncs: minItems: 1 type: array items: $ref: '#/components/schemas/Mnc' example: mncs: - mncs - mncs mcc: mcc AdditionalStorage: description: Additional storage for the application. type: array items: type: object required: - storageSize - mountPoint properties: name: type: string description: Name of additional storage resource. example: logs storageSize: type: string description: Additional persistent volume for the application. example: 80GB pattern: ^\d+(GB|MB)$ mountPoint: type: string description: Location of additional storage resource. example: /logs Vcpu: type: string pattern: ^\d+((\.\d{1,3})|(m))?$ description: | Number of vcpus in whole (i.e 1), decimal (i.e 0.500) up to millivcpu, or millivcpu (i.e 500m) format. example: "500m" KubernetesClusterRef: description: | A global unique identifier associated with a Kubernetes cluster infrastructure. type: string format: uuid example: "642f6105-7015-4af1-a4d1-e1ecb8437abc" KubernetesResources: description: Definition of Kubernetes Cluster Infrastructure. required: - infraKind - applicationResources - isStandalone properties: infraKind: description: Type of infrastructure for the application. type: string example: kubernetes enum: - kubernetes applicationResources: description: | Application resources define the resources pool required by the application to be executed in a Kubernetes clusters. type: object properties: cpuPool: required: - numCPU - memory - topology type: object description: | CPU Pool refers to the amount of application' resources that is executed in nodes with CPU only. That means the part of application that doesn't require GPU or other kind of acceleration. CPU pool is not mandatory when the application is executed exclusively in a GPU pool. A CPU pool is composed by CPU and memory. properties: numCPU: description: | Total number of vcpus in whole (i.e 1) of CPU pool. type: integer example: 1 memory: description: Total memory in mega bytes of CPU pool. type: integer example: 1024 topology: type: object description: | CPU pool topology defines an application's CPU-based architecture. When deploying for high availability or redundancy, it allows for clustering with a configurable number of nodes and minimum CPU/memory resource per Kubernetes node requirements. required: - minNumberOfNodes - minNodeCpu - minNodeMemory properties: minNumberOfNodes: description: | Minimum number of worker nodes required by the application. type: integer example: 5 minNodeCpu: description: | Minimum number of vcpus in whole (i.e 1) per cluster node in CPU pool. type: integer example: 2 minNodeMemory: description: | Minimum memory in mega bytes per cluster node in CPU pool. type: integer example: 1024 gpuPool: required: - numCPU - memory - gpuMemory - topology type: object description: | GPU Pool refers to the amount of resources of the application that is executed in nodes with GPU. GPU Pool is not mandatory when the application is executed exclusively in a CPU pool. A GPU pool is composed by memory, CPU and GPU memory properties: numCPU: description: | Total Number of vcpus in whole (i.e 1) of GPU pool. type: integer example: 1 memory: description: Total memory in mega bytes of GPU pool. type: integer example: 1024 gpuMemory: description: Total GPU memory in giga bytes of GPU pool. type: integer example: 16 topology: type: object description: | GPU pool topology defines an application's GPU-based architecture. When deploying for high availability or redundancy, it allows for clustering with a configurable number of nodes and minimum CPU/memory/GPU memory resource per Kubernetes node requirements. required: - minNumberOfNodes - minNodeCpu - minNodeMemory - minNodeGpuMemory properties: minNumberOfNodes: description: | Minimum number of worker nodes with GPU required by the application. type: integer example: 2 minNodeCpu: description: | Minimum number of vcpus in whole (i.e 1) per cluster node in GPU pool. type: integer example: 2 minNodeMemory: description: | Minimum memory in mega bytes per cluster node in GPU pool. type: integer example: 1024 minNodeGpuMemory: description: Minimum memory in giga bytes per cluster node in GPU pool. type: integer example: 8 isStandalone: description: | Define if the Kubernetes clusters can be reused by other applications. type: boolean example: false version: type: string description: Minimum Kubernetes Version. example: "1.29" additionalStorage: type: string description: | Amount of persistent storage allocated to the Kubernetes PVC. example: 80GB pattern: ^\d+(GB|MB)$ networking: $ref: "#/components/schemas/K8sNetworking" addons: $ref: "#/components/schemas/K8sAddons" VmResources: description: Definition of Virtual Machine Infrastructure type: object required: - infraKind - numCPU - memory properties: infraKind: description: Type of infrastructure for the application. type: string example: virtualMachine enum: - virtualMachine numCPU: type: integer description: | Number of vcpus in whole (i.e 1) example: 1 memory: type: integer example: 1024 description: Memory in mega bytes additionalStorages: $ref: "#/components/schemas/AdditionalStorage" gpu: $ref: "#/components/schemas/GpuInfo" DockerComposeResources: description: Definition of Docker Compose Infrastructure type: object required: - infraKind - numCPU - memory properties: infraKind: description: Type of infrastructure for the application. type: string example: dockerCompose enum: - dockerCompose numCPU: type: integer description: | Number of vcpus in whole (i.e 1) example: 1 memory: type: integer example: 1024 description: Memory in mega bytes storage: $ref: "#/components/schemas/AdditionalStorage" gpu: $ref: "#/components/schemas/GpuInfo" ContainerResources: description: Container Infrastructure Definition type: object required: - infraKind - numCPU - memory properties: infraKind: description: Type of infrastructure for the application. type: string example: container enum: - container numCPU: $ref: "#/components/schemas/Vcpu" memory: type: integer example: 1024 description: Memory in mega bytes storage: $ref: "#/components/schemas/AdditionalStorage" gpu: $ref: "#/components/schemas/GpuInfo" Ipv4Addr: type: string format: ipv4 example: "192.168.0.1" description: | IP of the device. A single IPv4 address may be specified in dotted-quad form 1.2.3.4. Only this exact IP number will match the flow control rule. Ipv6Addr: type: string format: ipv6 example: "2001:db8:85a3:8d3:1319:8a2e:370:7344" description: | IP of the device. A single IPv6 address, following IETF 5952 format, may be specified like 2001:db8:85a3:8d3:1319:8a2e:370:7344 OperatingSystem: description: | Information about the Operating System of the application image type: object required: - architecture - family - version - license properties: architecture: description: Type of the OS Architecture type: string enum: - x86_64 - x86 example: x86_64 family: description: Family to which OS belongs type: string enum: - RHEL - UBUNTU - COREOS - WINDOWS - OTHER version: description: Version of the OS type: string enum: - OS_VERSION_UBUNTU_2204_LTS - OS_VERSION_RHEL_8 - OS_MS_WINDOWS_2022 - OTHER license: description: License needed to activate the OS type: string enum: - OS_LICENSE_TYPE_FREE - OS_LICENSE_TYPE_ON_DEMAND - OTHER Port: type: integer description: Port to stablish the connection minimum: 0 RequiredResources: description: | Fundamental hardware requirements to be provisioned by the Application Provider. oneOf: - $ref: "#/components/schemas/KubernetesResources" - $ref: "#/components/schemas/VmResources" - $ref: "#/components/schemas/ContainerResources" - $ref: "#/components/schemas/DockerComposeResources" discriminator: propertyName: infraKind mapping: kubernetes: "#/components/schemas/KubernetesResources" virtualMachine: "#/components/schemas/VmResources" container: "#/components/schemas/ContainerResources" dockerCompose: "#/components/schemas/DockerComposeResources" SubmittedApp: description: Information about the submitted app type: object properties: appId: $ref: "#/components/schemas/AppId" serviceAPINames: minItems: 1 type: array description: "List of Service API capability names an OP supports and offers\ \ to other OPs \"quality_on_demand\", \"device_location\" etc." items: type: string enum: - QualityOnDemand - DeviceLocation - DeviceStatus - SimSwap - NumberVerification - DeviceIdentifier Status: type: string enum: - FAILED - TEMPORARY_FAILURE - AVAILABLE - LOCKED - NOT_AVAILABLE Uri: type: string example: https://charts.bitnami.com/bitnami/helm/example-chart:0.1.0 description: | A Uniform Resource Identifier (URI) as per RFC 3986, identifies the endpoint within an Edge Cloud Zone where the user equipment may connect to the selected application instance responses: "400": description: Bad request headers: x-correlator: $ref: "#/components/headers/x-correlator" content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" example: status: 400 code: INVALID_ARGUMENT message: "Schema validation failed at ..." "401": description: Unauthorized headers: x-correlator: $ref: "#/components/headers/x-correlator" content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" example: status: 401 code: UNAUTHENTICATED message: "Authorization failed: ..." "403": description: Unauthorized headers: x-correlator: $ref: "#/components/headers/x-correlator" content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" example: status: 403 code: PERMISSION_DENIED message: "Operation not allowed: ..." "404": description: Not Found headers: x-correlator: $ref: "#/components/headers/x-correlator" content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" example: status: 404 code: NOT_FOUND message: "Resource does not exist" "500": description: Internal Server Error headers: x-correlator: $ref: "#/components/headers/x-correlator" content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" example: status: 500 code: INTERNAL message: "Internal server error: ..." "501": description: Not Implemented headers: x-correlator: $ref: "#/components/headers/x-correlator" content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" example: status: 501 code: NOT_IMPLEMENTED message: "Service not implemented" "503": description: Service Unavailable headers: x-correlator: $ref: "#/components/headers/x-correlator" content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" example: status: 503 code: UNAVAILABLE message: "Service unavailable"