From 473476fa1e88d4ae0c6f19149c3d6397a477030c Mon Sep 17 00:00:00 2001 From: lengyelb Date: Thu, 29 Jan 2026 21:01:43 +0100 Subject: [PATCH 1/3] Edit TS28572_PlanManagement.yaml --- OpenAPI/TS28572_PlanManagement.yaml | 2108 +++++++++++++-------------- 1 file changed, 1021 insertions(+), 1087 deletions(-) diff --git a/OpenAPI/TS28572_PlanManagement.yaml b/OpenAPI/TS28572_PlanManagement.yaml index 312cf8bd..3ace7b50 100644 --- a/OpenAPI/TS28572_PlanManagement.yaml +++ b/OpenAPI/TS28572_PlanManagement.yaml @@ -29,7 +29,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PlanConfigurationDescriptor' + $ref: '#/components/schemas/PlanConfigurationDescriptorRequest' example: name: "Rollout-5G-Dublin-East" version: "1.0.0" @@ -37,18 +37,18 @@ paths: customProperties: technology-type: "NR" location: "Dublin" - configChangesContentType: "YANG" + configChangesContentType: YANG_BASED configChanges: - modifyOperator: create - changeId: add-nr-cell-001 - comment: Add new NR cell for initial deployment in Dublin-4 area. - target: /SubNetwork=Irl/MeContext=Dublin-1/ManagedElement=1/GNBDUFunction=1 - value: - NRCellDU: - - id: '4' - attributes: - userLabel: Dublin-1-Cell-4 - administrativeState: UNLOCKED + - modifyOperator: "create" + changeId: "add-nr-cell-001" + description: "Add new NR cell for initial deployment in Dublin-4 area." + target: "/SubNetwork=Irl/MeContext=Dublin-1/ManagedElement=1/GNBDUFunction=1" + value: + NRCellDU: + - id: '4' + attributes: + userLabel: "Dublin-1-Cell-4" + administrativeState: "UNLOCKED" multipart/form-data: schema: type: object @@ -56,13 +56,11 @@ paths: name: type: string description: name of the plan (metadata). - example: - name: "Rollout-5G-Dublin-East" + example: "Rollout-5G-Dublin-East" version: type: string description: version of the plan (metadata). - example: - version: "1.0.0" + example: "1.0.0" file: type: string format: binary @@ -80,7 +78,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PlanConfigurationDescriptorResponse' + $ref: '#/components/schemas/PlanConfigurationDescriptor' '400': description: Invalid request parameters or malformed input. content: @@ -112,10 +110,9 @@ paths: content: application/json: schema: - type: object # <-- Response body is an object - properties: - items: # <-- The array is nested inside the 'items' property - $ref: '#/components/schemas/DescriptorListEntry' + type: array + items: + $ref: '#/components/schemas/DescriptorListEntry' '500': description: Internal server error. content: @@ -169,7 +166,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PlanConfigurationDescriptor' + $ref: '#/components/schemas/PlanConfigurationDescriptorRequest' example: { "name": "Rollout-5G-Dublin-East", @@ -178,9 +175,16 @@ paths: "technology-type": "NR", "location": "Dublin" }, - "configChanges": { - ... - } + "configChanges": [ + { + "modifyOperator": "merge", + "changeId": "Dublin-Center_DC-01_555777999", + "target": "/SubNetwork=Dublin-Center/ManagedElement=DC-001/NRCellDU=1", + "value": { + "administrativeState": "LOCKED" + } + } + ] } responses: '204': @@ -285,10 +289,9 @@ paths: content: application/json: schema: - type: object # <-- Response body is an object - properties: - items: # <-- The array is nested inside the 'items' property - $ref: '#/components/schemas/DescriptorListEntry' + type: array + items: + $ref: '#/components/schemas/DescriptorListEntry' '500': description: Internal server error. content: @@ -343,16 +346,6 @@ paths: application/json: schema: $ref: '#/components/schemas/PlanConfigurationGroupDescriptor' - example: - { - "name": "Rollout-5G-Dublin-East", - "version" : "1.0.0", - "description": "This is the plan for the new 5G rollout in Dublin east.", - "activationMode" : "BEST_EFFORT", - "isOrdered" : true, - "isFailOnMemberConflicts" : true, - "members": [{"type" : "PLAN", "identifier" : "plan-descriptor-001"}, {"type" : "PLAN_GROUP", "identifier" : "plan-group-descriptor-001"}] - } responses: '200': description: Plan group descriptor replaced successfully @@ -420,10 +413,9 @@ paths: content: application/json: schema: - type: object # <-- Response body is an object - properties: - items: # <-- The array is nested inside the 'items' property - $ref: '#/components/schemas/DescriptorListEntry' + type: array + items: + $ref: '#/components/schemas/DescriptorListEntry' '500': description: Internal server error. content: @@ -438,7 +430,7 @@ paths: schema: type: string description: Unique identifier of the fallback descriptor. - example: "Fallback-Dublin-South-plan-001" + example: "Fallback-Dublin-plan-001" required: true get: tags: @@ -504,7 +496,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/TriggerDescriptor' + $ref: '#/components/schemas/TriggerDescriptorRequest' responses: '201': @@ -545,10 +537,9 @@ paths: content: application/json: schema: - type: object # <-- Response body is an object - properties: - items: # <-- The array is nested inside the 'items' property - $ref: '#/components/schemas/DescriptorListEntry' + type: array + items: + $ref: '#/components/schemas/DescriptorListEntry' /trigger-descriptors/{id}: parameters: @@ -568,7 +559,7 @@ paths: operationId: getTriggerDescriptorById responses: '200': - description: Plan descriptor retrieved successfully. + description: Trigger descriptor retrieved successfully. content: application/json: schema: @@ -596,7 +587,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/TriggerDescriptor' + $ref: '#/components/schemas/TriggerDescriptorRequest' responses: '204': description: Trigger descriptor created successfully @@ -653,7 +644,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ActivationJobRequest' + $ref: '#/components/schemas/ActivationJobWritableProperties' responses: '201': description: Plan activation job created successfully. @@ -668,7 +659,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ActivationJobResponse' + $ref: '#/components/schemas/ActivationJob' '400': description: Invalid request payload or parameters (e.g., malformed JSON, missing required fields). content: @@ -719,7 +710,13 @@ paths: /plan-activation-jobs/{id}: parameters: - - $ref: '#/components/parameters/jobId' + - in: path + name: id + schema: + type: string + description: Unique identifier of the plan activation job. + example: "Dublin-plan-activation-001" + required: true get: tags: - Activation Management @@ -732,7 +729,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ActivationJobResponse' + $ref: '#/components/schemas/ActivationJob' '404': description: Job not found. content: @@ -773,6 +770,44 @@ paths: application/problem+json: schema: $ref: '#/components/schemas/ErrorDetail' + patch: + tags: + - Activation Management + summary: Cancel the activation job + description: Cancel the activation job + operationId: cancelActivationJobById + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/CancelRequest' + application/merge-patch+json: + schema: + $ref: '#/components/schemas/CancelRequest' + responses: + '202': + description: Job cancel request was accepted and cancellation is ongoing + '204': + description: Job cancel request was successfully completed + '404': + description: Job not found. + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ErrorDetail' + '422': + description: Semantic error - e.g. job was not in RUNNING state + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ErrorDetail' + '500': + description: Internal server error. + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ErrorDetail' /plan-activation-jobs/{id}/status: get: @@ -782,7 +817,13 @@ paths: description: Retrieve the current status of a specific plan activation job using its unique identifier. operationId: getJobStatus parameters: - - $ref: '#/components/parameters/jobId' + - in: path + name: id + schema: + type: string + description: Unique identifier of the plan activation job. + example: "Dublin-plan-activation-001" + required: true responses: '200': description: Job status retrieved successfully. @@ -811,7 +852,22 @@ paths: description: Retrieve detailed information about the activation results of a job operationId: getActivationDetails parameters: - - $ref: '#/components/parameters/jobId' + - in: path + name: id + schema: + type: string + description: Unique identifier of the plan activation job. + example: "Dublin-plan-activation-001" + required: true + - name: expand + in: query + description: >- + By default the activation details results shall include the FAILED operations only. This parameter indicates whether to expand all details of the activation results to also include the 'SUCCEEDED' operations. + required: false + schema: + type: string + enum: + - all responses: '200': description: Activation details retrieved successfully @@ -826,39 +882,7 @@ paths: schema: $ref: '#/components/schemas/ErrorDetail' - /plan-activation-jobs/{id}/cancel-request: - parameters: - - $ref: '#/components/parameters/jobId' - put: - tags: - - Activation Management - summary: Cancel the activation job - description: Cancel the activation job - operationId: cancelActivationJobById - responses: - '200': - description: Job cancel request was successfully completed - '202': - description: Job cancel request was accepted and cancellation is ongoing - '404': - description: Job not found. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ErrorDetail' - '422': - description: Semantic error - e.g. job was not in RUNNING state - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ErrorDetail' - '500': - description: Internal server error. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ErrorDetail' - + /plan-validation-jobs: post: tags: @@ -882,11 +906,11 @@ paths: schema: type: string format: uri-reference - example: "/validation-jobs/myjob-111" + example: "/plan-validation-jobs/myjob-111" content: application/json: schema: - $ref: '#/components/schemas/ValidationJobResponse' + $ref: '#/components/schemas/ValidationJob' '400': description: Invalid request payload or parameters (e.g., malformed JSON, missing required fields). content: @@ -912,7 +936,7 @@ paths: schema: $ref: '#/components/schemas/JobState' description: Filter jobs by their current state. - example: "COMPLETED" # Example state for validation jobs + example: "job-state=COMPLETED" # Example state for validation jobs responses: '200': description: List of plan validation jobs retrieved successfully. @@ -937,7 +961,13 @@ paths: /plan-validation-jobs/{id}: parameters: - - $ref: '#/components/parameters/jobId' + - in: path + name: id + schema: + type: string + description: Unique identifier of the plan validation job. + example: "Dublin-plan-validation-001" + required: true get: tags: - Validation Management @@ -950,7 +980,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ValidationJobResponse' + $ref: '#/components/schemas/ValidationJob' '404': description: Job not found. content: @@ -985,6 +1015,42 @@ paths: application/problem+json: schema: $ref: '#/components/schemas/ErrorDetail' + patch: + tags: + - Validation Management + summary: Cancel the validation job + description: Cancel the validation job + operationId: cancelValidationJobById + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/CancelRequest' + responses: + '202': + description: Job cancel request was accepted and cancellation is ongoing + '204': + description: Job cancel request was successfully completed + '404': + description: Job not found. + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ErrorDetail' + '422': + description: Semantic error - e.g. job was not in RUNNING state + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ErrorDetail' + '500': + description: Internal server error. + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ErrorDetail' + /plan-validation-jobs/{id}/status: get: @@ -994,7 +1060,13 @@ paths: description: Retrieve the current status of a specific plan validation job using its unique identifier. operationId: getValidationJobStatus parameters: - - $ref: '#/components/parameters/jobId' + - in: path + name: id + schema: + type: string + description: Unique identifier of the plan validation job. + example: "Dublin-plan-validation-001" + required: true responses: '200': description: Job status retrieved successfully. @@ -1023,7 +1095,13 @@ paths: description: Retrieve detailed information about the validation results of a job operationId: getValidationDetails parameters: - - $ref: '#/components/parameters/jobId' + - in: path + name: id + schema: + type: string + description: Unique identifier of the plan validation job. + example: "Dublin-South-plan-validation-001" + required: true - name: details in: query description: Selects the level of details to return. @@ -1044,129 +1122,79 @@ paths: application/problem+json: schema: $ref: '#/components/schemas/ErrorDetail' - - /plan-validation-jobs/{id}/cancel-request: - parameters: - - $ref: '#/components/parameters/jobId' - put: - tags: - - Validation Management - summary: Cancel the validation job - description: Cancel the validation job - operationId: cancelValidationJobById - responses: - '200': - description: Job cancel request was successfully completed - '202': - description: Job cancel request was accepted and cancellation is ongoing - '404': - description: Job not found. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ErrorDetail' - '422': - description: Semantic error - e.g. job was not in RUNNING state - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ErrorDetail' - '500': - description: Internal server error. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ErrorDetail' components: - parameters: - jobId: - name: id - in: path - description: Unique identifier of the job - required: true - schema: - type: string - example: "myjob-111" - descriptorId: - name: descriptorId - in: path - description: Unique identifier of the plan descriptor - required: true - schema: - type: string - example: "plan-descriptor-001" - - schemas: - PlanConfigurationDescriptor: - type: object - required: - - configChanges allOf: - - $ref: '#/components/schemas/PlanConfigurationDescriptorCommonProperties' - properties: - configChanges: - description: "The plan configuration changes" - type: array - items: - $ref: '#/components/schemas/ConfigChange' + - $ref: '#/components/schemas/PlanConfigurationDescriptorBaseProperties' + - type: object + required: + - id + - activationMode + - lastModifiedAt + - validationState + - configChangesContentType + - configChanges + properties: + id: + type: string + description: The identifier of the planned configuration + example: plan-001 + configChanges: + description: "The plan configuration changes" + type: array + items: + $ref: '#/components/schemas/ConfigChange' + validationState: + type: string + enum: [NOT_VALIDATED, VALID, INVALID] + default : NOT_VALIDATED + description: The validation state of the plan. + example: NOT_VALIDATED + lastModifiedAt: + type: string + format: date-time + description: the last time the plan was modified + example: 2025-03-06T16:50:26-08:00 + lastValidatedAt: + type: string + format: date-time + description: last time the plan was validated + example: 2025-03-06T16:50:29-08:00 + + + PlanConfigurationDescriptorRequest: + allOf: + - $ref: '#/components/schemas/PlanConfigurationDescriptorBaseProperties' + - type: object + required: + - configChanges + properties: + configChanges: + description: "The plan configuration changes" + type: array + items: + $ref: '#/components/schemas/ConfigChangeWritable' PlanConfigurationDescriptorResponse: - type: object - required: - - id - - activationMode - - lastModifiedAt - - validationState - - configChangesContentType - - configChanges allOf: - - $ref: '#/components/schemas/PlanConfigurationDescriptorCommonProperties' - properties: - configChanges: - description: "The plan configuration changes" - type: array - items: - $ref: '#/components/schemas/ConfigChangeInResponse' - validationState: - type: string - enum: [NOT_VALIDATED, VALIDATING, VALID, INVALID] - default : NOT_VALIDATED - description: The validation state of the plan. - example: NOT_VALIDATED - lastModifiedAt: - type: string - format: date-time - description: the last time the plan was modified - example: 2025-03-06T16:50:26-08:00 - lastValidatedAt: - type: string - format: date-time - description: last time the plan was validated - example: 2025-03-06T16:50:29-08:00 - _links: - type: object - description: Hypermedia links for plan descriptor - allOf: - - $ref: '#/components/schemas/SelfLink' - example: - self: - href: "{root-url}/plan-management/v1/plan-descriptors/pd-001" - templated: true - type: "application/json" - title: "The newly created PlanConfigurationDescriptor" - - PlanConfigurationDescriptorCommonProperties: + - $ref: '#/components/schemas/PlanConfigurationDescriptor' + - type: object + properties: + _links: + allOf: + - $ref: '#/components/schemas/SelfLink' + example: + self: + href: "{root-url}/plan-management/v1/plan-descriptors/pd-001" + templated: true + type: "application/json" + title: "The newly created PlanConfigurationDescriptor" + + PlanConfigurationDescriptorBaseProperties: type: object - required: - - configChangesContentType properties: - id: - type: string - description: Unique id of the plan configuration descriptor - example: plan-001 name: type: string description: Descriptive name of the plan group configuration descriptor @@ -1174,7 +1202,7 @@ components: version: type: string description: The version of the planned configuration. Its format is implementation specific. - example: 1.0.0 + example: "1.0.0" description: type: string description: Used to describe the purpose of the plan configuration @@ -1186,22 +1214,15 @@ components: example: technology-type: NR location: Dublin + configChangesContentType: + $ref: '#/components/schemas/ConfigChangesContentType' activationMode: type: string enum: [ATOMIC, BEST_EFFORT, STOP_ON_ERROR] default : BEST_EFFORT description: Specifies the execution behavior when the plan is activated example: BEST_EFFORT - configChangesContentType: - type: string - enum: - - YANG - - OPENAPI - default: YANG - description: The format/type of the configuration in planConfig - example: YANG - PlanConfigurationGroupDescriptor: type: object required : @@ -1215,6 +1236,10 @@ components: type: string description: Descriptive name of the plan group configuration descriptor example: "Rollout-5G-Dublin-East" + version: + type: string + description: version of the plan group configuration descriptor + example: "1.0.0" description: type: string description: Used to describe the purpose of the plan group configuration @@ -1229,11 +1254,11 @@ components: isOrdered: type: boolean description: Specifies if the members of the planned configuration group are ordered. When ordered, the planned configuration group members shall be validated/activated in the specified order. When not ordered the planned configuration group members can be validated/activated in any order - default: "false" + default: false isFailOnMemberConflicts: type: boolean description: Specifies if the activation shall fail on detection of conflicts between planned configuration group members, or if the operations shall be processed as if there were no conflicts - default: "false" + default: false activationMode: type: string enum: [ATOMIC, BEST_EFFORT, STOP_ON_ERROR] @@ -1242,7 +1267,7 @@ components: example: "BEST_EFFORT" validationState: type: string - enum: [NOT_VALIDATED, VALIDATING, VALID, INVALID] + enum: [NOT_VALIDATED, PARTIALLY_VALID, VALID, INVALID] default : "NOT_VALIDATED" description: The validation state for the last time plan configuration group was validated example: "NOT_VALIDATED" @@ -1268,65 +1293,53 @@ components: - planConfigGroupDescrId: pgc-5g-core-rollout PlanConfigurationGroupDescriptorResponse: - type: object - required: - - id - - activationMode - - validationState - - isOrdered - - isFailOnMemberConflicts - - members allOf: - $ref: '#/components/schemas/PlanConfigurationGroupDescriptor' - properties: - _links: - type: object - description: Hypermedia links for plan descriptor - allOf: - - $ref: '#/components/schemas/SelfLink' - example: - self: - href: "{root-url}/plan-management/v1/plan-group-descriptors/pgd-001" - templated: true - type: "application/json" - title: "The newly created PlanConfigurationGroupDescriptor" - + - type: object + required: + - id + - activationMode + - validationState + - isOrdered + - isFailOnMemberConflicts + - members + properties: + _links: + type: object + description: Hypermedia links for plan descriptor + allOf: + - $ref: '#/components/schemas/SelfLink' + example: + self: + href: "{root-url}/plan-management/v1/plan-group-descriptors/pgd-001" + templated: true + type: "application/json" + title: "The newly created PlanConfigurationGroupDescriptor" + Member: type: object - description: Defines a member identified by EITHER a single Plan Configuration Descriptor ID - OR a Plan Configuration Group Descriptor ID, but not both. - properties: - planConfigDescrId: - type: string - description: Unique id of the plan configuration descriptor. - example: "pcd-001" - planConfigGroupDescrId: - type: string - description: Unique id of the plan configuration group descriptor. - example: "pgc-001" - - # The oneOf keyword enforces that the instance must validate against exactly one subschema. + description: | + Defines a member identified by EITHER a single Plan Configuration Descriptor ID + OR a Plan Configuration Group Descriptor ID, but not both. oneOf: - # Option 1: Must contain planConfigDescrId - - required: - - planConfigDescrId - # explicitly forbid the other property to ensure strict mutual exclusivity - not: - required: [ planConfigGroupDescrId ] - - # Option 2: Must contain planConfigGroupDescrId - - required: - - planConfigGroupDescrId - # explicitly forbid the other property - not: - required: [ planConfigDescrId ] + - type: object + required: [planConfigDescrId] + properties: + planConfigDescrId: + type: string + description: Unique id of the plan configuration descriptor. + example: "pcd-001" + - type: object + required: [planConfigGroupDescrId] + properties: + planConfigGroupDescrId: + type: string + description: Unique id of the plan configuration group descriptor. + example: "pgc-001" FallbackConfigurationDescriptor: type: object - required: - - configChangesContentType - - configChanges properties: id: type: string @@ -1336,14 +1349,14 @@ components: type: string description: Descriptive name of the fallback configuration descriptor example: "Fallback-Rollout-5G-Dublin-East" - version: - type: string - description: The version of the fallback configuration. Its format is implementation specific. - example: 1.0.0 description: type: string description: Used to describe the purpose of the fallback configuration example: "Fallback for configuration plan Rollout-5G-Dublin-East." + version: + type: string + description: The version of the fallback configuration. Its format is implementation specific. + example: 1.0.0 customProperties: type: object description: A dynamic set of custom properties provided by client @@ -1354,54 +1367,77 @@ components: activationJob: type: string description: The identifier of the related activation job. - configurationContentType: - type: string - enum: - - YANG - - OPENAPI - description: The format/type of the configuration in configChanges - example: YANG - fallbackConfig: - description: The fallback configuration. - oneOf: - - type: string - - type: object - additionalProperties: - $ref: '#/components/schemas/ConfigChange' - description: A map of changes. The key of the map shall have the same value as the changeId. - + required: + - activationJob + oneOf: + - type: object + description: COMPLETE_RESTORE type fallback + required: + - fallbackConfig + properties: + fallbackConfig: + type: string + description: The fallback configuration associated with COMPLETE_RESTORE + - type: object + description: The configuration changes associated with UNDO type fallback + properties: + configChangesContentType: + $ref: '#/components/schemas/ConfigChangesContentType' + configChanges: + type: array + description: | + The configuration change set specifying the configuration in case the fallback configuration is of the "UNDO" type. The format of "configChanges" is specified in "configChangesContentType". Exactly one of this element or the fallbackConfig shall be present. + items: + $ref: '#/components/schemas/ConfigChangeWritable' + required: + - configChanges + - configChangesContentType FallbackConfigurationDescriptorResponse: - type: object - required: - - id - - configurationContentType - - fallbackConfig allOf: - $ref: '#/components/schemas/FallbackConfigurationDescriptor' - properties: - _links: - type: object - description: Hypermedia links for fallback descriptor - allOf: - - $ref: '#/components/schemas/SelfLink' - example: - self: - href: "{root-url}/plan-management/v1/fallback-descriptors/pd-001" - templated: true - type: "application/json" - title: "The newly created FallbackConfigurationDescriptor" + - type: object + properties: + _links: + type: object + description: Hypermedia links for fallback descriptor + allOf: + - $ref: '#/components/schemas/SelfLink' + example: + self: + href: "{root-url}/plan-management/v1/fallback-descriptors/pd-001" + templated: true + type: "application/json" + title: "The newly created FallbackConfigurationDescriptor" - TriggerDescriptor: + TriggerDescriptorRequest: + allOf: + - $ref: '#/components/schemas/TriggerDescriptorBaseProperties' + + TriggerDescriptorResponse: + allOf: + - $ref: '#/components/schemas/TriggerDescriptor' + - type: object + properties: + _links: + type: object + description: Hypermedia links for trigger descriptor + allOf: + - $ref: '#/components/schemas/SelfLink' + example: + self: + href: "{root-url}/plan-management/v1/trigger-descriptors/trigger-001" + templated: true + type: "application/json" + title: "The newly created TriggerDescriptor" + + TriggerDescriptorBaseProperties: type: object required: - conditionExpression - evaluationPeriod + - activationJobs properties: - id: - type: string - description: Unique id of the plan configuration descriptor - example: "trigger-001" name: type: string description: Descriptive name of the trigger descriptor @@ -1413,7 +1449,7 @@ components: version: type: string description: an optional version for the Trigger Descriptor - example: "v1.0" + example: "1.0.0" customProperties: type: object description: A dynamic set of custom properties provided by client @@ -1423,42 +1459,22 @@ components: location: Dublin conditionExpression: type: string - description: The condition expression ##BALAZS JEX on NRM - OPEN + description: The condition expression activationJobs: type: array items: type : string description: The identifiers of one or more activation jobs that shall be triggered by this condition. - startAt: + startEvaluationAt: type: string format: date-time description: The date and time at which the evaluation of the condition expression shall start. The evaluation result is set to "False" before that date and time. If the information element is not specified, evaluation of the trigger condition shall start immediately. example: "2025-03-06T16:50:26-08:00" - stopAt: + stopEvaluationAt: type: string format: date-time description: The date and time at which the evaluation of the condition expression shall stop. The evaluation result is set to "False" after that date and time. If the information element is not specified, evaluation of the trigger condition shall continue until the deletion of the trigger condition descriptor. example: "2025-03-06T16:50:26-08:00" - currentEvaluationResult: - type: boolean - default : false - description: The current result of evaluating the "condition-expression". - example: false - lastModifiedAt: - type: string - format: date-time - description: The date and time at which the trigger condition was modified the last time by a MnS consumer. Upon creation of the trigger condition descriptor the value of the information element is set to the date and time at which the descriptor is created. - example: "2025-03-06T16:50:29-08:00" - lastTriggeredAt: - type: string - format: date-time - description: Th date and time at which the evaluation result of the trigger condition changed the last time from "False" to "True". - example: "2025-03-06T16:50:29-08:00" - isTriggerActive: - type: boolean - default : false - description: The indication if the trigger can start activation jobs (trigger is active), or if the trigger cannot start activation jobs (trigger is inactive). - example: false isTriggerOnce: type: boolean default : true @@ -1468,85 +1484,102 @@ components: type: integer description: The evaluation period specifies the interval of time in seconds between two consecutive condition expression evaluations. hysteresis: - type: integer + type: object + allOf: + - $ref: '#/components/schemas/Hysteresis' description: The hysteresis, when present, specifies that the trigger shall not be activated immediately when the evaluation result changes from false to true or a specified number of times. Values greater or equal to 1 are allowed + additionalProperties: true - TriggerDescriptorResponse: + Hysteresis: type: object - required: - - id - - conditionExpression - - evaluationPeriod - - isTriggerOnce - - currentEvaluationResult - - isTriggerActive - allOf: - - $ref: '#/components/schemas/TriggerDescriptor' properties: - _links: - type: object - description: Hypermedia links for trigger descriptor - allOf: - - $ref: '#/components/schemas/SelfLink' - example: - self: - href: "{root-url}/plan-management/v1/trigger-descriptors/trigger-001" - templated: true - type: "application/json" - title: "The newly created TriggerDescriptor" + timeOfTrueEvaluations: + type: integer + description: The hysteresis, when present, specifies that the trigger shall not be activated immediately, when the evaluation result changes from false to true, but only when the evaluation results is true for a specified time (which must be a multiple of the evaluation period). Unit is seconds + numberOfTrueEvaluations: + type: integer + description: This information element, when present, specifies that the trigger shall not be activated immediately, when the evaluation result changes from false to true, but only when the evaluation results is true for a specified time (which must be a multiple of the evaluation period) or a specified number of times. + + TriggerDescriptor: + allOf: + - $ref: '#/components/schemas/TriggerDescriptorBaseProperties' + - type: object + properties: + id: + type: string + description: Unique id of the plan configuration descriptor + example: "trigger-001" + currentEvaluationResult: + type: boolean + default : false + description: The current result of evaluating the "condition-expression". + example: false + lastModifiedAt: + type: string + format: date-time + description: The date and time at which the trigger condition was modified the last time by a MnS consumer. Upon creation of the trigger condition descriptor the value of the information element is set to the date and time at which the descriptor is created. + example: "2025-03-06T16:50:29-08:00" + lastTriggeredAt: + type: string + format: date-time + description: The date and time at which the evaluation result of the trigger condition changed the last time from "False" to "True". + example: "2025-03-06T16:50:29-08:00" + isTriggerActive: + type: boolean + default : false + description: The indication if the trigger can start activation jobs (trigger is active), or if the trigger cannot start activation jobs (trigger is inactive). + example: false + required: + - conditionExpression + - evaluationPeriod DescriptorListEntry: - type: array - items: - type: object - properties: - id: - type: string - description: id of the descriptor. - example: plan-descriptor-1 - name: - type: string - description: name of the descriptor. - example: Dublin East Rollout - description: - type: string - description: description/purpose of the descriptor. - example: plan-descriptor-1 - required : - - id - - name - - JobListEntry: type: object - allOf: - - $ref: '#/components/schemas/JobState' properties: id: type: string - description: id of the job. - example: plan-job-1 + description: id of the descriptor. + example: plan-descriptor-1 name: type: string - description: name of the job. - example: Dublin East Rollout Job + description: name of the descriptor. + example: Dublin East Rollout + version: + type: string + description: version of the descriptor. + example: "1.0.0" description: type: string - description: description/purpose of the job. - example: Job to do dublin east rollout + description: description/purpose of the descriptor. + example: "plan-descriptor-1" required : - id - - name - - jobState - - ActivationJob: - type: object + + JobListEntry: allOf: - - $ref: '#/components/schemas/JobState' + - type: object + properties: + id: + type: string + description: id of the job. + example: plan-job-1 + name: + type: string + description: name of the job. + example: Dublin East Rollout Job + description: + type: string + description: description/purpose of the job. + example: Job to do dublin east rollout + jobState: + $ref: '#/components/schemas/JobState' + required : + - id + - jobState + + ActivationJobWritableProperties: + type: object properties: - id: - type: string - description: id of the activation job - example: "job-id-3985199134" name: type: string description: Name of the activation job @@ -1560,14 +1593,10 @@ components: description: The consumer that created and/or started the job. It may indicated a human user and/or one or more applications initiating the job. E.g. ["userid:janedoe", "appid:12314"] items: type: string - createdFallbackConfigDescrId: - type: string - description: Id of the created Fallback Plan Configuration Descriptor - example: "fallback-plan-descriptor-001" isFallbackEnabled: type: boolean description: Whether fallback should be enabled for this job - default: true + default: false serviceImpact: type: string enum: [LEAST_SERVICE_IMPACT, SHORTEST_TIME] @@ -1577,115 +1606,129 @@ components: type: boolean description: Specifies if the activation job shall start immediately or, alternatively, by conditional activation. default: true - jobState: - allOf: - - $ref: '#/components/schemas/JobState' - jobDetails: - allOf: - - $ref: '#/components/schemas/JobDetails' - activationState: - allOf: - - $ref: '#/components/schemas/ActivationState' - activationDetails: - allOf: - - $ref: '#/components/schemas/LinkObject' - - type: object - properties: - href: - type: string - title: A URI reference to the activation details - example: "{apiRoot}/plan-management/v1/plan-activation-jobs/myjob-111/activation-details" - title: - type: string - enum: - - "Link to the activation details" - method: - type: string - enum: - - "GET" - type: - type: string - description: The content type expected when following this link (MIME type). - default: "application/json" - oneOf: - - type: object # Alt.1 planConfigDescrId - required: - - planConfigDescrId + oneOf: + - $ref: '#/components/schemas/PlanRef' + - $ref: '#/components/schemas/PlanGroupRef' + - $ref: '#/components/schemas/EmbeddedPlan' + - $ref: '#/components/schemas/EmbeddedPlanGroup' + - $ref: '#/components/schemas/FallbackPlanRef' + example: + { + "name" : "5G-Dublin-East-Rollout", + "description" : "Optimize the 5G network in Dublin East", + "planConfigDescr" : { + "activationMode" : "ATOMIC", + "customProperties" : { + "technology-type": "NR", + "location": "Dublin" + }, + "configChangesContentType" : "YANG_BASED", + "configChanges": [ + { + "modifyOperator": "merge", + "changeId": "Dublin-Center_DC-01_555777999", + "target": "/SubNetwork=Dublin-Center/ManagedElement=DC-001/NRCellDU=1", + "value": { + "administrativeState": "LOCKED" + } + } + ] + } + } + + PlanRef: + type: object + required: [planConfigDescrId] + properties: + planConfigDescrId: + type: string + + EmbeddedPlan: + type: object + required: [planConfigDescr] + properties: + planConfigDescr: + $ref: '#/components/schemas/PlanConfigurationDescriptorRequest' + + PlanGroupRef: + type: object + required: [planConfigGroupDescrId] + properties: + planConfigGroupDescrId: + type: string + + EmbeddedPlanGroup: + type: object + required: [planConfigGroupDescr] + properties: + planConfigGroupDescr: + $ref: '#/components/schemas/PlanConfigurationGroupDescriptor' + + FallbackPlanRef: + type: object + required: [fallbackConfigDescrId] + properties: + fallbackConfigDescrId: + type: string + + ActivationJobStatus: + allOf: + - type: object properties: - planConfigDescrId: - type: string - description: Unique id reference to the plan descriptor to activate - example: "planxyz" - - type: object # Alt.2 planConfigDescr embedded - required: - - planConfigDescr + jobState: { $ref: '#/components/schemas/JobState' } + activationState: { $ref: '#/components/schemas/ActivationState' } + startedAt: { type: string, format: date-time } + stoppedAt: { type: string, format: date-time } + required: [jobState, activationState] + + + ActivationJob: + allOf: + - $ref: '#/components/schemas/ActivationJobWritableProperties' + - type: object properties: - planConfigDescr: - type: object - description: Inline plan configuration descriptor to activate + id: + type: string + description: id of the activation job + example: "job-id-3985199134" + jobState: allOf: - - $ref: '#/components/schemas/PlanConfigurationDescriptor' - example: - name: "myjob-111" - activationMode: "BEST_EFFORT" - customProperties: { - techology-type: "NR", - indoor: false - } - configChanges: - ... - - type: object # Alt.3 planConfigGroupDescrId - required: - - planConfigGroupDescrId # Alt.3 planConfigGroupDescrId - properties: - planConfigGroupDescrId: + - $ref: '#/components/schemas/JobState' + example: "COMPLETED" + activationState: + allOf: + - $ref: '#/components/schemas/ActivationState' + example: "ACTIVATED" + startedAt: type: string - description: Unique id reference to the plan group descriptor to activate - example: "plan-group-xyz" - - type: object # Alt.4 planConfigGroupDescr embedded - required: - - planConfigGroupDescr - properties: - planConfigGroupDescr: + format: date-time + example: "2024-12-02T13:16:54.088Z" + stoppedAt: type: string - description: Inline plan group descriptor to activate + format: date-time + example: "2024-12-02T13:16:58.088Z" + jobDetails: allOf: - - $ref: '#/components/schemas/PlanConfigurationGroupDescriptor' - - type: object # Alt.5 fallbackConfigDescrId - required: - - fallbackConfigDescrId - properties: - fallbackConfigDescrId: + - $ref: '#/components/schemas/JobDetails' + activationDetails: + allOf: + - $ref: '#/components/schemas/ExecutionDetails' + cancelRequest: + type: boolean + description: This boolean attribute allows to request to cancel the activation process by setting its value to "True". Setting the value to "False" has no observable result. Once the value is set to "True" it is immutable + default: false + createdFallbackConfigDescrId: type: string - description: Unique id reference to the fallback descriptor to activate - example: "planxyz" - example: - { - id : "myjob-111", - name : "5G-Dublin-East-Rollout", - description : "Optimize the 5G network in Dublin East", - isFallbackEnabled : true, - serviceImpact : "SHORTEST_TIME", - isImmediateActivation : true, - jobState : "CREATED", - jobDetails : "", - startedAt : "", - activationState : "NOT_STARTED", - activationDetails : { - href: "{apiRoot}/plan-management/v1/plan-activation-jobs/myjob-111/activation-details", - templated: true, - type: "application/json", - title: "The activation details of the plan configuration(s)", - method : "GET" - }, - planConfigDescrId : "plan-descriptor-001", - } - additionalProperties : true + description: Id of the created Fallback Plan Configuration Descriptor + example: "fallback-plan-descriptor-001" + _links: + $ref: '#/components/schemas/ActivationJobLinks' + required: [id, jobState, jobDetails, activationState, activationDetails, _links] + additionalProperties : true - ActivationJobRequest: - type: object + ValidationJobRequest: allOf: - - $ref: '#/components/schemas/ActivationJob' + - $ref: '#/components/schemas/ValidationJobBaseProperties' example: { "name" : "5G-Dublin-East-Rollout", @@ -1696,109 +1739,23 @@ components: "technology-type": "NR", "location": "Dublin" }, - "configChangesContentType" : "application/vnd.3gpp.yang-patch+json", - "configChanges": { - ... - } + "configChangesContentType" : "YANG_BASED", + "configChanges": [ + { + "modifyOperator": "merge", + "changeId": "Dublin-Center_DC-01_555777999", + "target": "/SubNetwork=Dublin-Center/ManagedElement=DC-001/NRCellDU=1", + "value": { + "administrativeState": "LOCKED" + } + } + ] } } - ActivationJobResponse: - type: object - required: - - id - - jobState - - jobDetails - - activationState - - activationDetails - - isImmediateActivation - - isFallbackEnabled - - serviceImpact - allOf: - - $ref: '#/components/schemas/ActivationJob' + ValidationJobBaseProperties: + type: object properties: - _links: - description: Hypermedia links for this resource, including fixed and dynamic relations - allOf: - - $ref: '#/components/schemas/JobLinks' - - type: object - properties: - self: - allOf: - - $ref: '#/components/schemas/LinkObject' - - type: object - properties: - href: - type: string - default: "{apiRoot}/plan-management/v1/plan-activation-jobs/{ActivationJobId}" - title: - type: string - enum: - - "Link to the plan activation job" - method: - type: string - enum: - - "GET" - example: - href: "{apiRoot}/plan-management/v1/plan-activation-jobs/activation-job-001" - title: "Link to the plan activation job" - type: "application/json" - templated: true - method: GET - fallback: - allOf: - - $ref: '#/components/schemas/LinkObject' - description: A URI reference to the fallback plan descriptor - example: - href: "{apiRoot}/plan-management/v1/plan-descriptor/myjob-111-fallback" - templated: true - type: "application/json" - title: "A URI reference to the fallback plan descriptor" - method: GET - ##EDITOR other links are missing. We have more in the examples -> additionalProperties to allow any other dynamic links LATER - additionalProperties: - $ref: '#/components/schemas/LinkObject' - example: - self: - href: "{apiRoot}/plan-management/1900/plan-activation-jobs/myjob-111" - templated: true - type: "application/json" - title: "The newly created activation job" - method : "GET" - planDescriptor: - href: "{apiRoot}/plan-management/v1/plan-descriptors/planxyz" - templated: true - type: "application/json" - title: "plan descriptor link" - method : "GET" - status: - href: "{apiRoot}/plan-management/1900/plan-activation-jobs/myjob-111/status" - templated: true - type: "application/json" - title: "activation status link" - method : "GET" - cancel: - href: "{apiRoot}/plan-management/v1/plan-activation-jobs/myjob-111/cancel-request" - templated: true - type: "application/json" - title: "cancel the job" - method : "PUT" - fallbackPlan: - href: "{apiRoot}/plan-management/v1/plan-descriptors/myfallback-plan-111" - templated: true - type: "application/json" - title: "fallback plan descriptor link" - method : "GET" - - ValidationJob: - type: object - allOf: - - $ref: '#/components/schemas/JobState' - properties: - id: - type: string - description: id of the validation job - example: "job-id-3985199134" name: type: string description: Name of the validation job @@ -1818,193 +1775,94 @@ components: default : "CONTINUE_ON_ERROR" description: Specifies the execution behavior when the plan is activated - oneOf: - - type: object # Alt.1 planConfigDescrId - required: - - planConfigDescrId - properties: - planConfigDescrId: - type: string - description: Unique id reference to the plan descriptor to validate - example: "planxyz" - - type: object # Alt.2 planConfigDescr embedded - required: - - planConfigDescr - properties: - planConfigDescr: - type: object - description: Inline plan configuration descriptor to validate - allOf: - - $ref: '#/components/schemas/PlanConfigurationDescriptor' - example: - name: "myjob-111" - activationMode: "BEST_EFFORT" - customProperties: { - techology-type: "NR", - indoor: false - } - configChanges: - ... - - type: object # Alt.3 planConfigGroupDescrId - required: - - planConfigGroupDescrId - properties: - planConfigGroupDescrId: - type: string - description: Unique id reference to the plan group descriptor to validate - example: "plan-group-xyz" - - type: object # Alt.4 planConfigGroupDescr embedded - required: - - planConfigGroupDescr - properties: - planConfigGroupDescr: - type: string - description: Inline plan group descriptor to validate - allOf: - - $ref: '#/components/schemas/PlanConfigurationGroupDescriptor' - - type: object # Alt.5 fallbackConfigDescrId - required: - - fallbackConfigDescrId - properties: - fallbackConfigDescrId: - type: string - description: Unique id reference to the fallback descriptor to validate - example: "planxyz" - additionalProperties : true - - ValidationJobRequest: - type: object - allOf: - - $ref: '#/components/schemas/ValidationJob' + oneOf: + - $ref: '#/components/schemas/PlanRef' + - $ref: '#/components/schemas/PlanGroupRef' + - $ref: '#/components/schemas/EmbeddedPlan' + - $ref: '#/components/schemas/EmbeddedPlanGroup' + - $ref: '#/components/schemas/FallbackPlanRef' example: { "name" : "5G-Dublin-East-Rollout", "description" : "Optimize the 5G network in Dublin East", - "planDescriptor" : { + "planConfigDescr" : { "activationMode" : "ATOMIC", "customProperties" : { "technology-type": "NR", "location": "Dublin" }, - "configChanges": { - ... - } + "configChangesContentType" : "YANG_BASED", + "configChanges": [ + { + "modifyOperator": "merge", + "changeId": "Dublin-Center_DC-01_555777999", + "target": "/SubNetwork=Dublin-Center/ManagedElement=DC-001/NRCellDU=1", + "value": { + "administrativeState": "LOCKED" + } + } + ] } } + additionalProperties : true - ValidationJobResponse: - type: object - required: - - id - - jobState - - jobDetails - - validationState - - validationDetails + ValidationJob: allOf: - - $ref: '#/components/schemas/ValidationJob' + - $ref: '#/components/schemas/ValidationJobBaseProperties' + - $ref: '#/components/schemas/ValidationJobStatus' + - type: object + properties: + id: + type: string + description: id of the validation job + example: "job-id-3985199134" + currentConfigTime: + type: string + format : date-time + description: The date and time of the current configuration state against which the planned configuration or planned configuration group is validated. + cancelRequest: + type: boolean + description: boolean indicating the request of a job cancellation + default: false + example: true + jobDetails: + $ref: '#/components/schemas/JobDetails' + validationDetails: + $ref: '#/components/schemas/ExecutionDetails' + _links: + $ref: '#/components/schemas/ValidationJobLinks' + required: + - id + - jobState + - jobDetails + - cancelRequest + - validationMode + - validationState + - validationDetails + - _links + + ValidationJobStatus: + type: object + required: [jobState, validationState] properties: - cancelRequest: - type: boolean - description: boolean indicating the request of a job cancellation - example: true - currentConfigTime: - type: string - format : DateTime - description: The date and time of the current configuration state against which the planned configuration or planned configuration group is validated. - jobDetails: - allOf: - - $ref: '#/components/schemas/JobDetails' jobState: allOf: - $ref: '#/components/schemas/JobState' + example: "COMPLETED" validationState: allOf: - $ref: '#/components/schemas/ValidationState' - validationDetails: - allOf: - - $ref: '#/components/schemas/LinkObject' - - type: object - properties: - href: - type: string - title: A URI reference to the validation details - example: "{apiRoot}/plan-management/v1/plan-activation-jobs/myjob-111/validation-details" - title: - type: string - enum: - - "Link to the validation details" - method: - type: string - enum: - - "GET" - type: - type: string - description: The content type expected when following this link (MIME type). - default: "application/json" - _links: - description: Hypermedia links for this resource, including fixed and dynamic relations - allOf: - - $ref: '#/components/schemas/JobLinks' - - type: object - properties: - self: - allOf: - - $ref: '#/components/schemas/LinkObject' # Any other link will conform to LinkObject schema - - type: object - properties: - href: - type: string - default: "{apiRoot}/plan-management/v1/validation-jobs/{ValidationJobId}" - title: - type: string - enum: - - "Link to the plan validation job" - method: - type: string - enum: - - "GET" # This means the method MUST be "GET" - example: - href: "{apiRoot}/plan-management/v1/validation-jobs/validation-job-001" - title: "Link to the plan validation job" - type: "application/json" - templated: true - method: GET - # additionalProperties to allow any other dynamic links - additionalProperties: - $ref: '#/components/schemas/LinkObject' - example: - self: - href: "{apiRoot}/plan-management/1900/plan-activation-jobs/myjob-111" - templated: true - type: "application/json" - title: "The newly created activation job" - method : "GET" - planDescriptor: - href: "{apiRoot}/plan-management/v1/plan-descriptors/planxyz" - templated: true - type: "application/json" - title: "plan descriptor link" - method : "GET" - status: - href: "{apiRoot}/plan-management/v1/plan-activation-jobs/myjob-111/status" - templated: true - type: "application/json" - title: "activation status link" - method : "GET" - cancel: - href: "{apiRoot}/plan-management/v1/plan-activation-jobs/myjob-111/cancel-request" - templated: true - type: "application/json" - title: "cancel the job" - method : "POST" - fallbackPlan: - href: "{apiRoot}/plan-management/v1/plan-descriptors/myfallback-plan-111" - templated: true - type: "application/json" - title: "fallback plan descriptor link" - method : "GET" + example: "NOT_VALIDATED" + startedAt: + type: string + format: date-time + example: "2024-12-02T13:16:54.088Z" + stoppedAt: + type: string + format: date-time + example: "2024-12-02T13:16:58.088Z" - ConfigChange: + ConfigChangeWritable: type: object properties: modifyOperator: @@ -2022,7 +1880,7 @@ components: example: "/_3gpp-common-subnetwork:SubNetwork=Irl/3gpp-common-mecontext:MeContext=Dublin-1/_3gpp_nrm_managedelement:ManagedElement=1/_3gpp_nrm_nrcelldu:NRCellDU=4" changeId: description: Unique identifier for this change. Its value must be unique in any list of changes in a PlanDescriptor. - MnSProducer may ignore this property even if provided in favour of an auto-positional positional index of the changes array. + MnSProducer may ignore this property even if provided in favour of an auto-positional array index matching this configChange array entry. If not provided the response will default to changeIndex example: "cell-operation-001" value: @@ -2031,115 +1889,323 @@ components: description: Value to apply (for create/merge/merge-create operations) additionalProperties: true # Allows for additional properties to be provided required: - - operation + - modifyOperator - target - ConfigChangeInResponse: - description: Represents a single change operation that combines a base definition - with mutually exclusive identification methods (ID or Index). + ConfigChange: + type: object + properties: + modifyOperator: + type: string + enum: [create, merge, merge-create, delete] + description: The operation to perform + example: "create" + description: + type: string + description: text describing the change + example: "modify NR cell for optimisation" + target: + type: string + description: Target data node path + example: "/_3gpp-common-subnetwork:SubNetwork=Irl/3gpp-common-mecontext:MeContext=Dublin-1/_3gpp_nrm_managedelement:ManagedElement=1/_3gpp_nrm_nrcelldu:NRCellDU=4" + value: + type: object + additionalProperties: true # Allows any nested properties within 'value' + description: Value to apply (for create/merge/merge-create operations) + oneOf: + - required: [changeId] + properties: + changeId: + type: string + description: | + Unique identifier for this change as originally provided in the request. + The MnS Producer may ignore it and use positional index instead. + If not present in the request, the response will use `changeIndex`. + example: "cell-operation-001" + + - required: [changeIndex] + properties: + changeIndex: + type: integer + description: | + Zero-based index of this change in the original `configChanges` array. + Used when no `changeId` was provided or when the producer prefers positional addressing. + example: 0 + additionalProperties: true # Allows for additional properties to be provided + required: + - modifyOperator + - target + + ActivationJobLinks: allOf: - - $ref: '#/components/schemas/ConfigChange' - - type: object properties: - - changeIndex: - type: integer - description: Location index of the change in a list of changes. - example: 0 - - # enforces that only one of changeId or changeIndex are used by the MnSProducer - oneOf: - # Option 1: Must have changeId AND must NOT have changeIndex - - required: - - changeId - not: - required: [ changeIndex ] - - # Option 2: Must have changeIndex AND must NOT have changeId - - required: - - changeIndex - not: - required: [ changeId ] - - JobLinks: - type: object + self: + allOf: + - $ref: '#/components/schemas/LinkObject' + - type: object + properties: + href: + type: string + default: "{apiRoot}/plan-management/v1/plan-activation-jobs/{activationJobId}" + title: + type: string + enum: + - "Link to the plan activation job" + method: + type: string + enum: + - "GET" + example: + href: "{apiRoot}/plan-management/v1/plan-activation-jobs/activation-job-001" + title: "Link to the plan activation job" + type: "application/json" + templated: true + method: GET + descriptor: + description: A URI reference to the plan or plan group configuration descriptor + allOf: + - $ref: '#/components/schemas/LinkObject' # Any other link will conform to LinkObject schema + - type: object + properties: + href: + type: string + example: "{apiRoot}/plan-management/v1/plan-descriptors/{id}" + title: + type: string + enum: + - "Link to the plan (or plan group) configuration descriptor" + method: + type: string + enum: + - "GET" # This means the method MUST be "GET" + example: + href: "{apiRoot}/plan-management/v1/plan-descriptors/plan-descriptor-001" + title: "Link reference to the plan (or plan group) configuration descriptor" + type: "application/json" + templated: true + method: GET + status: + allOf: + - $ref: '#/components/schemas/LinkObject' # Any other link will conform to LinkObject schema + - type: object + properties: + href: + type: string + default: "{apiRoot}/plan-management/v1/plan-activation-jobs/{id}/status" + title: + type: string + enum: + - "Link to GET the job status" + method: + type: string + enum: + - "GET" # This means the method MUST be "GET" + description: A URI reference to the status information + example: + href: "{apiRoot}/plan-management/v1/plan-activation-jobs/myjob-111/status" + title: "Link to GET the job status" + type: "application/json" + templated: true + method: GET + validationDetails: + allOf: + - $ref: '#/components/schemas/LinkObject' # Any other link will conform to LinkObject schema + - type: object + properties: + href: + type: string + default: "{apiRoot}/plan-management/v1/plan-activation-jobs/{id}/activation-details" + title: + type: string + enum: + - "Link to GET the job details" + method: + type: string + enum: + - "GET" + description: A URI reference to the status information + example: + href: "{apiRoot}/plan-management/v1/plan-activation-jobs/myjob-111/status" + title: "Link to GET the job status" + type: "application/json" + templated: true + method: GET + cancel: + allOf: + - $ref: '#/components/schemas/LinkObject' # Any other link + - type: object + properties: + href: + type: string + default: "{apiRoot}/plan-management/v1/plan-activation-jobs/{id}" + title: + type: string + enum: + - "Link to cancel the job" + method: + type: string + enum: + - "PATCH" + description: A URI reference to cancel the job + example: + href: "{apiRoot}/plan-management/v1/plan-activation-jobs/myjob-111" + title: "Link to cancel the job" + type: "application/json" + templated: true + method: PATCH + fallback: + allOf: + - $ref: '#/components/schemas/LinkObject' + description: A URI reference to the fallback plan descriptor + example: + href: "{apiRoot}/plan-management/v1/fallback-descriptors/fallback-myjob-111" + templated: true + type: "application/json" + title: "A URI reference to the fallback plan descriptor" + method: GET + # additionalProperties to allow any other dynamic links + additionalProperties: + $ref: '#/components/schemas/LinkObject' # Any other link will conform to LinkObject schema + required: + - self + - descriptor + - status + - validationDetails + - cancel + + ValidationJobLinks: allOf: - - $ref: '#/components/schemas/SelfLink' - properties: - planDescriptor: - description: A URI reference to the plan (or plan group) configuration descriptor - allOf: - - $ref: '#/components/schemas/LinkObject' # Any other link will conform to LinkObject schema - - type: object - properties: - href: - type: string - default: "{apiRoot}/plan-management/v1/plan-descriptors/{planDescriptorId}" - title: - type: string - enum: - - "Link to the plan (or plan group) configuration descriptor" - method: - type: string - enum: - - "GET" # This means the method MUST be "GET" + - type: object + properties: + self: + allOf: + - $ref: '#/components/schemas/LinkObject' + - type: object + properties: + href: + type: string + default: "{apiRoot}/plan-management/v1/plan-validation-jobs/{validationJobId}" + title: + type: string + enum: + - "Link to the plan validation job" + method: + type: string + enum: + - "GET" + example: + href: "{apiRoot}/plan-management/v1/plan-validation-jobs/val-job-001" + title: "Link to the plan validation job" + type: "application/json" + templated: true + method: GET + descriptor: + description: A URI reference to the plan (or plan group) configuration descriptor + allOf: + - $ref: '#/components/schemas/LinkObject' # Any other link will conform to LinkObject schema + - type: object + properties: + href: + type: string + example: "{apiRoot}/plan-management/v1/plan-descriptors/{id}" + title: + type: string + enum: + - "Link to the plan (or plan group) configuration descriptor" + method: + type: string + enum: + - "GET" + example: + href: "{apiRoot}/plan-management/v1/plan-descriptors/plan-descriptor-001" + title: "Link reference to the plan (or plan group) configuration descriptor" + type: "application/json" + templated: true + method: GET + status: + allOf: + - $ref: '#/components/schemas/LinkObject' # Any other link will conform to LinkObject schema + - type: object + properties: + href: + type: string + default: "{apiRoot}/plan-management/v1/plan-validation-jobs/{id}/status" + title: + type: string + enum: + - "Link to GET the job status" + method: + type: string + enum: + - "GET" + description: A URI reference to the status information example: - href: "{apiRoot}/plan-management/v1/plan-descriptors/plan-descriptor-001" - title: "Link reference to the plan (or plan group) configuration descriptor" + href: "{apiRoot}/plan-management/v1/plan-validation-jobs/myjob-111/status" + title: "Link to GET the job status" type: "application/json" templated: true method: GET - status: - allOf: - - $ref: '#/components/schemas/LinkObject' # Any other link will conform to LinkObject schema - - type: object - properties: - href: - type: string - default: "{apiRoot}/plan-management/v1/plan-activation-jobs/{jobId}/status" - title: - type: string - enum: - - "Link to GET the job status" - method: - type: string - enum: - - "GET" # This means the method MUST be "GET" - description: A URI reference to the status information - example: - href: "{apiRoot}/plan-management/v1/plan-activation-jobs/myjob-111/status" - title: "Link to GET the job status" - type: "application/json" - templated: true - method: GET - cancel: - allOf: - - $ref: '#/components/schemas/LinkObject' # Any other link will conform to LinkObject schema - - type: object - properties: - href: - type: string - default: "{apiRoot}/plan-management/v1/plan-{job-type}-jobs/{jobId}/cancel-request" - title: - type: string - enum: - - "Link to cancel the job" - method: - type: string - enum: - - "PUT" # This means the method MUST be "PUT" - description: A URI reference to cancel the job - example: - href: "{apiRoot}/plan-management/v1/plan-activation-jobs/myjob-111/cancel-cancel-request" - title: "Link to cancel the job" - type: "application/json" - templated: true - method: POST + validationDetails: + allOf: + - $ref: '#/components/schemas/LinkObject' # Any other link will conform to LinkObject schema + - type: object + properties: + href: + type: string + default: "{apiRoot}/plan-management/v1/plan-validation-jobs/{id}/activation-details" + title: + type: string + enum: + - "Link to GET the job details" + method: + type: string + enum: + - "GET" + description: A URI reference to the status information + example: + href: "{apiRoot}/plan-management/v1/plan-validation-jobs/myjob-111/status" + title: "Link to GET the job status" + type: "application/json" + templated: true + method: GET + cancel: + allOf: + - $ref: '#/components/schemas/LinkObject' # Any other link + - type: object + properties: + href: + type: string + default: "{apiRoot}/plan-management/v1/plan-validation-jobs/{id}" + title: + type: string + enum: + - "Link to cancel the job" + method: + type: string + enum: + - "PATCH" + description: A URI reference to cancel the job + example: + href: "{apiRoot}/plan-management/v1/plan-validation-jobs/myjob-111" + title: "Link to cancel the job" + type: "application/json" + templated: true + method: PATCH + # additionalProperties to allow any other dynamic links + additionalProperties: + $ref: '#/components/schemas/LinkObject' # Any other link will conform to LinkObject schema + required: + - self + - descriptor + - status + - validationDetails + - cancel JobState: type: string enum: [NOT_STARTED, QUEUED, RUNNING, CANCELLING, CANCELLED, COMPLETED, FAILED] + default: NOT_STARTED example: "COMPLETED" JobDetails: @@ -2151,98 +2217,65 @@ components: items: $ref: '#/components/schemas/ErrorDetail' additionalProperties: true - - ActivationJobStatus: - properties: - jobState: - allOf: - - $ref: '#/components/schemas/JobState' - example: "COMPLETED" - activationState: - allOf: - - $ref: '#/components/schemas/ActivationState' - example: "ACTIVATED" - startedAt: - type: string - format: date-time - example: "2024-12-02T13:16:54.088Z" - stoppedAt: - type: string - format: date-time - example: "2024-12-02T13:16:58.088Z" - - ValidationJobStatus: - properties: - jobState: - allOf: - - $ref: '#/components/schemas/JobState' - example: "COMPLETED" - validationState: - allOf: - - $ref: '#/components/schemas/ValidationState' - example: "VALID" - startedAt: - type: string - format: date-time - example: "2024-12-02T13:16:54.088Z" - stoppedAt: - type: string - format: date-time - example: "2024-12-02T13:16:58.088Z" + ExecutionDetails: type: object description: Details of the execution of the operations that are contained in the planned configuration or planned configuration group referenced in the job. properties: + summary: + $ref: '#/components/schemas/SummaryStatus' results: type: array items: - type: object - properties: - planDescriptorId: - type: string - example: "planconfig-descriptor-001" - changes: - type: array - items: - $ref: '#/components/schemas/ChangeStatus' + $ref: '#/components/schemas/Result' memberConflicts: type: array items: $ref: '#/components/schemas/MemberConflict' - summary: - $ref: '#/components/schemas/SummaryStatus' example: - { - "results": { ...}, - "memberConflicts": { ...}, - "summary" : {...} - } + summary: + notFinished: 0 + succeeded: 1 + failed: 0 + rollbackSucceeded: 0 + rollbackFailed: 0 + conflicting: 0 + results: [] + memberConflicts: [] + ValidationState: type: string enum: [UNKNOWN, VALIDATION_SUCCEEDED, VALIDATION_FAILED] - example: "VALIDATED" + example: "VALIDATION_SUCCEEDED" ActivationState: type: string - enum: [NOT_STARTED, VALIDATING, ACTIVATED, ACTIVATION_FAILED, PARTIALLY_ACTIVATED, ACTIVATION_FAILED_ROLLED_BACK, ACTIVATION_FAILED_ROLLBACK_FAILED] + enum: [NOT_STARTED, ACTIVATED, ACTIVATION_FAILED, PARTIALLY_ACTIVATED, ACTIVATION_FAILED_ROLLED_BACK, ACTIVATION_FAILED_ROLLBACK_FAILED] example: "ACTIVATED" - ChangeStatus: + Result: type: object + description: Details of the execution of the operations that are contained in the planned configuration. properties: planConfigDescrId: type: string - description : The schange status may optionally include the planDescriptor Id + description : If planned configuration groups are activated, this information elements specifies the planned configuration descriptor identifier, for which error details are reported. If a planned configuration is activated or validated, this information element is absent. example: "descriptor-001" changeId: type: string + description: The identification of the operation. It is the identifier ("changeId") provided by the MnS consumer. Exactly one of "changeId" or "changeIndex" shall be provided. example: "changeId-001" + changeIndex: + type: integer + description: The identification of the operation. It is the positional index of the operation in the operation set ("changeIndex"). The positional index of the leftmost element is "0". Exactly one of "changeId" or "changeIndex" shall be provided. + example: 0 state: type: string enum: [NOT_STARTED, PROCESSING, SUCCEEDED, FAILED] default: NOT_STARTED + description: The state of the operation activation. example: "SUCCEEDED" target: type: string @@ -2252,7 +2285,6 @@ components: items: $ref: '#/components/schemas/ErrorDetail' required: - - changeId # either the chanId or the array index in the array of ChangeBaseProperties; - target - state example: @@ -2262,8 +2294,7 @@ components: errors: - type: VALIDATION_ERROR title: Validation Error - status: 400 - reason: NEW_ATTRIBUTE_VALUE_INVALID + reason: VALUE_INVALID detail: The provided value 'some-value' for 'someAttr' is not allowed. Valid values are 'some-value-x', 'some-value-y'. path: /SubNetwork=1/MeContext=2/ManagedElement=3/attributes/someAttr errorInfo: @@ -2302,35 +2333,49 @@ components: MemberOp: type: object + description: The identification of two or more operation members that have a conflict. properties: planConfigDescrId: type: string - changeId: - type: string - description: The changeId as provided in the request. - example: "0" - changeIndex: - type: integer - description: Location index of the change in a list of changes. - example: 0 - - # enforces that only one of either changeId or changeIndex is used - # if changeId is not provided then the changeIndex will be used by default - oneOf: - # Option 1: Must have changeId AND must NOT have changeIndex - - required: - - changeId - not: - required: [ changeIndex ] - - # Option 2: Must have changeIndex AND must NOT have changeId - - required: - - changeIndex - not: - required: [ changeId ] required: - - planDescriptorId - + - planConfigDescrId + oneOf: + - required: + - changeId + properties: + changeId: + type: string + description: Provided if the changeId was included in the original request. + example: "change-cell-001-1" + - required: + - changeIndex + properties: + changeIndex: + type: integer + description: Location index of the change. Reported only if changeId is NOT available. + example: 0 + + ConfigChangesContentType: + type: string + description: The supported configuration content types. + enum: + - YANG_BASED # confliguration format is aligned with RFC 9751 modelling specifications with some relaxed rules + - OPENAPI_BASED # confliguration format is aligned with an OpenAPI model definition + default: YANG_BASED + + CancelRequest: + type: object + properties: + cancelRequest: + type: boolean + description: Must be set to true to initiate cancellation. + # Restricts the boolean to only allow the 'true' value + enum: [true] + required: + - cancelRequest + # This ensures no other fields (like status or priority) can be sent in this specific PATCH + additionalProperties: false + ErrorDetail: type: object properties: @@ -2342,39 +2387,38 @@ components: type: string description: The type of the error enum: - - VALIDATION_ERROR - - ACTIVATION_ERROR - - RETRIEVAL_NOT_ALLOWED - - MODIFICATION_NOT_ALLOWED - - SERVER_ERROR + - SCHEMA_VALIDATION_ERROR + - DATA_NODE_TREE_ERROR + - MODIFICATION_NOT_ALLOWED + - ACCESS_CONTROL_CONFLICT - APPLICATION_LAYER_ERROR + - SERVER_ERROR + - OTHER reason: type: string enum: - - DATA_NODE_NAME_INVALID - - DATA_NODE_EXIST - - DATA_NODE_NOT_FOUND - - DATA_NODE_PARENT_NOT_FOUND - - VALUE_INVALID - - MODIFICATION_NOT_ALLOWED - - DATA_NODE_NOT_WRITABLE - - DATA_NODE_INVARIANT - - DATA_NODE_CREATION_NOT_ALLOWED - - DATA_NODE_DELETION_NOT_ALLOWED - - DATA_NODE_CARDINALITY_INVALID - - ATTRIBUTE_INVARIANT - - ATTRIBUTE_NOT_FOUND - - UNKNOWN_OPERATION + - NEW_DATA_NODE_NAME_INVALID + - NEW_DATA_NODE_VALUE_INVALID + - NEW_DATA_NODE_CONTAINMENT_INVALID + - FINAL_DATA_NODE_VALUE_INVALID + - FINAL_DATA_NODE_UNIQUENESS_INVALID + - FINAL_DATA_NODE_MULTIPLICITY_INVALID + - FINAL_DATA_NODE_CARDINALITY_INVALID + - TARGET_DATA_NODE_NOT_FOUND + - TARGET_DATA_NODE_PARENT_NOT_FOUND + - TARGET_DATA_NODE_FOUND + - TARGET_DATA_NODE_NOT_WRITABLE + - TARGET_DATA_NODE_INVARIANT + - TARGET_DATA_NODE_CREATION_NOT_ALLOWED + - TARGET_DATA_NODE_DELETION_NOT_ALLOWED - ACCESS_DENIED - - ATTRIBUTE_INDEX_BAD - - REQUEST_OBJECT_TREE_MISMATCH - OTHER - example: "ACCESS_DENIED" + example: "NEW_DATA_NODE_CONTAINMENT_INVALID" detail: type: string description: A human-readable explanation specific to this occurrence of the problem. example: "NRCellDU=1234 already exists in the network" - path: + badDataNode: type: string example: "/_3gpp-common-subnetwork:SubNetwork=Irl/_3gpp-common-mecontext:MeContext=Dublin-1" errorInfo : @@ -2383,89 +2427,7 @@ components: additionalProperties: true required: - type - - # Use oneOf and discriminator to define the mapping - oneOf: - # Define a specific schema for each 'type' enum value - - $ref: '#/components/schemas/ValidationErrorDetails' - - $ref: '#/components/schemas/ActivationErrorDetails' - - $ref: '#/components/schemas/RetrievalNotAllowedDetails' - - $ref: '#/components/schemas/ModificationNotAllowedDetails' - - $ref: '#/components/schemas/ServerErrorDetails' - - $ref: '#/components/schemas/ApplicationLayerErrorDetails' - # Add other specific error types here - - - discriminator: - propertyName: type # This is the property that determines which oneOf schema applies - mapping: - VALIDATION_ERROR: '#/components/schemas/ValidationErrorDetails' - ACTIVATION_ERROR: '#/components/schemas/ActivationErrorDetails' - RETRIEVAL_NOT_ALLOWED: '#/components/schemas/RetrievalNotAllowedDetails' - MODIFICATION_NOT_ALLOWED: '#/components/schemas/ModificationNotAllowedDetails' - SERVER_ERROR: '#/components/schemas/ServerErrorDetails' - APPLICATION_LAYER_ERROR: '#/components/schemas/ApplicationLayerErrorDetails' - - # Individual schemas for each specific error type - ValidationErrorDetails: - type: object - properties: - type: - type: string - enum: [VALIDATION_ERROR] - title: - type: string - enum: ["Validation Error"] - - ActivationErrorDetails: - type: object - properties: - type: - type: string - enum: [ACTIVATION_ERROR] - title: - type: string - enum: ["Activation Error"] - - RetrievalNotAllowedDetails: - type: object - properties: - type: - type: string - enum: [RETRIEVAL_NOT_ALLOWED] - title: - type: string - enum: ["Retrieval Not Allowed"] - - ModificationNotAllowedDetails: - type: object - properties: - type: - type: string - enum: [MODIFICATION_NOT_ALLOWED] - title: - type: string - enum: ["Modification Not Allowed"] - - ServerErrorDetails: - type: object - properties: - type: - type: string - enum: [SERVER_ERROR] - title: - type: string - enum: ["Service Error"] - - ApplicationLayerErrorDetails: - type: object - properties: - type: - type: string - enum: [APPLICATION_LAYER_ERROR] - title: - type: string - enum: ["Application Layer Error"] + - badDataNode LinkObject: type: object @@ -2515,32 +2477,4 @@ components: href: "{root-url}/help-service/v1/topics/plan-descriptors" templated: true type: "application/json" - title: "online help for the plan descriptor" - - examples: - # Reusable Configuration Change Examples - AddNrCellChange: - summary: Add a new NR Cell (create operation) - value: - modifyOperator: create - changeId: add-nr-cell-001 - description: Add new NR cell for initial deployment in Dublin-1 area. - target: /_3gpp-common-subnetwork:SubNetwork=Irl/_3gpp-common-mecontext:MeContext=Dublin-1/_3gpp_nrm_managedelement:ManagedElement=1/_3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1/_3gpp_nrm_nrcelldu:NRCellDU=4 - value: - ... - UpdateNrCellChange: - summary: Update an existing NR Cell (merge operation) - value: - modifyOperator: merge - changeId: update-nr-cell-002 - description: Update administrativeState for existing NRCellDU=1. - target: /_3gpp-common-subnetwork:SubNetwork=North/_3gpp-common-mecontext:MeContext=Dublin-1/_3gpp_nrm_managedelement:ManagedElement=ENB-A/_3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1/_3gpp_nrm_nrcelldu:NRCellDU=1 - value: - ... - RemoveNrCellChange: - summary: Remove an NR Cell (delete operation) - value: - modifyOperator: delete - changeId: remove-nr-cell-003 - description: Decommission NRCellDU=3. - target: /_3gpp-common-subnetwork:SubNetwork=Irl/_3gpp-common-mecontext:MeContext=Dublin-1/_3gpp_nrm_managedelement:ManagedElement=1/_3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1/_3gpp_nrm_nrcelldu:NRCellDU=3 \ No newline at end of file + title: "online help for the plan descriptor" \ No newline at end of file -- GitLab From cc16219140f60ceb3a1410d052e1e6095664b3f8 Mon Sep 17 00:00:00 2001 From: lengyelb Date: Fri, 30 Jan 2026 13:31:07 +0100 Subject: [PATCH 2/3] Edit TS28572_PlanManagement.yaml Remove multipart add target --- OpenAPI/TS28572_PlanManagement.yaml | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/OpenAPI/TS28572_PlanManagement.yaml b/OpenAPI/TS28572_PlanManagement.yaml index 3ace7b50..373d98c0 100644 --- a/OpenAPI/TS28572_PlanManagement.yaml +++ b/OpenAPI/TS28572_PlanManagement.yaml @@ -49,22 +49,6 @@ paths: attributes: userLabel: "Dublin-1-Cell-4" administrativeState: "UNLOCKED" - multipart/form-data: - schema: - type: object - properties: - name: - type: string - description: name of the plan (metadata). - example: "Rollout-5G-Dublin-East" - version: - type: string - description: version of the plan (metadata). - example: "1.0.0" - file: - type: string - format: binary - description: The file containing the planDescriptor information. responses: '201': description: Plan descriptor created successfully @@ -2337,8 +2321,13 @@ components: properties: planConfigDescrId: type: string + description: The plan configuration descriptor Id. + target: + description: The path of the target change resource. + type: string required: - planConfigDescrId + - target oneOf: - required: - changeId -- GitLab From 9b183663e12197a374849ef73c206a054960357b Mon Sep 17 00:00:00 2001 From: lengyelb Date: Mon, 9 Feb 2026 11:55:59 +0100 Subject: [PATCH 3/3] Edit TS28572_PlanManagement.yaml correction according to Kieran TS28572_PlanManagement601pm.yaml --- OpenAPI/TS28572_PlanManagement.yaml | 67 +++++++++++++---------------- 1 file changed, 29 insertions(+), 38 deletions(-) diff --git a/OpenAPI/TS28572_PlanManagement.yaml b/OpenAPI/TS28572_PlanManagement.yaml index 373d98c0..217de315 100644 --- a/OpenAPI/TS28572_PlanManagement.yaml +++ b/OpenAPI/TS28572_PlanManagement.yaml @@ -16,6 +16,7 @@ servers: description: Version number of the OpenAPI definition default: v1 +# Note the examples are demonstrative only and may not all contain all required attributes for the given MO types. paths: /plan-descriptors: post: @@ -48,7 +49,7 @@ paths: - id: '4' attributes: userLabel: "Dublin-1-Cell-4" - administrativeState: "UNLOCKED" + ssbDuration: 2 responses: '201': description: Plan descriptor created successfully @@ -62,7 +63,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PlanConfigurationDescriptor' + $ref: '#/components/schemas/PlanConfigurationDescriptorResponse' '400': description: Invalid request parameters or malformed input. content: @@ -165,7 +166,7 @@ paths: "changeId": "Dublin-Center_DC-01_555777999", "target": "/SubNetwork=Dublin-Center/ManagedElement=DC-001/NRCellDU=1", "value": { - "administrativeState": "LOCKED" + "ssbDuration": 2 } } ] @@ -1613,7 +1614,7 @@ components: "changeId": "Dublin-Center_DC-01_555777999", "target": "/SubNetwork=Dublin-Center/ManagedElement=DC-001/NRCellDU=1", "value": { - "administrativeState": "LOCKED" + "ssbDuration": 2 } } ] @@ -1730,7 +1731,7 @@ components: "changeId": "Dublin-Center_DC-01_555777999", "target": "/SubNetwork=Dublin-Center/ManagedElement=DC-001/NRCellDU=1", "value": { - "administrativeState": "LOCKED" + "ssbDuration": 2 } } ] @@ -1782,7 +1783,7 @@ components: "changeId": "Dublin-Center_DC-01_555777999", "target": "/SubNetwork=Dublin-Center/ManagedElement=DC-001/NRCellDU=1", "value": { - "administrativeState": "LOCKED" + "ssbDuration": 2 } } ] @@ -1863,9 +1864,7 @@ components: description: Target data node path example: "/_3gpp-common-subnetwork:SubNetwork=Irl/3gpp-common-mecontext:MeContext=Dublin-1/_3gpp_nrm_managedelement:ManagedElement=1/_3gpp_nrm_nrcelldu:NRCellDU=4" changeId: - description: Unique identifier for this change. Its value must be unique in any list of changes in a PlanDescriptor. - MnSProducer may ignore this property even if provided in favour of an auto-positional array index matching this configChange array entry. - If not provided the response will default to changeIndex + description: The identifier of the operation. It may or may not be provided If provided, it shall be unique within an instance of "configChanges" and it shall be provided for all changes in "configChanges". example: "cell-operation-001" value: type: object @@ -1896,25 +1895,10 @@ components: type: object additionalProperties: true # Allows any nested properties within 'value' description: Value to apply (for create/merge/merge-create operations) - oneOf: - - required: [changeId] - properties: - changeId: - type: string - description: | - Unique identifier for this change as originally provided in the request. - The MnS Producer may ignore it and use positional index instead. - If not present in the request, the response will use `changeIndex`. - example: "cell-operation-001" - - - required: [changeIndex] - properties: - changeIndex: - type: integer - description: | - Zero-based index of this change in the original `configChanges` array. - Used when no `changeId` was provided or when the producer prefers positional addressing. - example: 0 + changeId: + type: string + description: The identifier of the operation. It may or may not be provided. If provided, it shall be unique within an instance of "configChanges" and it shall be provided for all changes in "configChanges". + example: "cell-operation-001" additionalProperties: true # Allows for additional properties to be provided required: - modifyOperator @@ -2247,14 +2231,6 @@ components: type: string description : If planned configuration groups are activated, this information elements specifies the planned configuration descriptor identifier, for which error details are reported. If a planned configuration is activated or validated, this information element is absent. example: "descriptor-001" - changeId: - type: string - description: The identification of the operation. It is the identifier ("changeId") provided by the MnS consumer. Exactly one of "changeId" or "changeIndex" shall be provided. - example: "changeId-001" - changeIndex: - type: integer - description: The identification of the operation. It is the positional index of the operation in the operation set ("changeIndex"). The positional index of the leftmost element is "0". Exactly one of "changeId" or "changeIndex" shall be provided. - example: 0 state: type: string enum: [NOT_STARTED, PROCESSING, SUCCEEDED, FAILED] @@ -2271,6 +2247,21 @@ components: required: - target - state + oneOf: + - required: + - changeId + properties: + changeId: + type: string + description: The identifier of the operation. It may or may not be provided If provided, it shall be unique within an instance of "configChanges" and it shall be provided for all changes in "configChanges". + example: "change-cell-001-1" + - required: + - changeIndex + properties: + changeIndex: + type: integer + description: The identification of the operation. It is the positional index of the operation in the operation set ("changeIndex"). The positional index of the leftmost element is "0". Exactly one of "changeId" or "changeIndex" shall be provided. + example: 0 example: changeId: changeId-002-update-config target: /SubNetwork=1/MeContext=2/ManagedElement=3 @@ -2334,14 +2325,14 @@ components: properties: changeId: type: string - description: Provided if the changeId was included in the original request. + description: The identifier of the operation. It may or may not be provided If provided, it shall be unique within an instance of "configChanges" and it shall be provided for all changes in "configChanges". example: "change-cell-001-1" - required: - changeIndex properties: changeIndex: type: integer - description: Location index of the change. Reported only if changeId is NOT available. + description: The identification of the operation. It is the positional index of the operation in the operation set ("changeIndex"). The positional index of the leftmost element is "0". Exactly one of "changeId" or "changeIndex" shall be provided. example: 0 ConfigChangesContentType: -- GitLab