Manual Configuration:


This configuration is required to enable the ranSlice features in SDN-R.

SDNC:

  •  Create the below environment variable in the helm chart at kubernetes/sdnc/templates/statefulset.yaml (for sdnc container). 

+          - name: SDNR_NORTHBOUND
+            value: "{{ .Values.config.sdnr.enabled | default "false"}}"

  • Make the SDNC chart and then deploy.
  • Execute the following command to log into the sdnc container 
    1. kubectl exec -it dev-sdnc-0 bash 
  • Once in the docker container, edit the properties file  /opt/onap/ccsdk/data/properties/ran-slice-api-dg.properties

POLICY:

  • Login to the policy-drools-pdp container and check if the value 'actor.service.SO.operations.Modify\ NSSI.path=3gppservices/v1/modify' is present in the below file:
    • kubectl exec -ti -n onap dev-policy-drools-pdp-0 sh
    • /opt/app/policy/config/event-manager.properties
  • If value not present update the policy-drools-pdp-image to this version'/onap/policy-pdpd-cl:1.10.2-20220413T1305' or any version after '1.10.2'

Deployment Prerequisite/dependencies

  1. DMaaP, Policy, SO and SDNC pods should be up and running.

  2. VES, PM mapper and DataFile Collector service should be running.
  3. ConfigDB container should be running(if configDb is disabled in slice-analysis, CPS, CPS-TBDMT and AAI services  should be running).

Slice Analysis MS

Edit the below configurations in slice-analysis helm chart oom/kubernetes/dcaegen2-services/components/dcae-slice-analysis-ms/values.yaml

  • if config DB is used:

sliceanalysisms.configDbEnabled: true
sliceanalysisms.configDb.service: http://<IPAddress>:8086

  • if CPS is used:

  sliceanalysisms.configDbEnabled: false
  sliceanalysisms.cps.url: http://<IPAddressOfCPS-TBDMT>:8088/execute/ran-network

Make the chart and deploy slice-analysis


Policies for Slice Analysis MS:

Execute these curl requests from any of the running pods.

Policy Creation:

curl -k --silent --user 'policyadmin:zb!XztG34' -X POST "https://policy-api:6969/policy/api/v1/policytypes/onap.policies.controlloop.operational.common.Drools/versions/1.0.0/policies" -H "Accept: application/json" -H "Content-Type: application/json" -d @modifynssi.json

where modifynssi.json is, 
SLA MS - Policy

{
    "tosca_definitions_version": "tosca_simple_yaml_1_1_0",
    "topology_template": {
        "policies": [
            {
            "operational.modifynssi": {
               "type": "onap.policies.controlloop.operational.common.Drools",
               "type_version": "1.0.0",
               "version": "1.0.0",
               "name": "operational.modifynssi",
               "metadata": {
                  "policy-id": "operational.modifynssi"
               },
               "properties": {
                  "id": "ControlLoop-Slicing-116d7b00-dbeb-4d03-8719-d0a658fa735b",
                  "timeout": 1200,
                  "abatement": false,
                  "trigger": "unique-policy-id-1-modify-nssi",
                  "operations": [
                     {
                        "id": "unique-policy-id-1-modify-nssi",
                        "description": "Modify resource allocation for a slice subnet instance",
                        "operation": {
                           "actor": "SO",
                           "operation": "Modify NSSI",
                           "target": {
                              "targetType": "VNF"
                           }
                        },
                        "timeout": 1200,
                        "retries": 0,
                        "success": "final_success",
                        "failure": "final_failure",
                        "failure_timeout": "final_failure_timeout",
                        "failure_retries": "final_failure_retries",
                        "failure_exception": "final_failure_exception",
                        "failure_guard": "final_failure_guard"
                     }
                  ],
                  "controllerName": "usecases"
               }
            }
         }
        ]
    }
}


To push the policy:

curl --silent -k --user 'policyadmin:zb!XztG34' -X POST "https://policy-pap:6969/policy/pap/v1/pdps/policies" -H "Accept: application/json" -H "Content-Type: application/json" -d @push_modifynssi.json

where push_modifynssi.json is,
SLA MS - Push the Policy

{
  "policies": [
    {
      "policy-id": "operational.modifynssi",
      "policy-version": 1
    }
  ]
}

