From 7406eb1ebe7cd4f9b375cb28f02240d1e904b979 Mon Sep 17 00:00:00 2001 From: "sunil.n" Date: Wed, 26 Nov 2025 14:17:34 +0530 Subject: [PATCH] Add RAN NSSMF Simulator CSAR Package Change-Id: Ib18dcdd227ce7b3db01229133b47466da001f2f0 Signed-off-by: sunil.n --- .../rapp-ran-nssmf-simulator/README.md | 61 ++++++- .../ran-nssmf-simulator-rapp/Definitions/asd.yaml | 30 ++++ .../Definitions/asd_types.yaml | 72 ++++++++ .../Files/Acm/definition/compositions.json | 189 +++++++++++++++++++++ .../Files/Acm/instances/k8s-instance.json | 35 ++++ .../Files/Sme/providers/provider-function-1.json | 20 +++ .../Files/Sme/serviceapis/api-set-1.json | 35 ++++ .../TOSCA-Metadata/TOSCA.meta | 5 + .../ran-nssmf-simulator-rapp/asd.mf | 15 ++ 9 files changed, 457 insertions(+), 5 deletions(-) create mode 100644 sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Definitions/asd.yaml create mode 100644 sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Definitions/asd_types.yaml create mode 100644 sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Files/Acm/definition/compositions.json create mode 100644 sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Files/Acm/instances/k8s-instance.json create mode 100644 sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Files/Sme/providers/provider-function-1.json create mode 100644 sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Files/Sme/serviceapis/api-set-1.json create mode 100644 sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/TOSCA-Metadata/TOSCA.meta create mode 100644 sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/asd.mf diff --git a/sample-rapp-generator/rapp-ran-nssmf-simulator/README.md b/sample-rapp-generator/rapp-ran-nssmf-simulator/README.md index 460299b..9481140 100644 --- a/sample-rapp-generator/rapp-ran-nssmf-simulator/README.md +++ b/sample-rapp-generator/rapp-ran-nssmf-simulator/README.md @@ -6,13 +6,47 @@ This comprehensive package includes both a **Spring Boot application** that prov ## Overview -The RAN NSSMF Simulator RAPP consists of two main components: +The RAN NSSMF Simulator RAPP consists of three main components: 1. **Spring Boot Application** (`ran-nssmf-simulator/`): A fully functional NSSMF simulator that implements 3GPP-compliant REST APIs -2. **Helm Chart** (`ran-nssmf-simulator-rapp/`): Kubernetes deployment configuration for containerized orchestration +2. **Helm Chart** (`ran-nssmf-simulator-rapp/Artifacts/Deployment/HELM/`): Kubernetes deployment configuration for containerized orchestration +3. **CSAR Package** (`ran-nssmf-simulator-rapp/`): Cloud Service Archive for non-RT RIC rApp Manager deployment This RAPP is designed to facilitate testing, development, and integration of O-RAN components by providing a mock NSSMF that simulates real network slice management operations without requiring actual network infrastructure. +## CSAR Package Structure + +The RAN NSSMF Simulator includes a **CSAR (Cloud Service Archive)** package that enables deployment through the non-RT RIC rApp Manager. The CSAR package contains: + +### Core CSAR Files +- **`asd.mf`**: ETSI entry manifest file with package metadata and file inventory +- **`TOSCA-Metadata/TOSCA.meta`**: TOSCA metadata with entry definitions and version information +- **`Definitions/asd.yaml`**: Application Service Descriptor defining rApp properties and deployment artifacts +- **`Definitions/asd_types.yaml`**: TOSCA type definitions for the rApp + +### Deployment Artifacts +- **`Artifacts/Deployment/HELM/ran-nssmf-simulator-rapp-0.1.0.tgz`**: Packaged Helm chart for Kubernetes deployment + +### Service Management Files +- **`Files/Acm/definition/compositions.json`**: Automation Composition definitions for ONAP Policy CLAMP integration +- **`Files/Acm/instances/k8s-instance.json`**: Kubernetes instance configuration +- **`Files/Sme/providers/provider-function-1.json`**: Service Management Entity provider configuration +- **`Files/Sme/serviceapis/api-set-1.json`**: API service definitions exposing RAN NSSMF Simulator endpoints + +### rApp Manager Integration +The CSAR package enables: +- **Package Upload**: Upload rApp packages to non-RT RIC rApp Manager +- **Automated Deployment**: Deploy rApp instances using uploaded CSAR packages +- **Service Discovery**: Automatic registration of rApp APIs with Service Management Entity +- **Lifecycle Management**: Complete rApp lifecycle control through rApp Manager + +### API Exposure +The rApp exposes the following APIs through SME: +- **Base URI**: `/3GPPManagement` +- **Operations**: GET, POST, PUT, DELETE +- **Protocol**: HTTP/1.1 +- **Service Endpoint**: `ran-nssmf-simulator-rapp.smo.svc.cluster.local:8080` + ## API Documentation ### Network Slice Subnet Management API @@ -344,11 +378,28 @@ The simulator automatically sends file ready notifications to all subscribed end │ ├── build.gradle │ ├── gradlew │ └── gradlew.bat -└── ran-nssmf-simulator-rapp/ # Helm Chart for Kubernetes Deployment - └── Artifacts/ +└── ran-nssmf-simulator-rapp/ # CSAR Package for rApp Manager + ├── asd.mf # ETSI Entry Manifest + ├── Definitions/ # TOSCA Definitions + │ ├── asd.yaml # Application Service Descriptor + │ └── asd_types.yaml # TOSCA Type Definitions + ├── Files/ # Service Management Files + │ ├── Acm/ # Automation Composition + │ │ ├── definition/ + │ │ │ └── compositions.json # ONAP Policy CLAMP definitions + │ │ └── instances/ + │ │ └── k8s-instance.json # Kubernetes instance config + │ └── Sme/ # Service Management Entity + │ ├── providers/ + │ │ └── provider-function-1.json # SME provider configuration + │ └── serviceapis/ + │ └── api-set-1.json # API service definitions + ├── TOSCA-Metadata/ # TOSCA Metadata + │ └── TOSCA.meta # TOSCA metadata file + └── Artifacts/ # Deployment Artifacts └── Deployment/ └── HELM/ - └── ran-nssmf-simulator-rapp/ + └── ran-nssmf-simulator-rapp/ # Helm Chart ├── Chart.yaml ├── values.yaml ├── .helmignore diff --git a/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Definitions/asd.yaml b/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Definitions/asd.yaml new file mode 100644 index 0000000..154756b --- /dev/null +++ b/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Definitions/asd.yaml @@ -0,0 +1,30 @@ +tosca_definitions_version: tosca_simple_yaml_1_2 + +description: rApp RAN NSSMF Simulator + +imports: + - asd_types.yaml + +topology_template: + node_templates: + applicationServiceDescriptor: + type: tosca.nodes.asd + description: "rapp-ran-nssmf-simulator" + properties: + descriptor_id: 2cd6a567-2e33-4960-8ef7-1cc519c998c6 + descriptor_invariant_id: 3f8a5e1b-68f1-42e5-89d0-47090dd0ef5c + descriptor_version: 1.0 + schema_version: 2.0 + function_description: rapp-ran-nssmf-simulator + provider: O-RAN SC NONRTRIC team + application_name: rapp-ran-nssmf-simulator + application_version: 1.0 + artifacts: + ran-nssmf-simulator: + type: tosca.artifacts.asd.deploymentItem + file: "Artifacts/Deployment/HELM/ran-nssmf-simulator-rapp-0.1.0.tgz" + properties: + artifact_type: "helm_chart" + target_server: "chartmuseum" + target_server_uri: "UPDATE_THIS_CHART_MUSEUM_POST_CHARTS_URI" + item_id: 1 diff --git a/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Definitions/asd_types.yaml b/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Definitions/asd_types.yaml new file mode 100644 index 0000000..572164f --- /dev/null +++ b/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Definitions/asd_types.yaml @@ -0,0 +1,72 @@ +tosca_definitions_version: tosca_simple_yaml_1_2 +description: ASD types definitions version 0.1 +node_types: + tosca.nodes.asd: + derived_from: tosca.nodes.Root + description: "The ASD node type" + version: 0.1 + properties: + descriptor_id: + type: string # UUID + required: true + description: Identifier of this ASD. It is in UUID format as specified in RFC 4122 + descriptor_invariant_id: + type: string # UUID + required: true + description: > + Identifier of this descriptor in a version independent manner. This attribute + is invariant across versions of ASD. It is in UUID format as specified in RFC 4122 + descriptor_version: + type: string + required: true + description: Identifies the version of the ASD. + schema_version: + type: string + required: true + description: Identifies the Identifies the version of this ASD’s schema. + function_description: + type: string + required: false + description: Description of the application service described by this ASD. + provider: + type: string + required: true + description: Identifies the provider of the ASD. + application_name: + type: string + required: true + description: Name to identify the application service described by this ASD + application_version: + type: string + required: true + description: Identifies the version of the application service described by this ASD. + +artifact_types: +tosca.artifacts.asd.deploymentItem: + version: 0.1 + derived_from: tosca.artifacts.Root + description: "Describes the artifact type of asd deployment item" + file: "Relative path of the artifact in the package" + properties: + item_id: + description: "The identifier of this asd deployment item" + required: true + type: string + artifact_type: + description: > + Specify artifact type. + required: true + type: string + constraints: + - valid_values: ["helm_chart"] + target_server: + description: > + Specify target server for artifact. + required: true + type: string + constraints: + - valid_values: [ "chartmuseum" ] + target_server_uri: + description: "URI of the target server" + required: true + type: string \ No newline at end of file diff --git a/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Files/Acm/definition/compositions.json b/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Files/Acm/definition/compositions.json new file mode 100644 index 0000000..f7b0401 --- /dev/null +++ b/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Files/Acm/definition/compositions.json @@ -0,0 +1,189 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_3", + "data_types": { + "onap.datatypes.ToscaConceptIdentifier": { + "derived_from": "tosca.datatypes.Root", + "properties": { + "name": { + "type": "string", + "required": true + }, + "version": { + "type": "string", + "required": true + } + } + } + }, + "node_types": { + "org.onap.policy.clamp.acm.Participant": { + "version": "1.0.1", + "derived_from": "tosca.nodetypes.Root", + "properties": { + "provider": { + "type": "string", + "required": false + } + } + }, + "org.onap.policy.clamp.acm.AutomationCompositionElement": { + "version": "1.0.1", + "derived_from": "tosca.nodetypes.Root", + "properties": { + "provider": { + "type": "string", + "required": false + }, + "participantType": { + "type": "onap.datatypes.ToscaConceptIdentifier", + "required": true + }, + "startPhase": { + "type": "integer", + "required": false, + "constraints": [ + { + "greater-or-equal": 0 + } + ], + "metadata": { + "common": true + }, + "description": "A value indicating the start phase in which this automation composition element will be started, the first start phase is zero. Automation Composition Elements are started in their start_phase order and stopped in reverse start phase order. Automation Composition Elements with the same start phase are started and stopped simultaneously" + }, + "passiveToRunningTimeout": { + "type": "integer", + "required": false, + "constraints": [ + { + "greater_or_equal": 0 + } + ], + "default": 60, + "metadata": { + "common": true + }, + "description": "The maximum time in seconds to wait for a state chage from passive to running" + }, + "runningToPassiveTimeout": { + "type": "integer", + "required": false, + "constraints": [ + { + "greater_or_equal": 0 + } + ], + "default": 60, + "metadata": { + "common": true + }, + "description": "The maximum time in seconds to wait for a state chage from running to passive" + }, + "passiveToUninitializedTimeout": { + "type": "integer", + "required": false, + "constraints": [ + { + "greater_or_equal": 0 + } + ], + "default": 60, + "metadata": { + "common": true + }, + "description": "The maximum time in seconds to wait for a state chage from passive to uninitialized" + } + } + }, + "org.onap.policy.clamp.acm.AutomationComposition": { + "version": "1.0.1", + "derived_from": "tosca.nodetypes.Root", + "properties": { + "provider": { + "type": "string", + "required": false, + "metadata": { + "common": true + } + }, + "elements": { + "type": "list", + "required": true, + "metadata": { + "common": true + }, + "entry_schema": { + "type": "onap.datatypes.ToscaConceptIdentifier" + } + } + } + }, + "org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement": { + "version": "1.0.0", + "derived_from": "org.onap.policy.clamp.acm.AutomationCompositionElement", + "properties": { + "chart": { + "type": "string", + "required": true + }, + "configs": { + "type": "list", + "required": false + }, + "requirements": { + "type": "string", + "required": false + }, + "templates": { + "type": "list", + "required": false, + "entry_schema": null + }, + "values": { + "type": "string", + "required": true + } + } + } + }, + "topology_template": { + "node_templates": { + "org.onap.k8s.acm.K8SAutomationCompositionParticipant": { + "version": "2.3.4", + "type": "org.onap.policy.clamp.acm.Participant", + "type_version": "1.0.1", + "description": "Participant for K8S", + "properties": { + "provider": "ONAP" + } + }, + "onap.policy.clamp.ac.element.K8S_StarterAutomationCompositionElement": { + "version": "1.2.3", + "type": "org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement", + "type_version": "1.0.0", + "description": "Automation composition element for the K8S microservice for AC Element Starter", + "properties": { + "provider": "ONAP", + "startPhase": 0, + "uninitializedToPassiveTimeout": 300, + "podStatusCheckInterval": 30 + } + }, + "onap.policy.clamp.ac.element.AutomationCompositionDefinition": { + "version": "1.2.3", + "type": "org.onap.policy.clamp.acm.AutomationComposition", + "type_version": "1.0.1", + "description": "Automation composition for rapp deployment", + "properties": { + "provider": "ONAP", + "elements": [ + { + "name": "onap.policy.clamp.ac.element.K8S_StarterAutomationCompositionElement", + "version": "1.2.3" + } + ] + } + } + } + } +} \ No newline at end of file diff --git a/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Files/Acm/instances/k8s-instance.json b/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Files/Acm/instances/k8s-instance.json new file mode 100644 index 0000000..19cb6b6 --- /dev/null +++ b/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Files/Acm/instances/k8s-instance.json @@ -0,0 +1,35 @@ +{ + "name": "RANNSSMFSimulatorInstance0", + "version": "1.0.1", + "compositionId": "DO_NOT_CHANGE_THIS_COMPOSITION_ID", + "description": "RAN NSSMF Simulator automation composition instance 0", + "elements": { + "d7be552e-bcc5-4478-b64d-797dbaec8f57": { + "id": "d7be552e-bcc5-4478-b64d-797dbaec8f57", + "definition": { + "name": "onap.policy.clamp.ac.element.K8S_StarterAutomationCompositionElement", + "version": "1.2.3" + }, + "description": "Starter Automation Composition Element for the RAN NSSMF Simulator", + "properties": { + "chart": { + "chartId": { + "name": "ran-nssmf-simulator-rapp", + "version": "0.1.0" + }, + "namespace": "smo", + "releaseName": "ran-nssmf-simulator-rapp", + "podName": "ran-nssmf-simulator-rapp", + "repository": { + "repoName": "local", + "address": "UPDATE_THIS_CHART_MUSEUM_GET_CHARTS_URI" + }, + "overrideParams": { + "environment.appId": "DO_NOT_CHANGE_THIS_RAPP_INSTANCE_ID", + "environment.smeDiscoveryEndpoint": "DO_NOT_CHANGE_THIS_SME_DISCOVERY_ENDPOINT" + } + } + } + } + } +} \ No newline at end of file diff --git a/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Files/Sme/providers/provider-function-1.json b/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Files/Sme/providers/provider-function-1.json new file mode 100644 index 0000000..3094df7 --- /dev/null +++ b/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Files/Sme/providers/provider-function-1.json @@ -0,0 +1,20 @@ +{ + "apiProvDomInfo": "Provider domain", + "apiProvFuncs": [ + { + "apiProvFuncInfo": "RAN NSSMF Simulator as APF", + "apiProvFuncRole": "APF", + "regInfo": { + "apiProvPubKey": "NOT USED here" + } + }, + { + "apiProvFuncInfo": "RAN NSSMF Simulator as AEF", + "apiProvFuncRole": "AEF", + "regInfo": { + "apiProvPubKey": "NOT USED here" + } + } + ], + "regSec": "plain" +} \ No newline at end of file diff --git a/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Files/Sme/serviceapis/api-set-1.json b/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Files/Sme/serviceapis/api-set-1.json new file mode 100644 index 0000000..ce7807b --- /dev/null +++ b/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/Files/Sme/serviceapis/api-set-1.json @@ -0,0 +1,35 @@ +{ + "apiName": "RAN NSSMF Simulator API Set 1", + "description": "RAN NSSMF Simulator API", + "aefProfiles": [ + { + "aefId": "RAN NSSMF Simulator as AEF", + "description": "RAN NSSMF Simulator API", + "versions": [ + { + "apiVersion": "", + "resources": [ + { + "resourceName": "rannssmfsimulator", + "commType": "REQUEST_RESPONSE", + "uri": "/3GPPManagement", + "operations": [ + "GET", + "DELETE", + "POST", + "PUT" + ] + } + ] + } + ], + "protocol": "HTTP_1_1", + "interfaceDescriptions": [ + { + "ipv4Addr": "ran-nssmf-simulator-rapp.smo.svc.cluster.local", + "port": 8080 + } + ] + } + ] +} \ No newline at end of file diff --git a/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/TOSCA-Metadata/TOSCA.meta b/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/TOSCA-Metadata/TOSCA.meta new file mode 100644 index 0000000..cb4e482 --- /dev/null +++ b/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/TOSCA-Metadata/TOSCA.meta @@ -0,0 +1,5 @@ +TOSCA-Meta-File-Version: 1.0 +CSAR-Version: 1.0 +Created-By: O-RAN SC NONRTRIC team +Entry-Definitions: Definitions/asd.yaml +ETSI-Entry-Manifest: asd.mf \ No newline at end of file diff --git a/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/asd.mf b/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/asd.mf new file mode 100644 index 0000000..c09175e --- /dev/null +++ b/sample-rapp-generator/rapp-ran-nssmf-simulator/ran-nssmf-simulator-rapp/asd.mf @@ -0,0 +1,15 @@ +metadata: + application_name: ran-nssmf-simulator-rapp + application_provider: O-RAN SC NONRTRIC team + release_date_time: 2025-09-15T11:30:00+00:00 + entry_definition_type: asd + +Source: asd.mf +Source: Artifacts/Deployment/HELM/ran-nssmf-simulator-rapp-0.1.0.tgz +Source: Definitions/asd.yaml +Source: Definitions/asd_types.yaml +Source: TOSCA-Metadata/TOSCA.meta +Source: Files/Acm/definition/compositions.json +Source: Files/Acm/instances/k8s-instance.json +Source: Files/Sme/provider/provider-function-1.json +Source: Files/Sme/serviceapis/api-set-1.json -- 2.16.6