From d6d6d7498cdac1711de1013196bb213d0a549a50 Mon Sep 17 00:00:00 2001 From: Mahesh <98130650+maheshc01@users.noreply.github.com> Date: Tue, 24 Jun 2025 19:59:28 +0000 Subject: [PATCH 01/11] added compute resource requirements relared meta data in application profiles yaml --- .../API_definitions/application-profiles.yaml | 74 ++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/code/API_definitions/application-profiles.yaml b/code/API_definitions/application-profiles.yaml index c1728a1..2b16726 100644 --- a/code/API_definitions/application-profiles.yaml +++ b/code/API_definitions/application-profiles.yaml @@ -293,6 +293,26 @@ components: - Gbps - Tbps + Compute: + type: object + properties: + value: + type: integer + example: 10 + format: int32 + minimum: 0 + maximum: 1024 + unit: + $ref: "#/components/schemas/ComputeUnitEnum" + + ComputeUnitEnum: + type: string + enum: + - kb + - Mb + - Gb + - Tb + PacketDelayBudget: description: | The packet delay budget is the maximum allowable one-way latency @@ -352,6 +372,35 @@ components: allOf: - $ref: "#/components/schemas/Rate" + targetMinCPU: + type: integer + description: Number of virtual CPUs + example: 1 + + targetMinGPU: + description: | + This is the target minimun GPUs required by the application + format: integer + example: 1 + + targetMinMemory: + description: | + This is the target minimum memory required by the application + allOf: + - $ref: "#/components/schemas/Compute" + + targetMinEphemeralStorage: + description: | + This is the target minimum ephemeral storage required by the application + allOf: + - $ref: "#/components/schemas/Compute" + + targetMinPersistentStorage: + description: | + This is the target minimum persistent storage required by the application + allOf: + - $ref: "#/components/schemas/Compute" + ApplicationProfile: type: object required: @@ -363,6 +412,8 @@ components: format: uuid networkQualityThresholds: $ref: "#/components/schemas/NetworkQualityThresholds" + computeResources: + $ref: "#/components/schemas/ComputeResourcesThresholds" ApplicationProfileRequest: type: object @@ -371,6 +422,8 @@ components: properties: networkQualityThresholds: $ref: "#/components/schemas/NetworkQualityThresholds" + computeResources: + $ref: "#/components/schemas/ComputeResourcesThresholds" NetworkQualityThresholds: type: object @@ -386,6 +439,25 @@ components: jitter: $ref: "#/components/schemas/Jitter" + ComputeResourcesThresholds: + type: object + properties: + targetMinCPU: + $ref: "#/components/schemas/targetMinCPU" + targetMinMemory: + $ref: "#/components/schemas/targetMinMemory" + targetMinGPU: + $ref: "#/components/schemas/targetMinGPU" + targetMinGPUMemory: + $ref: "#/components/schemas/targetMinMemory" + targetMinEphemeralStorage: + $ref: "#/components/schemas/targetMinEphemeralStorage" + targetMinPersistentStorage: + $ref: "#/components/schemas/targetMinPersistentStorage" + # in furture this section could be updated to added more relavant sections + description: Compute resources of a Application Profile + additionalProperties: false + ErrorInfo: type: object description: Error information @@ -562,4 +634,4 @@ components: value: status: 429 code: TOO_MANY_REQUESTS - message: Rate limit reached. + message: Rate limit reached. \ No newline at end of file From d829234665598ae7c5e9fd808b17a0f385bfd52c Mon Sep 17 00:00:00 2001 From: maheshc01 Date: Thu, 26 Jun 2025 22:31:06 +0530 Subject: [PATCH 02/11] update to capture compute resource requirements based on requirements in edge cloud --- code/API_definitions/application-profiles.yaml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/code/API_definitions/application-profiles.yaml b/code/API_definitions/application-profiles.yaml index 2b16726..5e64edb 100644 --- a/code/API_definitions/application-profiles.yaml +++ b/code/API_definitions/application-profiles.yaml @@ -403,9 +403,6 @@ components: ApplicationProfile: type: object - required: - - applicationProfileId - - networkQualityThresholds properties: applicationProfileId: type: string @@ -414,6 +411,11 @@ components: $ref: "#/components/schemas/NetworkQualityThresholds" computeResources: $ref: "#/components/schemas/ComputeResourcesThresholds" + oneOf: + - required: [networkQualityThresholds] + - required: [computeResources] + required: + - applicationProfileId ApplicationProfileRequest: type: object @@ -438,6 +440,7 @@ components: $ref: "#/components/schemas/PacketErrorLossRate" jitter: $ref: "#/components/schemas/Jitter" + minProperties: 1 ComputeResourcesThresholds: type: object @@ -454,9 +457,9 @@ components: $ref: "#/components/schemas/targetMinEphemeralStorage" targetMinPersistentStorage: $ref: "#/components/schemas/targetMinPersistentStorage" - # in furture this section could be updated to added more relavant sections + # in furture this section could be updated to added more relavant sections description: Compute resources of a Application Profile - additionalProperties: false + minProperties: 1 ErrorInfo: type: object From fef54a5105a77577fd7f874c63a1d6d041f7a6f7 Mon Sep 17 00:00:00 2001 From: maheshc01 Date: Thu, 26 Jun 2025 23:03:42 +0530 Subject: [PATCH 03/11] limited columns to 80 and addtional changes for description --- .../API_definitions/application-profiles.yaml | 85 ++++++++++++------- 1 file changed, 56 insertions(+), 29 deletions(-) diff --git a/code/API_definitions/application-profiles.yaml b/code/API_definitions/application-profiles.yaml index 5e64edb..0992189 100644 --- a/code/API_definitions/application-profiles.yaml +++ b/code/API_definitions/application-profiles.yaml @@ -7,14 +7,15 @@ info: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html description: | - Application profiles allows application developers to share all the - information about their application which would be relevant for network/ - CAMARA APIs related decision making. + Application profiles allow developers to specify all relevant information about + their application for both network and compute resource requirements, supporting + CAMARA APIs and network decision making. - To start with the API will provide operations to define, read and manage - an application's thresholds for network quality (latency, jitter, loss, - throughput). This scope will be expanded further based on addtional - requirements from other applicable CAMARA APIs + This API enables defining, reading, and managing application requirements, including: + - Network quality thresholds (latency, jitter, loss, throughput) + - Compute resource thresholds (CPU, GPU, memory, storage) + + The scope will expand as new requirements from CAMARA APIs emerge. ## Errors @@ -25,23 +26,35 @@ info: with an explanation. ### Additional CAMARA error responses - The list of error codes in this API specification is not exhaustive. Therefore - the API specification may not document some non-mandatory error statuses as - indicated in `CAMARA API Design Guidelines`. + The list of error codes in this API specification is not exhaustive. + Therefore the API specification may not document some non-mandatory error + statuses as indicated in `CAMARA API Design Guidelines`. - Please refer to the `CAMARA_common.yaml` of the Commonalities Release associated - to this API version for a complete list of error responses. + Please refer to the `CAMARA_common.yaml` of the Commonalities Release + associated to this API version for a complete list of error responses. - As a specific rule, error `501 - NOT_IMPLEMENTED` can be only a possible error - response if it is explicitly documented in the API. + As a specific rule, error `501 - NOT_IMPLEMENTED` can be only a possible + error response if it is explicitly documented in the API. # Authorization and authentication - The "Camara Security and Interoperability Profile" provides details of how an API consumer requests an access token. Please refer to Identity and Consent Management (https://github.com/camaraproject/IdentityAndConsentManagement/) for the released version of the profile. + The "Camara Security and Interoperability Profile" provides details of how + an API consumer requests an access token. Please refer to Identity and + Consent Management + (https://github.com/camaraproject/IdentityAndConsentManagement/) for the + released version of the profile. - The specific authorization flows to be used will be agreed upon during the onboarding process, happening between the API consumer and the API provider, taking into account the declared purpose for accessing the API, whilst also being subject to the prevailing legal framework dictated by local legislation. + The specific authorization flows to be used will be agreed upon during the + onboarding process, happening between the API consumer and the API provider, + taking into account the declared purpose for accessing the API, whilst also + being subject to the prevailing legal framework dictated by local + legislation. - In cases where personal 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 three-legged access tokens is mandatory. This ensures that the API remains in compliance with privacy regulations, upholding the principles of transparency and user-centric privacy-by-design. + In cases where personal 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 + three-legged access tokens is mandatory. This ensures that the API remains + in compliance with privacy regulations, upholding the principles of + transparency and user-centric privacy-by-design. contact: email: sp-edc@lists.camaraproject.org @@ -373,9 +386,12 @@ components: - $ref: "#/components/schemas/Rate" targetMinCPU: - type: integer - description: Number of virtual CPUs - example: 1 + type: number + description: > + Number of vCPUs required for the application. Fractional values are allowed + (e.g., 0.5 = half a vCPU). The value represents the minimum amount of CPU + resources to be allocated to the application instance. + example: 0.5 targetMinGPU: description: | @@ -397,7 +413,8 @@ components: targetMinPersistentStorage: description: | - This is the target minimum persistent storage required by the application + This is the target minimum persistent storage required by the + application allOf: - $ref: "#/components/schemas/Compute" @@ -457,7 +474,8 @@ components: $ref: "#/components/schemas/targetMinEphemeralStorage" targetMinPersistentStorage: $ref: "#/components/schemas/targetMinPersistentStorage" - # in furture this section could be updated to added more relavant sections + # in future this section could be updated to add more relevant + # sections description: Compute resources of a Application Profile minProperties: 1 @@ -505,9 +523,12 @@ components: value: status: 400 code: INVALID_ARGUMENT - message: Client specified an invalid argument, request body or query param. + message: Client specified an invalid argument, request body + or query param. GENERIC_400_OUT_OF_RANGE: - description: Out of Range. Specific Syntax Exception used when a given field has a pre-defined range or a invalid filter criteria combination is requested + description: Out of Range. Specific Syntax Exception used when + a given field has a pre-defined range or a invalid filter + criteria combination is requested value: status: 400 code: OUT_OF_RANGE @@ -563,13 +584,17 @@ components: - INVALID_TOKEN_CONTEXT examples: GENERIC_403_PERMISSION_DENIED: - description: Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security + description: Permission denied. OAuth2 token access does not + have the required scope or when the user fails operational + security value: status: 403 code: PERMISSION_DENIED - message: Client does not have sufficient permissions to perform this action. + message: Client does not have sufficient permissions to + perform this action. GENERIC_403_INVALID_TOKEN_CONTEXT: - description: Reflect some inconsistency between information in some field of the API and the related OAuth2 Token + description: Reflect some inconsistency between information in + some field of the API and the related OAuth2 Token value: status: 403 code: INVALID_TOKEN_CONTEXT @@ -627,13 +652,15 @@ components: - TOO_MANY_REQUESTS examples: GENERIC_429_QUOTA_EXCEEDED: - description: Request is rejected due to exceeding a business quota limit + description: Request is rejected due to exceeding a business + quota limit value: status: 429 code: QUOTA_EXCEEDED message: Out of resource quota. GENERIC_429_TOO_MANY_REQUESTS: - description: Access to the API has been temporarily blocked due to rate or spike arrest limits being reached + description: Access to the API has been temporarily blocked due + to rate or spike arrest limits being reached value: status: 429 code: TOO_MANY_REQUESTS From bf2ba30fdfca689b395b6d94d8af9a75c44915ff Mon Sep 17 00:00:00 2001 From: maheshc01 Date: Thu, 26 Jun 2025 23:17:13 +0530 Subject: [PATCH 04/11] fixing linting errors --- code/API_definitions/application-profiles.yaml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/code/API_definitions/application-profiles.yaml b/code/API_definitions/application-profiles.yaml index 0992189..d037834 100644 --- a/code/API_definitions/application-profiles.yaml +++ b/code/API_definitions/application-profiles.yaml @@ -429,8 +429,8 @@ components: computeResources: $ref: "#/components/schemas/ComputeResourcesThresholds" oneOf: - - required: [networkQualityThresholds] - - required: [computeResources] + - required: [networkQualityThresholds] + - required: [computeResources] required: - applicationProfileId @@ -474,8 +474,7 @@ components: $ref: "#/components/schemas/targetMinEphemeralStorage" targetMinPersistentStorage: $ref: "#/components/schemas/targetMinPersistentStorage" - # in future this section could be updated to add more relevant - # sections + # in future this section could be updated to add more relevant sections description: Compute resources of a Application Profile minProperties: 1 @@ -664,4 +663,4 @@ components: value: status: 429 code: TOO_MANY_REQUESTS - message: Rate limit reached. \ No newline at end of file + message: Rate limit reached. From 71d7a73664303cfd56f27d153e1193b6ee09eaa1 Mon Sep 17 00:00:00 2001 From: maheshc01 Date: Thu, 26 Jun 2025 23:23:59 +0530 Subject: [PATCH 05/11] linting errors --- code/API_definitions/application-profiles.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/API_definitions/application-profiles.yaml b/code/API_definitions/application-profiles.yaml index d037834..ad9c7a7 100644 --- a/code/API_definitions/application-profiles.yaml +++ b/code/API_definitions/application-profiles.yaml @@ -474,7 +474,7 @@ components: $ref: "#/components/schemas/targetMinEphemeralStorage" targetMinPersistentStorage: $ref: "#/components/schemas/targetMinPersistentStorage" - # in future this section could be updated to add more relevant sections + # future expansion possible description: Compute resources of a Application Profile minProperties: 1 From dcabf5a261ab4b3592fb0ec7c2b48fc7bc5cdb44 Mon Sep 17 00:00:00 2001 From: maheshc01 Date: Thu, 26 Jun 2025 23:26:04 +0530 Subject: [PATCH 06/11] fixing linting error --- code/API_definitions/application-profiles.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/code/API_definitions/application-profiles.yaml b/code/API_definitions/application-profiles.yaml index ad9c7a7..f0bae9c 100644 --- a/code/API_definitions/application-profiles.yaml +++ b/code/API_definitions/application-profiles.yaml @@ -474,7 +474,6 @@ components: $ref: "#/components/schemas/targetMinEphemeralStorage" targetMinPersistentStorage: $ref: "#/components/schemas/targetMinPersistentStorage" - # future expansion possible description: Compute resources of a Application Profile minProperties: 1 From 82c0b3dd988d946067edd993591dbf236499dc2d Mon Sep 17 00:00:00 2001 From: maheshc01 Date: Thu, 26 Jun 2025 23:46:51 +0530 Subject: [PATCH 07/11] fixing linting errors --- code/API_definitions/application-profiles.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/API_definitions/application-profiles.yaml b/code/API_definitions/application-profiles.yaml index f0bae9c..de4d57c 100644 --- a/code/API_definitions/application-profiles.yaml +++ b/code/API_definitions/application-profiles.yaml @@ -420,6 +420,8 @@ components: ApplicationProfile: type: object + required: + - applicationProfileId properties: applicationProfileId: type: string @@ -428,11 +430,9 @@ components: $ref: "#/components/schemas/NetworkQualityThresholds" computeResources: $ref: "#/components/schemas/ComputeResourcesThresholds" - oneOf: - - required: [networkQualityThresholds] - - required: [computeResources] - required: - - applicationProfileId + anyOf: + - required: [networkQualityThresholds] + - required: [computeResources] ApplicationProfileRequest: type: object From 1d1b64bcdda2c48171f0b5337f209b128f25ea7b Mon Sep 17 00:00:00 2001 From: maheshc01 Date: Thu, 3 Jul 2025 05:15:33 +0530 Subject: [PATCH 08/11] address the review feedback --- code/API_definitions/application-profiles.yaml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/code/API_definitions/application-profiles.yaml b/code/API_definitions/application-profiles.yaml index de4d57c..de0649b 100644 --- a/code/API_definitions/application-profiles.yaml +++ b/code/API_definitions/application-profiles.yaml @@ -300,8 +300,8 @@ components: RateUnitEnum: type: string enum: - - bps - - kbps + - Bps + - Kbps - Mbps - Gbps - Tbps @@ -321,7 +321,7 @@ components: ComputeUnitEnum: type: string enum: - - kb + - Kb - Mb - Gb - Tb @@ -340,7 +340,7 @@ components: PacketErrorLossRate: type: integer - description: | + description: The exponential power of the allowable error loss rate 10^(-N). For instance 3 would be an error loss rate of 10 to the power of -3 (0.001) @@ -362,7 +362,7 @@ components: example: 3 Jitter: - description: | + description: The jitter requirement aims to limit the maximum variation in round-trip packet delay for the 99th percentile of traffic, following ITU Y.1540 standards. It considers only acknowledged packets in a @@ -387,10 +387,8 @@ components: targetMinCPU: type: number - description: > - Number of vCPUs required for the application. Fractional values are allowed - (e.g., 0.5 = half a vCPU). The value represents the minimum amount of CPU - resources to be allocated to the application instance. + description: + Number of vCPUs required for the application. Fractional values are allowed (e.g., 0.5 = half a vCPU). The value represents the minimum amount of CPU resources to be allocated to the application instance. example: 0.5 targetMinGPU: From d4639b954e1986b8d7f9ec807cba3ddeb401d94b Mon Sep 17 00:00:00 2001 From: maheshc01 Date: Wed, 9 Jul 2025 01:49:00 +0530 Subject: [PATCH 09/11] incorporated review comments --- .../API_definitions/application-profiles.yaml | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/code/API_definitions/application-profiles.yaml b/code/API_definitions/application-profiles.yaml index de0649b..e9ea0a2 100644 --- a/code/API_definitions/application-profiles.yaml +++ b/code/API_definitions/application-profiles.yaml @@ -7,14 +7,14 @@ info: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html description: | - Application profiles allow developers to specify all relevant information about - their application for both network and compute resource requirements, supporting - CAMARA APIs and network decision making. + Application profiles allow developers to specify all relevant information about their application for both network and compute resource + requirements,supporting CAMARA APIs and network decision making. - This API enables defining, reading, and managing application requirements, including: + This API enables defining, reading, and managing application requirements,including: - Network quality thresholds (latency, jitter, loss, throughput) - Compute resource thresholds (CPU, GPU, memory, storage) + The information captured as part of application profiles can be used in different usecases for decision making. Please refer connectivity insights and session insights for more details as a reference to see how the information in application profiles is used for decision making. The scope will expand as new requirements from CAMARA APIs emerge. ## Errors @@ -397,6 +397,18 @@ components: format: integer example: 1 + gpuVendorType: + type: string + enum: + - GPU_PROVIDER_NVIDIA + - GPU_PROVIDER_AMD + description: GPU vendor name e.g. NVIDIA, AMD etc. + example: Nvidia + + gpuModelName: + type: string + description: Model name corresponding to vendorType may include info e.g. for NVIDIA, model name could be “Tesla M60”, “Tesla V100” etc. + targetMinMemory: description: | This is the target minimum memory required by the application @@ -464,6 +476,10 @@ components: $ref: "#/components/schemas/targetMinCPU" targetMinMemory: $ref: "#/components/schemas/targetMinMemory" + gpuVendorType: + $ref: "#/components/schemas/gpuVendorType" + gpuModelName: + $ref: "#/components/schemas/gpuModelName" targetMinGPU: $ref: "#/components/schemas/targetMinGPU" targetMinGPUMemory: From bd44e2e125769ac5ac3b16e46d2503f6002d3681 Mon Sep 17 00:00:00 2001 From: maheshc01 Date: Wed, 9 Jul 2025 01:54:29 +0530 Subject: [PATCH 10/11] addressing linting errors --- code/API_definitions/application-profiles.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/code/API_definitions/application-profiles.yaml b/code/API_definitions/application-profiles.yaml index e9ea0a2..16be8ef 100644 --- a/code/API_definitions/application-profiles.yaml +++ b/code/API_definitions/application-profiles.yaml @@ -398,16 +398,16 @@ components: example: 1 gpuVendorType: - type: string - enum: - - GPU_PROVIDER_NVIDIA - - GPU_PROVIDER_AMD - description: GPU vendor name e.g. NVIDIA, AMD etc. - example: Nvidia + type: string + enum: + - Nvidia + - AMD + description: GPU vendor name e.g. NVIDIA, AMD etc. + example: Nvidia gpuModelName: - type: string - description: Model name corresponding to vendorType may include info e.g. for NVIDIA, model name could be “Tesla M60”, “Tesla V100” etc. + type: string + description: Model name corresponding to vendorType may include info e.g. for NVIDIA, model name could be “Tesla M60”, “Tesla V100” etc. targetMinMemory: description: | From 45a93cf3b467fc41dbf6687f5f026d6f49211bdb Mon Sep 17 00:00:00 2001 From: urvika-v Date: Thu, 10 Jul 2025 14:06:56 +0530 Subject: [PATCH 11/11] Update application-profiles.yaml --- code/API_definitions/application-profiles.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/API_definitions/application-profiles.yaml b/code/API_definitions/application-profiles.yaml index 16be8ef..1a7d97a 100644 --- a/code/API_definitions/application-profiles.yaml +++ b/code/API_definitions/application-profiles.yaml @@ -446,8 +446,9 @@ components: ApplicationProfileRequest: type: object - required: - - networkQualityThresholds + anyOf: + - required: [networkQualityThresholds] + - required: [computeResources] properties: networkQualityThresholds: $ref: "#/components/schemas/NetworkQualityThresholds"