ConfigDB:

  1. Download the configDb source files from configdb-3.0.0.zip
  2. cd configdb (after extracting the files)
  3. Setup and run maridb container
    1. sudo docker run -p 3306:3306 -v $PWD/SDNC_ConfigDB_SchemaV4.sql:/docker-entrypoint-initdb.d/SDNC_ConfigDB_SchemaV4.sql --name mariadb -e MYSQL_ROOT_PASSWORD=password -d mariadb
  4. Navigate to project directory
    1. cd configdb/Config-DB-API-App
  5. Build the application
    1. JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ mvn clean install
  6. Run the application
    1. JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ mvn spring-boot:run &
  7. Execute this script(update configDB IPAddress and Port) to upload sample closed-loop-data: config_requests_script_closed_loop.sh


AAI:

Sample data to be loaded in AAI:

aai-sample-data.zip

curl --request PUT -H "X-FromAppId:AAI " -H  "X-TransactionId:get_aai_subscr" -H "Accept:application/json" -H "Content-Type:application/json" -k \
https://$AAI_RESOURCES_IP:8447/aai/v21/business/customers/customer/5GCustomer \
-d @aai-sample-data/atacustomers.json -i

curl --request PUT -H "X-FromAppId:AAI " -H  "X-TransactionId:get_aai_subscr" -H "Accept:application/json" -H "Content-Type:application/json" -k \
https://$AAI_RESOURCES_IP:8447/aai/v21/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G \
-d @aai-sample-data/service_subscriptions.json -i

curl --request PUT -H "X-FromAppId:AAI " -H  "X-TransactionId:get_aai_subscr" -H "Accept:application/json" -H "Content-Type:application/json" -k \
https://$AAI_RESOURCES_IP:8447/aai/v21/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G/service-instances/service-instance/3f2f23fa-c567-4dd8-8f15-f95ae3e6fd84 \
-d @aai-sample-data/ran_nf_nssi.json -i

curl --request PUT -H "X-FromAppId:AAI " -H  "X-TransactionId:get_aai_subscr" -H "Accept:application/json" -H "Content-Type:application/json" -k \
https://$AAI_RESOURCES_IP:8447/aai/v21/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G/service-instances/service-instance/2125ad2f-c074-4342-b81e-db99ce0e4ed5 \
-d @aai-sample-data/slice_profile_instance.json -i

curl --request PUT -H "X-FromAppId:AAI " -H  "X-TransactionId:get_aai_subscr" -H "Accept:application/json" -H "Content-Type:application/json" -k \
https://$AAI_RESOURCES_IP:8447/aai/v24/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G/service-instances/service-instance/2125ad2f-c074-4342-b81e-db99ce0e4ed5/slice-profiles/slice-profile/684hf846f-863b-4901-b202-0ab86a638555 \
-d @aai-sample-data/slice_profile.json -i

curl --request PUT -H "X-FromAppId:AAI " -H  "X-TransactionId:get_aai_subscr" -H "Accept:application/json" -H "Content-Type:application/json" -k \
https://$AAI_RESOURCES_IP:8447/aai/v21/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G/service-instances/service-instance/b2ae730f-1d5f-495a-8112-dac017a7348c \
-d @sim-data/sliceprofile_an_sa1.json -i

curl --request PUT -H "X-FromAppId:AAI " -H  "X-TransactionId:get_aai_subscr" -H "Accept:application/json" -H "Content-Type:application/json" -k \
https://$AAI_RESOURCES_IP:8447/aai/v21/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G/service-instances/service-instance/cad8fa36-2d55-4c12-a92e-1bd551517a0c \
-d @aai-sample-data/sliceprofile_cn_sa1.json -i

curl --request PUT -H "X-FromAppId:AAI " -H  "X-TransactionId:get_aai_subscr" -H "Accept:application/json" -H "Content-Type:application/json" -k \
https://$AAI_RESOURCES_IP:8447/aai/v21/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G/service-instances/service-instance/8d0d698e-77f4-4453-8c09-ae2cbe6a9a04 \
-d @aai-sample-data/sliceprofile_tn_sa1.json -i

