## 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
│ ├── 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
--- /dev/null
+tosca_definitions_version: tosca_simple_yaml_1_2\r
+\r
+description: rApp RAN NSSMF Simulator\r
+\r
+imports:\r
+ - asd_types.yaml\r
+\r
+topology_template:\r
+ node_templates:\r
+ applicationServiceDescriptor:\r
+ type: tosca.nodes.asd\r
+ description: "rapp-ran-nssmf-simulator"\r
+ properties:\r
+ descriptor_id: 2cd6a567-2e33-4960-8ef7-1cc519c998c6\r
+ descriptor_invariant_id: 3f8a5e1b-68f1-42e5-89d0-47090dd0ef5c\r
+ descriptor_version: 1.0\r
+ schema_version: 2.0\r
+ function_description: rapp-ran-nssmf-simulator\r
+ provider: O-RAN SC NONRTRIC team\r
+ application_name: rapp-ran-nssmf-simulator\r
+ application_version: 1.0\r
+ artifacts:\r
+ ran-nssmf-simulator:\r
+ type: tosca.artifacts.asd.deploymentItem\r
+ file: "Artifacts/Deployment/HELM/ran-nssmf-simulator-rapp-0.1.0.tgz"\r
+ properties:\r
+ artifact_type: "helm_chart"\r
+ target_server: "chartmuseum"\r
+ target_server_uri: "UPDATE_THIS_CHART_MUSEUM_POST_CHARTS_URI"\r
+ item_id: 1\r
--- /dev/null
+tosca_definitions_version: tosca_simple_yaml_1_2\r
+description: ASD types definitions version 0.1\r
+node_types:\r
+ tosca.nodes.asd:\r
+ derived_from: tosca.nodes.Root\r
+ description: "The ASD node type"\r
+ version: 0.1\r
+ properties:\r
+ descriptor_id:\r
+ type: string # UUID\r
+ required: true\r
+ description: Identifier of this ASD. It is in UUID format as specified in RFC 4122\r
+ descriptor_invariant_id:\r
+ type: string # UUID\r
+ required: true\r
+ description: >\r
+ Identifier of this descriptor in a version independent manner. This attribute\r
+ is invariant across versions of ASD. It is in UUID format as specified in RFC 4122\r
+ descriptor_version:\r
+ type: string\r
+ required: true\r
+ description: Identifies the version of the ASD.\r
+ schema_version:\r
+ type: string\r
+ required: true\r
+ description: Identifies the Identifies the version of this ASD’s schema.\r
+ function_description:\r
+ type: string\r
+ required: false\r
+ description: Description of the application service described by this ASD.\r
+ provider:\r
+ type: string\r
+ required: true\r
+ description: Identifies the provider of the ASD.\r
+ application_name:\r
+ type: string\r
+ required: true\r
+ description: Name to identify the application service described by this ASD\r
+ application_version:\r
+ type: string\r
+ required: true\r
+ description: Identifies the version of the application service described by this ASD.\r
+\r
+artifact_types:\r
+tosca.artifacts.asd.deploymentItem:\r
+ version: 0.1\r
+ derived_from: tosca.artifacts.Root\r
+ description: "Describes the artifact type of asd deployment item"\r
+ file: "Relative path of the artifact in the package"\r
+ properties:\r
+ item_id:\r
+ description: "The identifier of this asd deployment item"\r
+ required: true\r
+ type: string\r
+ artifact_type:\r
+ description: >\r
+ Specify artifact type.\r
+ required: true\r
+ type: string\r
+ constraints:\r
+ - valid_values: ["helm_chart"]\r
+ target_server:\r
+ description: >\r
+ Specify target server for artifact.\r
+ required: true\r
+ type: string\r
+ constraints:\r
+ - valid_values: [ "chartmuseum" ]\r
+ target_server_uri:\r
+ description: "URI of the target server"\r
+ required: true\r
+ type: string
\ No newline at end of file
--- /dev/null
+{\r
+ "tosca_definitions_version": "tosca_simple_yaml_1_3",\r
+ "data_types": {\r
+ "onap.datatypes.ToscaConceptIdentifier": {\r
+ "derived_from": "tosca.datatypes.Root",\r
+ "properties": {\r
+ "name": {\r
+ "type": "string",\r
+ "required": true\r
+ },\r
+ "version": {\r
+ "type": "string",\r
+ "required": true\r
+ }\r
+ }\r
+ }\r
+ },\r
+ "node_types": {\r
+ "org.onap.policy.clamp.acm.Participant": {\r
+ "version": "1.0.1",\r
+ "derived_from": "tosca.nodetypes.Root",\r
+ "properties": {\r
+ "provider": {\r
+ "type": "string",\r
+ "required": false\r
+ }\r
+ }\r
+ },\r
+ "org.onap.policy.clamp.acm.AutomationCompositionElement": {\r
+ "version": "1.0.1",\r
+ "derived_from": "tosca.nodetypes.Root",\r
+ "properties": {\r
+ "provider": {\r
+ "type": "string",\r
+ "required": false\r
+ },\r
+ "participantType": {\r
+ "type": "onap.datatypes.ToscaConceptIdentifier",\r
+ "required": true\r
+ },\r
+ "startPhase": {\r
+ "type": "integer",\r
+ "required": false,\r
+ "constraints": [\r
+ {\r
+ "greater-or-equal": 0\r
+ }\r
+ ],\r
+ "metadata": {\r
+ "common": true\r
+ },\r
+ "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"\r
+ },\r
+ "passiveToRunningTimeout": {\r
+ "type": "integer",\r
+ "required": false,\r
+ "constraints": [\r
+ {\r
+ "greater_or_equal": 0\r
+ }\r
+ ],\r
+ "default": 60,\r
+ "metadata": {\r
+ "common": true\r
+ },\r
+ "description": "The maximum time in seconds to wait for a state chage from passive to running"\r
+ },\r
+ "runningToPassiveTimeout": {\r
+ "type": "integer",\r
+ "required": false,\r
+ "constraints": [\r
+ {\r
+ "greater_or_equal": 0\r
+ }\r
+ ],\r
+ "default": 60,\r
+ "metadata": {\r
+ "common": true\r
+ },\r
+ "description": "The maximum time in seconds to wait for a state chage from running to passive"\r
+ },\r
+ "passiveToUninitializedTimeout": {\r
+ "type": "integer",\r
+ "required": false,\r
+ "constraints": [\r
+ {\r
+ "greater_or_equal": 0\r
+ }\r
+ ],\r
+ "default": 60,\r
+ "metadata": {\r
+ "common": true\r
+ },\r
+ "description": "The maximum time in seconds to wait for a state chage from passive to uninitialized"\r
+ }\r
+ }\r
+ },\r
+ "org.onap.policy.clamp.acm.AutomationComposition": {\r
+ "version": "1.0.1",\r
+ "derived_from": "tosca.nodetypes.Root",\r
+ "properties": {\r
+ "provider": {\r
+ "type": "string",\r
+ "required": false,\r
+ "metadata": {\r
+ "common": true\r
+ }\r
+ },\r
+ "elements": {\r
+ "type": "list",\r
+ "required": true,\r
+ "metadata": {\r
+ "common": true\r
+ },\r
+ "entry_schema": {\r
+ "type": "onap.datatypes.ToscaConceptIdentifier"\r
+ }\r
+ }\r
+ }\r
+ },\r
+ "org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement": {\r
+ "version": "1.0.0",\r
+ "derived_from": "org.onap.policy.clamp.acm.AutomationCompositionElement",\r
+ "properties": {\r
+ "chart": {\r
+ "type": "string",\r
+ "required": true\r
+ },\r
+ "configs": {\r
+ "type": "list",\r
+ "required": false\r
+ },\r
+ "requirements": {\r
+ "type": "string",\r
+ "required": false\r
+ },\r
+ "templates": {\r
+ "type": "list",\r
+ "required": false,\r
+ "entry_schema": null\r
+ },\r
+ "values": {\r
+ "type": "string",\r
+ "required": true\r
+ }\r
+ }\r
+ }\r
+ },\r
+ "topology_template": {\r
+ "node_templates": {\r
+ "org.onap.k8s.acm.K8SAutomationCompositionParticipant": {\r
+ "version": "2.3.4",\r
+ "type": "org.onap.policy.clamp.acm.Participant",\r
+ "type_version": "1.0.1",\r
+ "description": "Participant for K8S",\r
+ "properties": {\r
+ "provider": "ONAP"\r
+ }\r
+ },\r
+ "onap.policy.clamp.ac.element.K8S_StarterAutomationCompositionElement": {\r
+ "version": "1.2.3",\r
+ "type": "org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement",\r
+ "type_version": "1.0.0",\r
+ "description": "Automation composition element for the K8S microservice for AC Element Starter",\r
+ "properties": {\r
+ "provider": "ONAP",\r
+ "startPhase": 0,\r
+ "uninitializedToPassiveTimeout": 300,\r
+ "podStatusCheckInterval": 30\r
+ }\r
+ },\r
+ "onap.policy.clamp.ac.element.AutomationCompositionDefinition": {\r
+ "version": "1.2.3",\r
+ "type": "org.onap.policy.clamp.acm.AutomationComposition",\r
+ "type_version": "1.0.1",\r
+ "description": "Automation composition for rapp deployment",\r
+ "properties": {\r
+ "provider": "ONAP",\r
+ "elements": [\r
+ {\r
+ "name": "onap.policy.clamp.ac.element.K8S_StarterAutomationCompositionElement",\r
+ "version": "1.2.3"\r
+ }\r
+ ]\r
+ }\r
+ }\r
+ }\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+{
+ "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
--- /dev/null
+{\r
+ "apiProvDomInfo": "Provider domain",\r
+ "apiProvFuncs": [\r
+ {\r
+ "apiProvFuncInfo": "RAN NSSMF Simulator as APF",\r
+ "apiProvFuncRole": "APF",\r
+ "regInfo": {\r
+ "apiProvPubKey": "NOT USED here"\r
+ }\r
+ },\r
+ {\r
+ "apiProvFuncInfo": "RAN NSSMF Simulator as AEF",\r
+ "apiProvFuncRole": "AEF",\r
+ "regInfo": {\r
+ "apiProvPubKey": "NOT USED here"\r
+ }\r
+ }\r
+ ],\r
+ "regSec": "plain"\r
+}
\ No newline at end of file
--- /dev/null
+{\r
+ "apiName": "RAN NSSMF Simulator API Set 1",\r
+ "description": "RAN NSSMF Simulator API",\r
+ "aefProfiles": [\r
+ {\r
+ "aefId": "RAN NSSMF Simulator as AEF",\r
+ "description": "RAN NSSMF Simulator API",\r
+ "versions": [\r
+ {\r
+ "apiVersion": "",\r
+ "resources": [\r
+ {\r
+ "resourceName": "rannssmfsimulator",\r
+ "commType": "REQUEST_RESPONSE",\r
+ "uri": "/3GPPManagement",\r
+ "operations": [\r
+ "GET",\r
+ "DELETE",\r
+ "POST",\r
+ "PUT"\r
+ ]\r
+ }\r
+ ]\r
+ }\r
+ ],\r
+ "protocol": "HTTP_1_1",\r
+ "interfaceDescriptions": [\r
+ {\r
+ "ipv4Addr": "ran-nssmf-simulator-rapp.smo.svc.cluster.local",\r
+ "port": 8080\r
+ }\r
+ ]\r
+ }\r
+ ]\r
+}
\ No newline at end of file
--- /dev/null
+TOSCA-Meta-File-Version: 1.0\r
+CSAR-Version: 1.0\r
+Created-By: O-RAN SC NONRTRIC team\r
+Entry-Definitions: Definitions/asd.yaml\r
+ETSI-Entry-Manifest: asd.mf
\ No newline at end of file
--- /dev/null
+metadata:\r
+ application_name: ran-nssmf-simulator-rapp\r
+ application_provider: O-RAN SC NONRTRIC team\r
+ release_date_time: 2025-09-15T11:30:00+00:00\r
+ entry_definition_type: asd\r
+\r
+Source: asd.mf\r
+Source: Artifacts/Deployment/HELM/ran-nssmf-simulator-rapp-0.1.0.tgz\r
+Source: Definitions/asd.yaml\r
+Source: Definitions/asd_types.yaml\r
+Source: TOSCA-Metadata/TOSCA.meta\r
+Source: Files/Acm/definition/compositions.json\r
+Source: Files/Acm/instances/k8s-instance.json\r
+Source: Files/Sme/provider/provider-function-1.json\r
+Source: Files/Sme/serviceapis/api-set-1.json\r