From a68986c713623ebefc5e38e5f8c59741563798d9 Mon Sep 17 00:00:00 2001 From: lengyelb Date: Thu, 2 Oct 2025 21:20:04 +0200 Subject: [PATCH] Update TS28572_PlanManagement.yaml for SA5#163 --- OpenAPI/TS28572_PlanManagement.yaml | 1496 +++++++++++++-------------- 1 file changed, 720 insertions(+), 776 deletions(-) diff --git a/OpenAPI/TS28572_PlanManagement.yaml b/OpenAPI/TS28572_PlanManagement.yaml index 3d33a9a65..a78fb9a96 100644 --- a/OpenAPI/TS28572_PlanManagement.yaml +++ b/OpenAPI/TS28572_PlanManagement.yaml @@ -7,11 +7,11 @@ externalDocs: description: 3GPP TS 28.572; Generic management services url: http://www.3gpp.org/ftp/Specs/archive/28_series/28.572/ servers: - - url: '{MnSRoot}/ProvPlanMnS/{MnSVersion}' + - url: '{MnSRoot}/plan-management/{MnSVersion}' variables: MnSRoot: description: See clause 4.4.2 of TS 32.158 - default: http://example.com/PlanManagement + default: http://example.com/cm MnSVersion: description: Version number of the OpenAPI definition default: v1 @@ -31,20 +31,42 @@ paths: schema: $ref: '#/components/schemas/PlanConfigurationDescriptor' example: - { - "name": "Rollout-5G-Dublin-East", - "version" : "1.0.0", - "description": "This is the plan for the new 5G rollout in Dublin east.", - "customProperties": { - "technology-type": "NR", - "location": "Dublin" - }, - "currentConfigAddress": "http://example.org/3gpp/ProvMnS/v1", - "configurationContentType" : "application/vnd.3gpp.yang-patch+json", - "planConfig": { - ... - } - } + name: "Rollout-5G-Dublin-East" + version: "1.0.0" + description: "This is the plan for the new 5G rollout in Dublin east." + customProperties: + technology-type: "NR" + location: "Dublin" + configChangesContentType: "YANG" + 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 + multipart/form-data: + schema: + type: object + properties: + name: + type: string + description: name of the plan (metadata). + example: + name: "Rollout-5G-Dublin-East" + version: + type: string + description: version of the plan (metadata). + example: + version: "1.0.0" + file: + type: string + format: binary + description: The file containing the planDescriptor information. responses: '201': description: Plan descriptor created successfully @@ -90,9 +112,10 @@ paths: content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/DescriptorListEntry' + type: object # <-- Response body is an object + properties: + items: # <-- The array is nested inside the 'items' property + $ref: '#/components/schemas/DescriptorListEntry' '500': description: Internal server error. content: @@ -155,8 +178,7 @@ paths: "technology-type": "NR", "location": "Dublin" }, - "currentConfigAddress": "http://example.org/3gpp/ProvMnS/v1", - "planConfig": { + "configChanges": { ... } } @@ -263,9 +285,10 @@ paths: content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/DescriptorListEntry' + type: object # <-- Response body is an object + properties: + items: # <-- The array is nested inside the 'items' property + $ref: '#/components/schemas/DescriptorListEntry' '500': description: Internal server error. content: @@ -397,9 +420,10 @@ paths: content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/DescriptorListEntry' + type: object # <-- Response body is an object + properties: + items: # <-- The array is nested inside the 'items' property + $ref: '#/components/schemas/DescriptorListEntry' '500': description: Internal server error. content: @@ -407,7 +431,7 @@ paths: schema: $ref: '#/components/schemas/ErrorDetail' - /fallback-descriptor/{id}: + /fallback-descriptors/{id}: parameters: - in: path name: id @@ -521,9 +545,10 @@ paths: content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/DescriptorListEntry' + type: object # <-- Response body is an object + properties: + items: # <-- The array is nested inside the 'items' property + $ref: '#/components/schemas/DescriptorListEntry' /trigger-descriptors/{id}: parameters: @@ -616,7 +641,7 @@ paths: schema: $ref: '#/components/schemas/ErrorDetail' - /activation-jobs: + /plan-activation-jobs: post: tags: - Activation Management @@ -639,11 +664,11 @@ paths: schema: type: string format: uri-reference - example: "/activation-jobs/myjob-111" + example: "/plan-activation-jobs/myjob-111" content: application/json: schema: - $ref: '#/components/schemas/ActivationJob' + $ref: '#/components/schemas/ActivationJobResponse' '400': description: Invalid request payload or parameters (e.g., malformed JSON, missing required fields). content: @@ -692,7 +717,7 @@ paths: schema: $ref: '#/components/schemas/ErrorDetail' - /activation-jobs/{id}: + /plan-activation-jobs/{id}: parameters: - $ref: '#/components/parameters/jobId' get: @@ -707,7 +732,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ActivationJob' + $ref: '#/components/schemas/ActivationJobResponse' '404': description: Job not found. content: @@ -749,15 +774,15 @@ paths: schema: $ref: '#/components/schemas/ErrorDetail' - /activation-jobs/{id}/status: - parameters: - - $ref: '#/components/parameters/jobId' + /plan-activation-jobs/{id}/status: get: tags: - Activation Management summary: Get job status description: Retrieve the current status of a specific plan activation job using its unique identifier. operationId: getJobStatus + parameters: + - $ref: '#/components/parameters/jobId' responses: '200': description: Job status retrieved successfully. @@ -777,18 +802,39 @@ paths: application/problem+json: schema: $ref: '#/components/schemas/ErrorDetail' - patch: + + /plan-activation-jobs/{id}/activation-details: + get: + tags: + - Activation Management + summary: Get activation details + description: Retrieve detailed information about the activation results of a job + operationId: getActivationDetails + parameters: + - $ref: '#/components/parameters/jobId' + responses: + '200': + description: Activation details retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ExecutionDetails' + '404': + description: Job not found + content: + application/problem+json: + 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 - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/CancelRequest' responses: '200': description: Job cancel request was successfully completed @@ -813,30 +859,7 @@ paths: schema: $ref: '#/components/schemas/ErrorDetail' - /activation-jobs/{id}/activation-details: - get: - tags: - - Activation Management - summary: Get activation details - description: Retrieve detailed information about the activation results of a job - operationId: getActivationDetails - parameters: - - $ref: '#/components/parameters/jobId' - responses: - '200': - description: Activation details retrieved successfully - content: - application/json: - schema: - $ref: '#/components/schemas/ExecutionDetails' - '404': - description: Job not found - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ErrorDetail' - - /validation-jobs: + /plan-validation-jobs: post: tags: - Validation Management @@ -863,7 +886,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ValidationJob' + $ref: '#/components/schemas/ValidationJobResponse' '400': description: Invalid request payload or parameters (e.g., malformed JSON, missing required fields). content: @@ -888,17 +911,23 @@ paths: name: job-state schema: $ref: '#/components/schemas/JobState' - description: Filter jobs by their current status. - example: "RUNNING" + description: Filter jobs by their current state. + example: "COMPLETED" # Example state for validation jobs responses: '200': - description: List of plan validation jobs retrieved successfully. + description: List of plan validation jobs retrieved successfully. content: application/json: schema: type: array items: - $ref: '#/components/schemas/JobListEntry' + $ref: '#/components/schemas/JobListEntry' + '400': + description: Invalid query parameters + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ErrorDetail' '500': description: Internal server error. content: @@ -906,7 +935,7 @@ paths: schema: $ref: '#/components/schemas/ErrorDetail' - /validation-jobs/{id}: + /plan-validation-jobs/{id}: parameters: - $ref: '#/components/parameters/jobId' get: @@ -921,7 +950,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ValidationJob' + $ref: '#/components/schemas/ValidationJobResponse' '404': description: Job not found. content: @@ -957,7 +986,7 @@ paths: schema: $ref: '#/components/schemas/ErrorDetail' - /validation-jobs/{id}/status: + /plan-validation-jobs/{id}/status: get: tags: - Validation Management @@ -985,43 +1014,8 @@ paths: application/problem+json: schema: $ref: '#/components/schemas/ErrorDetail' - patch: - tags: - - Activation Management - summary: Cancel the validation job - description: Cancel the validation job - operationId: cancelActivationJobById - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/CancelRequest' - 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' - /validation-jobs/{id}/validation-details: + /plan-validation-jobs/{id}/validation-details: get: tags: - Validation Management @@ -1051,7 +1045,7 @@ paths: schema: $ref: '#/components/schemas/ErrorDetail' - /validation-jobs/{id}/cancel-request: + /plan-validation-jobs/{id}/cancel-request: parameters: - $ref: '#/components/parameters/jobId' put: @@ -1105,20 +1099,78 @@ components: schemas: + PlanConfigurationDescriptor: type: object required: - - configurationContentType - - planConfig + - configChanges + allOf: + - $ref: '#/components/schemas/PlanConfigurationDescriptorCommonProperties' + properties: + configChanges: + description: "The plan configuration changes" + type: array + items: + $ref: '#/components/schemas/ConfigChange' + + 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: + type: object + required: + - configChangesContentType properties: id: type: string description: Unique id of the plan configuration descriptor - example: "plan-001" + example: plan-001 name: type: string description: Descriptive name of the plan group configuration descriptor - example: "Rollout-5G-Dublin-East" + example: Rollout-5G-Dublin-East version: type: string description: The version of the planned configuration. Its format is implementation specific. @@ -1126,7 +1178,7 @@ components: description: type: string description: Used to describe the purpose of the plan configuration - example: "This is the plan for the new 5G rollout in Dublin east." + example: This is the plan for the new 5G rollout in Dublin east. customProperties: type: object description: A dynamic set of custom properties provided by client @@ -1134,73 +1186,21 @@ components: example: technology-type: NR location: Dublin - currentConfigAddress: - type: string - format: uri-reference - description: A reference address to the current configuration associated with the configuration in this descriptor - example: "http://example.org/3gpp/ProvMnS/v1" activationMode: type: string enum: [ATOMIC, BEST_EFFORT, STOP_ON_ERROR] - default : "BEST_EFFORT" + default : BEST_EFFORT description: Specifies the execution behavior when the plan is activated - example: "BEST_EFFORT" - lastModifiedAt: - type: string - format: date-time - description: the last time the plan was modified - example: "2025-03-06T16:50:26-08:00" - validationState: - type: string - enum: [NOT_VALIDATED, VALIDATING, VALID, INVALID] - default : "NOT_VALIDATED" - description: The validation state of the plan. - example: "NOT_VALIDATED" - lastValidatedAt: - type: string - format: date-time - description: last time the plan was validated - example: "2025-03-06T16:50:29-08:00" - configurationContentType: + example: BEST_EFFORT + configChangesContentType: type: string enum: - - application/vnd.3gpp.json-patch+json - - application/vnd.3gpp.yang-patch+json + - YANG + - OPENAPI + default: YANG description: The format/type of the configuration in planConfig - example: "application/vnd.3gpp.yang-patch+json" - planConfig: - description: "The plan configuration changes" - oneOf: - - type: array - items: - $ref: '#/components/schemas/Change' - - type: object - additionalProperties: - $ref: '#/components/schemas/Change' - description: A map of changes. The key of the map shall have the same value as the changeId. - PlanConfigurationDescriptorResponse: - type: object - required: - - id - - activationMode - - lastModifiedAt - - validationState - - configurationContentType - - planConfig - allOf: - - $ref: '#/components/schemas/PlanConfigurationDescriptor' - properties: - _links: - type: object - description: Hypermedia links for plan descriptor - allOf: - - $ref: '#/components/schemas/SelfLink' - example: - self: - href: "{root-url}/ProvMnS/v1/plan-descriptors/pd-001" - templated: true - type: "application/json" - title: "The newly created PlanConfigurationDescriptor" + example: YANG + PlanConfigurationGroupDescriptor: type: object @@ -1240,17 +1240,17 @@ components: default : "BEST_EFFORT" description: Specifies the execution behavior when the plan configuration group is activated example: "BEST_EFFORT" - lastModifiedAt: - type: string - format: date-time - description: the last time the plan was modified - example: "2025-03-06T16:50:26-08:00" validationState: type: string enum: [NOT_VALIDATED, VALIDATING, VALID, INVALID] default : "NOT_VALIDATED" description: The validation state for the last time plan configuration group was validated 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 @@ -1260,42 +1260,92 @@ components: type: array description: list of plan or plan group descriptor identifiers items: - type: object - required: - - identifier - properties: - type: - type: string - enum: [PLAN, PLAN_GROUP] - default: PLAN - identifier: - type: string - example: [{"type" : "PLAN", "identifier" : "plan-descriptor-001"}, {"type" : "PLAN_GROUP", "identifier" : "plan-group-descriptor-001"}] - - FallbackConfigurationDescriptor: + $ref: '#/components/schemas/Member' + example: + - planConfigDescrId: pcd-network-101 + - planConfigGroupDescrId: pgc-europe-east-group + - planConfigDescrId: pcd-radio-tuning-005 + - planConfigGroupDescrId: pgc-5g-core-rollout + + PlanConfigurationGroupDescriptorResponse: type: object required: - - configurationContentType - - planConfig - properties: - id: - type: string - description: Unique id of the fallback configuration descriptor - example: "fallback-001" - name: - 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." - customProperties: - type: object + - 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" + + + 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. + 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 ] + + FallbackConfigurationDescriptor: + type: object + required: + - configChangesContentType + - configChanges + properties: + id: + type: string + description: Unique id of the fallback configuration descriptor + example: "fallback-001" + name: + 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." + customProperties: + type: object description: A dynamic set of custom properties provided by client additionalProperties: true example: @@ -1307,24 +1357,26 @@ components: configurationContentType: type: string enum: - - application/vnd.3gpp.json-patch+json - - application/vnd.3gpp.yang-patch+json - description: The format/type of the configuration in planConfig - example: "application/vnd.3gpp.yang-patch+json" - planConfig: - description: "The fallback configuration." + - 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/Change' + $ref: '#/components/schemas/ConfigChange' description: A map of changes. The key of the map shall have the same value as the changeId. + + FallbackConfigurationDescriptorResponse: type: object required: - id - configurationContentType - - planConfig + - fallbackConfig allOf: - $ref: '#/components/schemas/FallbackConfigurationDescriptor' properties: @@ -1335,33 +1387,10 @@ components: - $ref: '#/components/schemas/SelfLink' example: self: - href: "{root-url}/ProvMnS/v1/fallback-descriptors/pd-001" + href: "{root-url}/plan-management/v1/fallback-descriptors/pd-001" templated: true type: "application/json" - title: "The newly created FallbackConfigurationDescriptor" - 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}/ProvMnS/v1/plan-group-descriptors/pgd-001" - templated: true - type: "application/json" - title: "The newly created PlanConfigurationGroupDescriptor" + title: "The newly created FallbackConfigurationDescriptor" TriggerDescriptor: type: object @@ -1461,7 +1490,7 @@ components: - $ref: '#/components/schemas/SelfLink' example: self: - href: "{root-url}/ProvMnS/v1/trigger-descriptors/trigger-001" + href: "{root-url}/plan-management/v1/trigger-descriptors/trigger-001" templated: true type: "application/json" title: "The newly created TriggerDescriptor" @@ -1508,10 +1537,16 @@ components: - id - name - jobState - - ActivationJobRequest: - type: object + + ActivationJob: + type: object + allOf: + - $ref: '#/components/schemas/JobState' properties: + id: + type: string + description: id of the activation job + example: "job-id-3985199134" name: type: string description: Name of the activation job @@ -1522,9 +1557,13 @@ components: example: "Optimize the Dublin area network" mnsConsumerId: type: array - description: The user 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"] + 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 @@ -1538,6 +1577,36 @@ 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: @@ -1563,7 +1632,7 @@ components: techology-type: "NR", indoor: false } - planConfig: + configChanges: ... - type: object # Alt.3 planConfigGroupDescrId required: @@ -1590,162 +1659,146 @@ components: 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 + + ActivationJobRequest: + type: object + allOf: + - $ref: '#/components/schemas/ActivationJob' + example: + { + "name" : "5G-Dublin-East-Rollout", + "description" : "Optimize the 5G network in Dublin East", + "planConfigDescr" : { + "activationMode" : "ATOMIC", + "customProperties" : { + "technology-type": "NR", + "location": "Dublin" + }, + "configChangesContentType" : "application/vnd.3gpp.yang-patch+json", + "configChanges": { + ... + } + } + } - ActivationJob: + ActivationJobResponse: type: object required: - id - - status + - jobState + - jobDetails + - activationState + - activationDetails - isImmediateActivation - isFallbackEnabled - serviceImpact - - jobDetails - - _links - description: An object representing a plan activation job. allOf: - - type: object - properties: - id: - type: string - description: ID of the activation job. - example: "job-id-3985199134" - status: - $ref: '#/components/schemas/ActivationJobStatus' - jobDetails: - $ref: '#/components/schemas/JobDetails' - activationDetails: - allOf: - - $ref: '#/components/schemas/LinkObject' - - type: object - properties: - href: - type: string - description: A URI reference to the activation details. - example: "{apiRoot}/ProvMnS/v1/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" - mnsConsumerId: - type: array - description: The user that created and/or started the job. It may indicate a human user and/or one or more applications initiating the job. E.g. ["userid:janedoe", "appid:12314"]. - items: - type: string - _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}/ProvMnS/v1/activation-jobs/{ActivationJobId}" - title: - type: string - enum: - - "Link to the plan activation job" - method: - type: string - enum: - - "GET" - example: - href: "{apiRoot}/ProvMnS/v1/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' - - type: object - description: A URI reference to the fallback plan descriptor. - example: - href: "{apiRoot}/ProvMnS/v1/plan-descriptors/myjob-111-fallback" - templated: true - type: "application/json" - title: "A URI reference to the fallback plan descriptor" - method: "GET" - additionalProperties: - $ref: '#/components/schemas/LinkObject' - - $ref: '#/components/schemas/ActivationJobRequest' - example: - id: "myjob-111" - name: "5G-Dublin-East-Rollout" - description: "Optimize the 5G network in Dublin East" - isFallbackEnabled: true - serviceImpact: "SHORTEST_TIME" - isImmediateActivation: true - status: - jobState: "RUNNING" - startedAt: "" - activationState: "NOT_STARTED" - jobDetails: {} # Assuming this is a simple object - activationDetails: - href: "{apiRoot}/ProvMnS/v1/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" + - $ref: '#/components/schemas/ActivationJob' + properties: _links: - self: - href: "{apiRoot}/ProvMnS/1900/activation-jobs/myjob-111" - templated: true - type: "application/json" - title: "The newly created activation job" - method: "GET" - planDescriptor: - href: "{apiRoot}/ProvMnS/v1/plan-descriptors/planxyz" - templated: true - type: "application/json" - title: "plan descriptor link" - method: "GET" - status: - href: "{apiRoot}/ProvMnS/1900/activation-jobs/myjob-111/status" - templated: true - type: "application/json" - title: "activation status link" - method: "GET" - activation-details: - href: "{apiRoot}/ProvMnS/1900/activation-jobs/myjob-111/activation-details" - templated: true - type: "application/json" - title: "activation details link" - method: "GET" - cancel: - href: "{apiRoot}/ProvMnS/v1/activation-jobs/myjob-111/cancel-request" - templated: true - type: "application/json" - title: "cancel the job" - method: "PUT" - fallbackPlan: - href: "{apiRoot}/ProvMnS/v1/plan-descriptors/myfallback-plan-111" - templated: true - type: "application/json" - title: "fallback plan descriptor link" - method: "GET" - additionalProperties: true + 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" - ValidationJobRequest: + ValidationJob: type: object - required: - - _links - description: An object representing a plan activation job. + 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 @@ -1754,16 +1807,17 @@ components: type: string description: Human-readable description of the job example: "Optimize the Dublin area network" + mnsConsumerId: + type: array + 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 validationMode: type: string enum: [CONTINUE_ON_ERROR, STOP_ON_ERROR] default : "CONTINUE_ON_ERROR" description: Specifies the execution behavior when the plan is activated - mnsConsumerId: - type: array - description: The user 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 + oneOf: - type: object # Alt.1 planConfigDescrId required: @@ -1789,7 +1843,7 @@ components: techology-type: "NR", indoor: false } - planConfig: + configChanges: ... - type: object # Alt.3 planConfigGroupDescrId required: @@ -1816,187 +1870,146 @@ components: type: string description: Unique id reference to the fallback descriptor to validate example: "planxyz" + additionalProperties : true + + ValidationJobRequest: + type: object + allOf: + - $ref: '#/components/schemas/ValidationJob' example: { - name : "5G-Dublin-East-Rollout", - description : "Optimize the 5G network in Dublin East", - planConfigDescrId : "plan-descriptor-001", - } - additionalProperties : true - - ValidationJob: + "name" : "5G-Dublin-East-Rollout", + "description" : "Optimize the 5G network in Dublin East", + "planDescriptor" : { + "activationMode" : "ATOMIC", + "customProperties" : { + "technology-type": "NR", + "location": "Dublin" + }, + "configChanges": { + ... + } + } + } + + ValidationJobResponse: type: object required: - id - - status + - jobState - jobDetails + - validationState - validationDetails - - _links - allOf: - - $ref: '#/components/schemas/ValidationJobRequest' - - type: object - properties: - id: - type: string - description: id of the validation job - example: "job-id-3985199134" - status: - allOf: - - $ref: '#/components/schemas/ValidationJobStatus' - jobDetails: - allOf: - - $ref: '#/components/schemas/JobDetails' - currentConfigTime: - type: string - format: date-time - validationDetails: - allOf: - - $ref: '#/components/schemas/LinkObject' - - type: object - properties: - href: - type: string - title: A URI reference to the validation details - example: "{apiRoot}/ProvMnS/v1/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}/ProvMnS/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}/ProvMnS/v1/validation-jobs/validation-job-001" - title: "Link to the plan validation job" - type: "application/json" - templated: true - method: GET - cencel: - allOf: - - $ref: '#/components/schemas/LinkObject' # Any other link will conform to LinkObject schema - - type: object - properties: - href: - type: string - default: "{apiRoot}/ProvMnS/v1/validation-jobs/{validationJobId}/status" - title: - type: string - enum: - - "Link to the plan validation job" - method: - type: string - enum: - - "PATCH" # This means the method MUST be "GET" - example: - href: "{apiRoot}/ProvMnS/v1/validation-jobs/validation-job-001/status" - title: "Link to the cancel validation job - cancelRequest : true must be in body" - type: "application/json" - templated: true - method: PUT - - - required : - - self - - cancel - # additionalProperties to allow any other dynamic links - additionalProperties: - $ref: '#/components/schemas/LinkObject' - example: - self: - href: "{apiRoot}/ProvMnS/1900/activation-jobs/myjob-111" - templated: true - type: "application/json" - title: "The newly created activation job" - method : "GET" - planDescriptor: - href: "{apiRoot}/ProvMnS/v1/plan-descriptors/planxyz" - templated: true - type: "application/json" - title: "plan descriptor link" - method : "GET" - status: - href: "{apiRoot}/ProvMnS/1900/activation-jobs/myjob-111/status" - templated: true - type: "application/json" - title: "activation status link" - method : "GET" - cancel: - href: "{apiRoot}/ProvMnS/v1/activation-jobs/myjob-111/status" - templated: true - type: "application/json" - title: "cancel the job" - method : "PATCH" - - example: - { - id : "myjob-111", - name : "5G-Dublin-East-Rollout", - description : "Optimize the 5G network in Dublin East", - isFallbackEnabled : true, - serviceImpact : "SHORTEST_TIME", - isImmediateActivation : true, - status : { - jobState : "RUNNING", - jobDetails : {...}, - startedAt : "", - activationState : "NOT_STARTED" - }, - validationDetails : { - href: "{apiRoot}/ProvMnS/v1/activation-jobs/myjob-111/validation-details", - templated: true, - type: "application/json", - title: "The validation details of the plan configuration(s)", - method : "GET" - }, - planConfigDescrId : "plan-descriptor-001", - } - additionalProperties : true - - CancelRequest: - type: object + allOf: + - $ref: '#/components/schemas/ValidationJob' properties: cancelRequest: type: boolean - description: property to cancel the activation/validation job - example: true - - Change: + 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' + 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" + + ConfigChange: type: object properties: - changeId: + modifyOperator: type: string - description: Unique identifier for this change - example: "opId-001" - operation: - type: string - enum: [create, merge, update, delete] + enum: [create, merge, merge-create, delete] description: The operation to perform example: "create" description: @@ -2007,14 +2020,47 @@ components: 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" + 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. + If not provided the response will default to changeIndex + example: "cell-operation-001" value: type: object additionalProperties: true # Allows any nested properties within 'value' - description: Value to apply (for create/update/merge/delete operations) - additionalProperties: true # Allows for any nested properties + description: Value to apply (for create/merge/merge-create operations) + additionalProperties: true # Allows for additional properties to be provided required: - operation - target + + ConfigChangeInResponse: + description: Represents a single change operation that combines a base definition + with mutually exclusive identification methods (ID or Index). + 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 @@ -2029,7 +2075,7 @@ components: properties: href: type: string - default: "{apiRoot}/ProvMnS/v1/plan-descriptors/{planDescriptorId}" + default: "{apiRoot}/plan-management/v1/plan-descriptors/{planDescriptorId}" title: type: string enum: @@ -2039,7 +2085,7 @@ components: enum: - "GET" # This means the method MUST be "GET" example: - href: "{apiRoot}/ProvMnS/v1/plan-descriptors/plan-descriptor-001" + 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 @@ -2051,7 +2097,7 @@ components: properties: href: type: string - default: "{apiRoot}/ProvMnS/v1/activation-jobs/{jobId}/status" + default: "{apiRoot}/plan-management/v1/plan-activation-jobs/{jobId}/status" title: type: string enum: @@ -2062,7 +2108,7 @@ components: - "GET" # This means the method MUST be "GET" description: A URI reference to the status information example: - href: "{apiRoot}/ProvMnS/v1/activation-jobs/myjob-111/status" + href: "{apiRoot}/plan-management/v1/plan-activation-jobs/myjob-111/status" title: "Link to GET the job status" type: "application/json" templated: true @@ -2074,7 +2120,7 @@ components: properties: href: type: string - default: "{apiRoot}/ProvMnS/v1/plan-{job-type}-jobs/{jobId}/status" + default: "{apiRoot}/plan-management/v1/plan-{job-type}-jobs/{jobId}/cancel-request" title: type: string enum: @@ -2082,14 +2128,14 @@ components: method: type: string enum: - - "PATCH" # This means the method MUST be "PATCH" + - "PUT" # This means the method MUST be "PUT" description: A URI reference to cancel the job example: - href: "{apiRoot}/ProvMnS/v1/activation-jobs/myjob-111/status" + 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: PATCH + method: POST JobState: type: string @@ -2098,8 +2144,12 @@ components: JobDetails: properties: - jobInformation: + message: type: string + errors: + type: array + items: + $ref: '#/components/schemas/ErrorDetail' additionalProperties: true ActivationJobStatus: @@ -2156,16 +2206,17 @@ components: type: array items: $ref: '#/components/schemas/ChangeStatus' + memberConflicts: + type: array + items: + $ref: '#/components/schemas/MemberConflict' summary: $ref: '#/components/schemas/SummaryStatus' example: { "results": { ...}, - "summary" : { - "unprocessed": 0, - "succeeded": 2, - "failed": 3 - } + "memberConflicts": { ...}, + "summary" : {...} } ValidationState: @@ -2181,6 +2232,10 @@ components: ChangeStatus: type: object properties: + planConfigDescrId: + type: string + description : The schange status may optionally include the planDescriptor Id + example: "descriptor-001" changeId: type: string example: "changeId-001" @@ -2196,12 +2251,8 @@ components: type: array items: $ref: '#/components/schemas/ErrorDetail' - conflicts: - type: array - items: - $ref: '#/components/schemas/Conflict' required: - - changeId # either the changeId from the plan or the array index in the array of Change; + - changeId # either the chanId or the array index in the array of ChangeBaseProperties; - target - state example: @@ -2237,74 +2288,48 @@ components: rollbackFailed: type: integer example: 0 + conflicting: + type: integer + example: 0 - Conflict: + MemberConflict: type: object - allOf: - - $ref: '#/components/schemas/Change' properties: - planDescriptorId: - type: string - change: - $ref: '#/components/schemas/Change' - conflictingChanges: + memberConflict : type: array items: - $ref: '#/components/schemas/ConflictingChange' - example: - { - "planDescriptorId" : "plan-descriptor-001", - "changeId": "optimization-change-A", - "operation": "merge", - "target": "/_3gpp-common-subnetwork:SubNetwork=HQ/NRCellDU=cell-22", - "value" : { - "attributes" : { - "some-attribute-name-a" : "some-attribute-value-b" - } - }, - "conflictingChanges": [ - { - "planDescriptorId": "plan-emergency-fix", - "change": { - "changeId": "fix-power-issue-X", - "operation": "merge", - "target": "/_3gpp-common-subnetwork:SubNetwork=HQ/NRCellDU=cell-22", - "value" : { - "attributes" : { - "some-attribute-name-x" : "some-attribute-value-y" - } - }, - }, - "conflictType": "VALUE_OVERWRITE", - "conflictMessage": "This change attempts to set 'transmitPower' to 45, but 'fix-power-issue-X' from 'plan-emergency-fix' sets it to 40. Only one value can persist.", - "severity": "HIGH" - } - ] - } + $ref: '#/components/schemas/MemberOp' - ConflictingChange: + MemberOp: type: object properties: - planDescriptorId: - type: string - change: - $ref: '#/components/schemas/Change' - conflictType: - type: string - conflictMessage: + planConfigDescrId: type: string - severity: + changeId: type: string - enum: - - LOW - - MEDIUM - - HIGH - - UNKNOWN - default: UNKNOWN + 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: - - change - - conflictType - - severity + - planDescriptorId ErrorDetail: type: object @@ -2313,70 +2338,38 @@ components: type: string description: A short, human-readable summary of the problem type example: "Data already exists; cannot be created" - status: - type: integer - format: int32 - enum: - - 400 - - 403 - - 404 - - 405 - - 406 - - 408 - - 410 - - 411 - - 413 - - 414 - - 415 - - 422 - - 426 - - 429 - - 451 type: type: string description: The type of the error enum: - VALIDATION_ERROR - - REQUEST_OBJECT_TREE_MISMATCH - - IE_NOT_FOUND - - MODIFICATION_NOT_ALLOWED + - ACTIVATION_ERROR - RETRIEVAL_NOT_ALLOWED - - SERVER_LIMITATION - - SERVICE_DISABLED + - MODIFICATION_NOT_ALLOWED + - SERVER_ERROR - APPLICATION_LAYER_ERROR reason: type: string enum: - - RESPONSE_TOO_LARGE - - NO_DATA_ACCESS - - QUERY_MALFORMED - - QUERY_PARAM_NAMES_INVALID - - QUERY_PARAM_VALUES_INVALID - - QUERY_PARAMS_MISSING - - QUERY_PARAMS_INCONSISTENT - - ATTRIBUTES_NOT_READABLE - - QUERY_PARAMS_TOO_COMPLEX - - NEW_ATTRIBUTE_VALUE_INVALID - - NEW_ATTRIBUTE_NAME_INVALID - - ATTRIBUTE_NOT_WRITABLE + - 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 - - OBJECT_CREATION_NOT_ALLOWED - - OBJECT_DELETION_NOT_ALLOWED - - NEW_OBJECT_CLASS_NAME_INVALID - - NEW_OBJECT_REPRESENTATION_INVALID - - NEW_OBJECT_CONTAINMENT_INVALID - - NEW_OBJECTS_ID_EXISTS - - NEW_OBJECTS_PARENT_NOT_FOUND - - NEW_OBJECT_ATTRIBUTE_VALUE_MISSING - - OBJECTS_CARDINALITY_INVALID - - OBJECT_NOT_A_LEAF - - OBJECT_NOT_FOUND - - OP_UNKNOWN - - RESOURCE_LOCKED - - SERVICE_LOCKED - - UNKNOWN - example: "UNKNOWN" + - UNKNOWN_OPERATION + - ACCESS_DENIED + - ATTRIBUTE_INDEX_BAD + - REQUEST_OBJECT_TREE_MISMATCH + - OTHER + example: "ACCESS_DENIED" detail: type: string description: A human-readable explanation specific to this occurrence of the problem. @@ -2390,32 +2383,27 @@ components: additionalProperties: true required: - type - - title - - status # 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/RequestObjectTreeMismatchDetails' - - $ref: '#/components/schemas/IENotFoundDetails' - - $ref: '#/components/schemas/ModificationNotAllowedDetails' + - $ref: '#/components/schemas/ActivationErrorDetails' - $ref: '#/components/schemas/RetrievalNotAllowedDetails' - - $ref: '#/components/schemas/ServerLimitationDetails' - - $ref: '#/components/schemas/ServiceDisabledDetails' + - $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' - REQUEST_OBJECT_TREE_MISMATCH: '#/components/schemas/RequestObjectTreeMismatchDetails' - IE_NOT_FOUND: '#/components/schemas/IENotFoundDetails' - MODIFICATION_NOT_ALLOWED: '#/components/schemas/ModificationNotAllowedDetails' + ACTIVATION_ERROR: '#/components/schemas/ActivationErrorDetails' RETRIEVAL_NOT_ALLOWED: '#/components/schemas/RetrievalNotAllowedDetails' - SERVER_LIMITATION: '#/components/schemas/ServerLimitationDetails' - SERVICE_DISABLED: '#/components/schemas/ServiceDisabledDetails' + MODIFICATION_NOT_ALLOWED: '#/components/schemas/ModificationNotAllowedDetails' + SERVER_ERROR: '#/components/schemas/ServerErrorDetails' APPLICATION_LAYER_ERROR: '#/components/schemas/ApplicationLayerErrorDetails' # Individual schemas for each specific error type @@ -2428,48 +2416,16 @@ components: title: type: string enum: ["Validation Error"] - status: - type: integer - enum: [400] - - RequestObjectTreeMismatchDetails: - type: object - properties: - type: - type: string - enum: [REQUEST_OBJECT_TREE_MISMATCH] - title: - type: string - enum: ["Request Object Tree Mismatch"] - status: - type: integer - enum: [422] - IENotFoundDetails: + ActivationErrorDetails: type: object properties: type: type: string - enum: [IE_NOT_FOUND] + enum: [ACTIVATION_ERROR] title: type: string - enum: ["Information Element Not Found"] - status: - type: integer - enum: [400] - - ModificationNotAllowedDetails: - type: object - properties: - type: - type: string - enum: [MODIFICATION_NOT_ALLOWED] - title: - type: string - enum: ["Modification Not Allowed"] - status: - type: integer - enum: [403] + enum: ["Activation Error"] RetrievalNotAllowedDetails: type: object @@ -2480,35 +2436,26 @@ components: title: type: string enum: ["Retrieval Not Allowed"] - status: - type: integer - enum: [403] - ServerLimitationDetails: + ModificationNotAllowedDetails: type: object properties: type: type: string - enum: [SERVER_LIMITATION] + enum: [MODIFICATION_NOT_ALLOWED] title: type: string - enum: ["Server Limitation"] - status: - type: integer - enum: [500] + enum: ["Modification Not Allowed"] - ServiceDisabledDetails: + ServerErrorDetails: type: object properties: type: type: string - enum: [SERVICE_DISABLED] + enum: [SERVER_ERROR] title: type: string - enum: ["Service Disabled"] - status: - type: integer - enum: [503] + enum: ["Service Error"] ApplicationLayerErrorDetails: type: object @@ -2519,9 +2466,6 @@ components: title: type: string enum: ["Application Layer Error"] - status: - type: integer - enum: [500] LinkObject: type: object @@ -2563,7 +2507,7 @@ components: - self example: # demonstrates a typical _links object in an actual response self: - href: "{root-url}/ProvMnS/v1/plan-descriptors/pd-001" + href: "{root-url}/plan-management/v1/plan-descriptors/pd-001" templated: true type: "application/json" title: "The newly created PlanConfigurationDescriptor" @@ -2578,7 +2522,7 @@ components: AddNrCellChange: summary: Add a new NR Cell (create operation) value: - operation: create + 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 @@ -2587,16 +2531,16 @@ components: UpdateNrCellChange: summary: Update an existing NR Cell (merge operation) value: - operation: update + 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 (remove operation) + summary: Remove an NR Cell (delete operation) value: - operation: delete + 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 -- GitLab