curl --request PUT -H "X-FromAppId:AAI " -H  "X-TransactionId:get_aai_subscr" -H "Accept:application/json" -H "Content-Type:application/json" -k \
https://$AAI_RESOURCES_IP:8447/aai/v21/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G/service-instances/service-instance/0835fd19-6726-4081-befb-cc8932c47767 \
-d @aai-sample-data/alloted-resource.json -i

curl --request PUT -H "X-FromAppId:AAI " -H  "X-TransactionId:get_aai_subscr" -H "Accept:application/json" -H "Content-Type:application/json" -k \
https://$AAI_RESOURCES_IP:8447/aai/v21/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G/service-instances/service-instance/0835fd19-6726-4081-befb-cc8932c47767/allotted-resources/allotted-resource/530d188d-9087-49af-a44a-90c40e0c2d47 \
-d @aai-sample-data/alloted-resource-data.json -i

curl --request PUT -H "X-FromAppId:AAI " -H  "X-TransactionId:get_aai_subscr" -H "Accept:application/json" -H "Content-Type:application/json" -k \
https://$AAI_RESOURCES_IP:8447/aai/v21/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G/service-instances/service-instance/50f418a6-804f-4453-bf70-21f0efaf6fcd \
-d @aai-sample-data/nssi.json -i

curl --request PUT -H "X-FromAppId:AAI " -H  "X-TransactionId:get_aai_subscr" -H "Accept:application/json" -H "Content-Type:application/json" -k \
https://$AAI_RESOURCES_IP:8447/aai/v21/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G/service-instances/service-instance/09cad94e-fbb8-4c70-9c4d-74ec75e97683 \
-d @aai-sample-data/nsi.json -i


CPS and CPS-TBDMT:

CPS:

  1. git clone "https://gerrit.onap.org/r/cps
  2. cd cps/
  3. mvn clean install
  4. cd docker-compose/
  5. docker-compose up

CPS-TBDMT:

  1. git clone "https://gerrit.onap.org/r/cps/cps-tbdmt
  2. cd cps-tbdmt/
  3. mvn clean install
  4. cd docker-compose/
  5. update cps & ncmp ip-address in application.yml
  6. cps-tbdmt/docker-compose/application.yml should have the below mapping under the section schemaToAnchor:
    1. schemaToAnchor:
          ran-coverage-area: coverage-area-onap
          e2e-cavsta-schemaset: e2e-cavsta1
          CSIT-SchemaSet: CSIT-Anchor
          ns-schemaset: ns-anchor
          ran-network: 11
          ran-inventory: ran-inventory-anchor
  7. docker-compose up (use the image built using the above steps in the docker-compose file)

Creating dataspace: 
curl --location --user cpsuser:cpsr0cks! -H "Accept: application/json" -H "Content-Type: application/json" \
--request POST \
http://$CPS_IP:8080/cps/api/v1/dataspaces?dataspace-name=E2EDemo

Creating schema set: 

ran-network.zip
curl --location --user cpsuser:cpsr0cks! \
--request POST \
http://$CPS_IP:8080/cps/api/v1/dataspaces/E2EDemo/schema-sets --form 'file=@"ran-network.zip"' --form 'schema-set-name="ran-network"'

Creating anchor:
curl --location --user cpsuser:cpsr0cks!  --request POST \
http://$CPS_IP:8080/cps/api/v1/dataspaces/E2EDemo/anchors?schema-set-name=ran-network \
-d anchor-name=11

Uploading cps sample-payload:

payload-ran-network.json
curl --location --user cpsuser:cpsr0cks! --request POST \
http://$CPS_IP:8080/cps/api/v1/dataspaces/E2EDemo/anchors/11/nodes \
--header 'Content-Type: application/json' \
-d @payload-ran-network.json

ran-inventory-sample-data.json

curl --location --user cpsuser:cpsr0cks! --request POST \
http://$CPS_IP:8080/cps/api/v1/dataspaces/E2EDemo/anchors/ran-inventory-anchor/nodes \
--header 'Content-Type: application/json' \
-d @ran-inventory-sample-data.json 


Uploading tbdmt-templates:

curl --location --request POST \
http://$CPS_TBDMT_IP:8080/templates \
--header 'Content-Type: application/json' \
--data-raw '{"templateId": "get-nearrtric-config","model": "ran-network","requestType": "query-cps-path","xpathTemplate": "//sNSSAIList[@sNssai='\''{{sNssai}}'\'']/ancestor::NearRTRIC","includeDescendants": true,"transformParam":"NearRTRIC"}'

curl --location --request POST \
http://$CPS_TBDMT_IP:8080/templates \
--header 'Content-Type: application/json' \
--data-raw '{"templateId": "get-gnbdufunction-by-snssai","model": "ran-network","requestType": "query-cps-path","xpathTemplate": "//sNSSAIList[@sNssai='\''{{sNssai}}'\'']/ancestor::GNBDUFunction","includeDescendants": true,"transformParam":"GNBDUFunction"}'

curl --location --request POST \
http://$CPS_TBDMT_IP:8080/templates \
--header 'Content-Type: application/json' \
--data-raw '{"templateId": "get-nrcelldu-by-snssai","model": "ran-network","requestType": "query-cps-path","xpathTemplate": "//sNSSAIList[@sNssai='\''{{sNssai}}'\'']/ancestor::NearRTRIC","includeDescendants": true,"transformParam":"NearRTRIC"}'

curl --location --request POST\
http://$CPS_TBDMT_IP:8080/templates \
--header 'Content-Type: application/json'\
--data-raw '{
"templateId": "get-plmnid","model": "ran-inventory","requestType": "query-cps-path","xpathTemplate": 
"//sliceProfilesList[@sliceProfileId='\''{{sliceProfileId}}'\'']","includeDescendants": true,"transformParam":"sliceProfilesList,pLMNIdList"}'


curl --location --request POST\
http://$CPS_TBDMT_IP:8080/templates\
--header 'Content-Type: application/json'\
--data-raw '{"templateId": "patch-configData","model": "ran-network","requestType": "put","xpathTemplate":
"/ran-network/NearRTRIC[@idNearRTRIC='\''{{idNearRTRIC}}'\'']/attributes/pLMNInfoList[@mcc='\''{{mcc}}'\'' and @mnc='\''{{mnc}}'\'']/sNSSAIList[@sNssai='\''{{sNssai}}'\'']","includeDescendants": true}'

RANSIM and Honeycomb setup:

RANSIM :

Follow the steps below to setup the Ransim environment:

  1. Clone the repo from : git clone https://gerrit.onap.org/r/integration/simulators/ran-simulator
  2. Import the latest SDNC certificate into ransim

    1. Download the SDNC cacerts from browser.

    2. Import the cacert file into the directory ran-simulator/ransim/docker/config/ransim/ and name it as 'jssecacerts'.(Sample step to import shown below)

      • keytool -import -noprompt -trustcacerts -alias SDNC -file <certsfile> -keystore /ransim/docker/config/ransim/jssecacerts -storepass changeit

  3. Go to the ran-simulator/ransim directory and build the project : JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ mvn clean install -P docker
  4. From docker folder, run the following after building the image locally and updating the SDNR IP address in the docker-compose file : docker-compose up
  5. Run the following command to start the RAN network slice simulation

    curl -X POST http://localhost:8081/ransim/api/StartRanSliceSimulation -i

    To access the logs:
    docker exec –ti ransim bash
    policy@ransim:/tmp/ransim-install$ tail -f /opt/app/policy/servers/ransim/logs/ransim-rest.log 
  6. Setup honeycomb (Refer HONEYCOMB section)
  7. You can update/add/delete data(throughput, PRBs, maxNoConns etc) in mariadb container(credentials in docker-compose file) if required before generation of PM data.
  8. Sample closed loop data: closed-loop-data.txt
  9. Run the following command to generate Closed Loop PM data:
    1. curl -X POST http://localhost:8081/ransim/api/generateClosedLoopPmData -i
  10. Run the following command to stop Closed Loop PM data(When enough PM data is generated): 
    1. curl -X GET http://localhost:8081/ransim/api/stopClosedLoopPmData -i
  11. Access the DU honeycomb containers to view the logs:
    1. docker container logs -f 110
  12. Check the folder(where SFTP setup is done) to view the generated PM data files.
  13. Access VES, data file collector, dmaap-dr, PM mapper and slice-analysis logs to verify.


Honeycomb:

Repo URL: https://github.com/onap-oof-pci-poc/ran-sim

Pre-requisite: SDNC & Ransim controller should be up and running.

Build Steps:

If there is a new yang model, build the gnbsim-api with new yang model

Step 1: copy the new yang model to ~/ran-sim/hcsim-content/gnbsim/gnbsim-api/src/main/yang
Step 2: Go to directory ~/ran-sim/hcsim-content/gnbsim/gnbsim-api/
Step 3: Issue the build command "JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ mvn clean install -Dcheckstyle.skip"

For code changes in gnbsim-impl directory

Step 1: Do necessary code changes in gnbsim-impl
Step 2: Issue the build command "JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ mvn clean install -Dcheckstyle.skip"

Once the mvn build is done, build the docker image

Once the mvn build is done, build the docker image

  1. Go to directory ~/ran-sim/hcsim-content/gnbsim
  2. JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ mvn clean install -Dcheckstyle.skip
  3. Import the latest VES certificate into this directory gnbsim-distribution/ 
    1. Download certificate from VES url https://<ipAddress>30417/eventListener/v7 
    2. cd  gnbsim/gnbsim-distribution/
    3. keytool -import -noprompt -trustcacerts -alias dcae -file <certsfile downloaded from VES URL> -keystore jssecacerts -storepass changeit
    4. keytool -importkeystore -srckeystore jssecacerts -srcstoretype pkcs12 -srcalias dcae -destkeystore jssecacerts -deststoretype jks -deststorepass changeit -destalias dcae
  4. cp -r gnbsim-distribution/jssecacerts gnbsim-distribution/target/gnbsim-distribution-1.19.08-SNAPSHOT-hc/gnbsim-distribution-1.19.08-SNAPSHOT/
  5. cp -r gnbsim-distribution/honeycomb gnbsim-distribution/target/gnbsim-distribution-1.19.08-SNAPSHOT-hc/gnbsim-distribution-1.19.08-SNAPSHOT/
  6. cp -r gnbsim-distribution/Dockerfile gnbsim-distribution/target/gnbsim-distribution-1.19.08-SNAPSHOT-hc/gnbsim-distribution-1.19.08-SNAPSHOT/
  7. docker build -t gn gnbsim-distribution/target/gnbsim-distribution-1.19.08-SNAPSHOT-hc/gnbsim-distribution-1.19.08-SNAPSHOT/

Cross check the docker image
docker images | grep gn

To run the Netconf Servers:

  1. cd ran-sim/hcsim-content/gnbsim/honeycomb
  2. Update Ransim(ransimIp), honeycomb(hcIp) and VES IP address at hc/config/gnbsim.json
    1. {
        "ransimIp": "<IPAddress>",
        "ransimPort": 8081,
        "hcIp": "<IPAddress>",
        "hcPort": 2850,
        "endpoint": "ransim/RansimAgent",
        "vesEventListenerUrl": "https://<IPAddress>:30417/eventListener/v7"
      }
  3. Update honeycomb  IP address at hc/docker-compose.yml file.
  4. Step 2(Updating IP Address in config/gnbsim.json) and Step 3(Updating IP Address in docker-compose.yml file) is repeated for all folders (hc, hc-1, cucp1, cucp2, cuup1,cuup2, du1, du2, du3, du4, du5, du6)

      2. Run the up.sh script in ran-sim/hcsim-content/gnbsim/honeycomb. (wait for all the honeycomb servers to come up)

         After execution of the above script, these servers will be mounted in SDNC(check ransim and SDNR logs if the mount request is successful for all the servers). 

         Access the restconf page to view the mounted servers: https://<WorkerVMIpAddress>:30267/apidoc/explorer/index.html


Setup SFPT:

  1. Run the below docker command in the VM where you have setup the netconf servers:

           docker run -v /home/$USER/upload:/home/$USER/sftptest/upload -p 2222:22 -d atmoz/sftp $USER:pass:1001

      2. Give chmod 777 to upload folder which will be created automatically in the home dir.


NOTE: Use sample data attached under CONFIGDB, AAI, RANSIM and CPS if E2E communication service is not done

Further References:

Issues faced during the RAN Simulator set up are documented in Setup related issues.


  • No labels