Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The document describes the step by step These sub pages describe the procedure to setup E2E network slicing use case demo setup for Guilin.

...

ONAP Portal: https://portal.api.simpledemo.onap.org:30225/ONAPPORTAL/login.htm (Username:cs0008, Password:demo123456!)

SDC UUI: https://sdc.api.fe.simpledemo.onap.org:30207/sdc1/portal#!/dashboard

...

Template Design for Option 1

...

2.UUI Configuration:

Configure CST template UUID and Invariant UUID in slicing.properties file of uui-server microservice

In uui-server microservice, modify the following configuration file, /home/UUI/config/slicing.properties

Add or update the parameters slicing.serviceInvariantUuid and parameter slicing.serviceUuid.

The values of these two parameters come from CST template which can be find on SDC page.

Image Removed

3.MSB Configuration

Register so-orchestrationTasks and so-serviceInstances interface to MSB.

Interface registration can be done through portal.

Steps(Portal):

Link: https://{{master server ip}}:30284/iui/microservices/default.html

 1.Select ‘’ in the left pane

 2. Click 'Service Register' button.

Image Removed

 3. Input the basic info as the picture shows(also refer to the registration info provided above)

Image Removed

4. Click Add Host button.

    Input IP Address and Port then click the 'SAVE' button. (Use cmd ’kubectl get svc -n onap so‘ to confirm IP and port.)

Image Removed

4. SO:

Copy subnetCapability.json to SO-API Handler pod to configure subnet capabilities at run time.

Expand
titleSample subnetCapability.json

{
"AN_NF": {
"latency": 5,
"maxNumberofUEs": 200,
"maxThroughput": 90,
"terminalDensity": 40
},

"AN": {
"latency": 5,
"maxNumberofUEs": "100",
"maxThroughput": "150",
"terminalDensity": "50"
},
"CN": {
"latency": 10,
"maxThroughput": 50,
"maxNumberofConns": 100
},
"TN_FH": {
"latency": 10,
"maxThroughput": 90
},
"TN_MH": {
"latency": 5,
"maxThroughput": 90
},
"TN_BH": {
"latency": 10,
"maxThroughput": 100
}
}

...

Code Block
languagebash
themeEmacs
kubectl cp subnetCapability.json -n onap <so-apih-pod-name>:/app

SO Database Update

Insert ORCHESTRATION_URI into service_recipe,  SERVICE_MODEL_UUID replaced by CST.ModelId.

Code Block
languagebash
themeEmacs
INSERT INTO `catalogdb`.`service_recipe`(`ACTION`, `VERSION_STR`, `DESCRIPTION`, `ORCHESTRATION_URI`, `SERVICE_PARAM_XSD`, `RECIPE_TIMEOUT`, `SERVICE_TIMEOUT_INTERIM`, `SERVICE_MODEL_UUID`) VALUES ('createInstance', '1', 'Custom recipe to create communication service-instance if no custom BPMN flow is found', '/mso/async/services/CreateCommunicationService', NULL, 180, NULL, 'c9252b26-f9cd-4e6c-988c-4d6ff39c6dda');
 
INSERT INTO `catalogdb`.`service_recipe`(`ACTION`, `VERSION_STR`, `DESCRIPTION`, `ORCHESTRATION_URI`, `SERVICE_PARAM_XSD`, `RECIPE_TIMEOUT`, `SERVICE_TIMEOUT_INTERIM`, `SERVICE_MODEL_UUID`) VALUES ('deleteInstance', '1', 'Custom recipe to delete communication service if no custom BPMN flow is found', '/mso/async/services/DeleteCommunicationService', NULL, 180, NULL, 'c9252b26-f9cd-4e6c-988c-4d6ff39c6dda');
 
INSERT INTO `catalogdb`.`service_recipe`(`ACTION`, `VERSION_STR`, `DESCRIPTION`, `ORCHESTRATION_URI`, `SERVICE_PARAM_XSD`, `RECIPE_TIMEOUT`, `SERVICE_TIMEOUT_INTERIM`, `SERVICE_MODEL_UUID`) VALUES ('activateInstance', '1.0', 'activate communication service', '/mso/async/services/ActivateCommunicationService', NULL, 180, NULL, 'c9252b26-f9cd-4e6c-988c-4d6ff39c6dda');

Insert ORCHESTRATION_URI into service_recipe,  SERVICE_MODEL_UUID is ServiceProfile.ModelId

Code Block
languagebash
themeEmacs
INSERT INTO `catalogdb`.`service_recipe`(`ACTION`, `VERSION_STR`, `DESCRIPTION`, `ORCHESTRATION_URI`, `SERVICE_PARAM_XSD`, `RECIPE_TIMEOUT`,
`SERVICE_TIMEOUT_INTERIM`, `SERVICE_MODEL_UUID`) VALUES ('createInstance', '1', 'Custom recipe to create slice\r\nservice-instance if no custom BPMN flow is found', '/mso/async/services/CreateSliceService', NULL, 180, NULL,'bfca8b32-3404-4e5c-a441-dc42b6823e88');
 
INSERT INTO `catalogdb`.`service_recipe`(`ACTION`, `VERSION_STR`, `DESCRIPTION`, `ORCHESTRATION_URI`, `SERVICE_PARAM_XSD`, `RECIPE_TIMEOUT`, `SERVICE_TIMEOUT_INTERIM`, `SERVICE_MODEL_UUID`) VALUES ('deleteInstance', '1', 'Custom recipe to create slice\r\nservice-instance if no custom BPMN flow is found', '/mso/async/services/DeleteSliceService', NULL, 180, NULL, 'bfca8b32-3404-4e5c-a441-dc42b6823e88');
 
INSERT INTO `catalogdb`.`service_recipe`(`ACTION`, `VERSION_STR`, `DESCRIPTION`, `ORCHESTRATION_URI`, `SERVICE_PARAM_XSD`, `RECIPE_TIMEOUT`, `SERVICE_TIMEOUT_INTERIM`, `SERVICE_MODEL_UUID`) VALUES ('activateInstance', '1.0', 'Gr api recipe to activate service-instance', '/mso/async/services/ActivateSliceService', NULL, 180, NULL, 'bfca8b32-3404-4e5c-a441-dc42b6823e88');

5.OOF Configuration

OSDF CHANGES(FOR NST SELECTION)

New NST templates can be added in. There is a json file present in the osdf folder, where the nst templates can be added with the corresponding ModelId and ModelInvariantUUID.

The json file is found in the osdf folder in the corresponding path

apps/nst/optimizers/conf/configIinputs.json

Image Removed

6. Policy Creation Steps

Refer Optimization Policy Creation Steps for optimization policy creation and deployment steps

Refer Policy Models and Sample policies - NSI selection for sample policies 

NOTE:

...

You need to restart the OOF docker container once you updated the slicing_config.yaml, you can do it using the following steps,

  • Login to the worker VM where the OOF container is running. You can find the worker node by running (kubectl get pods -n onap -o wide | grep dev-oof)
  • Find the container using docker ps | grep optf-osdf
  • Restart the container using docker restart <container id>

7.AAI Configuration:

Create customer id  : 

curl --user AAI:AAI -X PUT -H "X-FromAppId:AAI" -H  "X-TransactionId:get_aai_subscr" -H "Accept:application/json" -H "Content-Type:application/json" -k -d '{ 

"global-customer-id":"5GCustomer", 

"subscriber-name":"5GCustomer", 

"subscriber-type":"INFRA" 

}' "https://<worker-vm-ip>:30233/aai/v21/business/customers/customer/5GCustomer" 

Create service type:

curl --user AAI:AAI -X PUT -H "X-FromAppId:AAI" -H  "X-TransactionId:get_aai_subscr" -H "Accept:application/json" -H "Content-Type:application/json" -k https://<worker-vm-ip>:30233/aai/v21/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G 

8. Ran-sim Setup steps:

Refer RAN-Sim setup to setup RAN-simulator

Refer RAN-Sim for ransim impacts done for Guilin Release

9. Honeycomb:

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

Build Steps:

...

To run the Netconf Servers:

Run the below command from ~/gnbsim/ransim_rannetwork/hc directory.

docker-compose up -d

For slicing setup, 12 netconf servers are required. Copy the hc directory 11 more time and rename it.

Change the external port in the docker-compose files for every netconf server.

While running the docker-compose up -d command, these servers will be mounted in SDNC. 

10.ConfigDB:

Config DB is a spring boot application that works with mariaDB. DB schema details are available at Config DB.

Install config DB application in a separate VM. MariaDB container should be up and running to access the config DB APIs.

Refer https://wiki.onap.org/display/DW/Config+DB+setup for configDB setup.

11. Core NF Simulator Setup

Refer Core NF Simulator setup to setup Core NF Simulator.

12. SDNC:

Install SDNC using OOM charts and the below pods should be running.

helm install sdnc -n dev-sdnc --namespace onap --set global.masterPassword=guilin2021 -f onap/values.yaml

Code Block
languagetext
titleSDNC Pods
kubectl get pods -n onap | grep sdnc
dev-sdnc-0                                                        2/2     Running                           0          46d
dev-sdnc-ansible-server-6b449f8d8-7mjld                           1/1     Running                           0          46d
dev-sdnc-dbinit-job-mwr8s                                         0/1     Completed                         0          46d
dev-sdnc-dgbuilder-86c9cb55bb-svcsh                               1/1     Running                           0          46d
dev-sdnc-dmaap-listener-6bd7fbc64f-dl4ch                          1/1     Running                           0          46d
dev-sdnc-sdnrdb-init-job-824vl                                    0/1     Completed                         0          46d
dev-sdnc-ueb-listener-769f74cb4b-wgcw7                            1/1     Running                           0          46d
dev-sdnc-web-5b75c68fd8-zfsn6                                     1/1     Running                           0          46d

Check the below in SDNC pod (dev-sdnc-0).

  1. Latest ran-slice-api-dg.properties (/distribution/odlsli/src/main/properties/ran-slice-api-dg.properties) should be available at /opt/onap/ccsdk/data/properties/
  2. All ranSlice*.json template files (/distribution/platform-logic/restapi-templates/src/main/json) should present at /opt/onap/ccsdk/restapi/templates/
  3. DG XML files from /distribution/platform-logic/ran-slice-api/src/main/xml should present at /opt/onap/sdnc/svclogic/graphs/ranSliceapi

Note:

If SDN-C deletion is unsuccessful due to the leftover residues, use the below commands to delete it completely.

Expand
titleDelete SDNC

kubectl get secrets -n onap --no-headers=true | awk '/dev-sdnc/{print $1}' | xargs kubectl delete secrets -n onap
kubectl get configmap -n onap --no-headers=true | awk '/dev-sdnc/{print $1}' | xargs kubectl delete configmap -n onap
kubectl get svc -n onap --no-headers=true | awk '/^sdn/{print $1}' | xargs kubectl delete svc -n onap
kubectl get deployment -n onap --no-headers=true | awk '/dev-sdnc/{print $1}' | xargs kubectl delete deployment -n onap
kubectl get statefulsets -n onap --no-headers=true | awk '/dev-sdnc/{print $1}' | xargs kubectl delete statefulsets -n onap
kubectl get jobs -n onap --no-headers=true | awk '/dev-sdnc/{print $1}' | xargs kubectl delete jobs -n onap
kubectl get pvc -n onap --no-headers=true | awk '/dev-sdnc/{print $1}' | xargs kubectl delete pvc -n onap
kubectl get pv -n onap --no-headers=true | awk '/dev-sdnc/{print $1}' | xargs kubectl delete pv -n onap
kubectl get secrets -n onap --no-headers=true | awk '/dev-elastic/{print $1}' | xargs kubectl delete secrets -n onap
kubectl get configmap -n onap --no-headers=true | awk '/dev-elastic/{print $1}' | xargs kubectl delete configmap -n onap
kubectl get svc -n onap --no-headers=true | awk '/^elastic/{print $1}' | xargs kubectl delete svc -n onap
kubectl get deployment -n onap --no-headers=true | awk '/dev-elastic/{print $1}' | xargs kubectl delete deployment -n onap
kubectl get statefulsets -n onap --no-headers=true | awk '/dev-elastic/{print $1}' | xargs kubectl delete statefulsets -n onap
kubectl get jobs -n onap --no-headers=true | awk '/dev-elastic/{print $1}' | xargs kubectl delete jobs -n onap
kubectl get pvc -n onap --no-headers=true | awk '/dev-elastic/{print $1}' | xargs kubectl delete pvc -n onap
kubectl get pv -n onap --no-headers=true | awk '/dev-elastic/{print $1}' | xargs kubectl delete pv -n onap
kubectl get secrets -n onap --no-headers=true | awk '/dev-neng/{print $1}' | xargs kubectl delete secrets -n onap
kubectl get configmap -n onap --no-headers=true | awk '/dev-neng/{print $1}' | xargs kubectl delete configmap -n onap
kubectl get svc -n onap --no-headers=true | awk '/^neng/{print $1}' | xargs kubectl delete svc -n onap
kubectl get deployment -n onap --no-headers=true | awk '/dev-neng/{print $1}' | xargs kubectl delete deployment -n onap
kubectl get statefulsets -n onap --no-headers=true | awk '/dev-neng/{print $1}' | xargs kubectl delete statefulsets -n onap
kubectl get jobs -n onap --no-headers=true | awk '/dev-neng/{print $1}' | xargs kubectl delete jobs -n onap
kubectl get pvc -n onap --no-headers=true | awk '/dev-neng/{print $1}' | xargs kubectl delete pvc -n onap
kubectl get pv -n onap --no-headers=true | awk '/dev-neng/{print $1}' | xargs kubectl delete pv -n onap
kubectl delete secret -n onap dev-aai-keystore
kubectl delete secret -n onap dev-pol-basic-auth-secret
kubectl get configmap -n onap --no-headers=true | awk '/dev-sdnr/{print $1}' | xargs kubectl delete configmap -n onap
kubectl get pvc -n onap --no-headers=true | tail -n+2 | awk '/dev-sdn/{print $1}' | xargs kubectl patch pvc -n onap -p '{"metadata":{"finalizers":null}}'
kubectl get deployment -n onap --no-headers=true | awk '/dev-sdn/{print $1}' | xargs kubectl delete deployment -n onap
kubectl delete deployment -n onap dev-network-name-gen
kubectl get statefulsets -n onap --no-headers=true | awk '/dev-sdnr/{print $1}' | xargs kubectl delete statefulsets -n onap

to delete PV:

kubectl get pv -n onap --no-headers=true | tail -n+2 | awk '/dev-sdn/{print $1}' | xargs kubectl patch pv -n onap -p '{"metadata":{"finalizers":null}}'

kubectl delete pv -n onap dev-sdnrdb-master-pv-0 --grace-period=0 --force
kubectl delete pv -n onap dev-sdnrdb-master-pv-1 --grace-period=0 --force
kubectl delete pv -n onap dev-sdnrdb-master-pv-2 --grace-period=0 --force

DMAAP Messages:

Refer SDN-R_impacts for Dmaaps messages that can be used as an SDN-R input for RAN slice instantiation, modification, activation, deactivation and termination.

13. VES Collector

VES collector receives the PM data from RAN simulator and posts it in message router.

Sample Fileready notification received from RAN-Simulator:

Code Block
titleFileReady Event
collapsetrue
{
	"event": {
		"commonEventHeader": {
			"version": "4.0.1",
			"vesEventListenerVersion": "7.0.1",
			"domain": "notification",
			"eventName": "Notification_RnNode-Slicing_FileReady",
			"eventId": "FileReady_1797490e-10ae-4d48-9ea7-3d7d790b25e1",
			"lastEpochMicrosec": 8745745764578,
			"priority": "Normal",
			"reportingEntityName": "cucpserver2",
			"sequence": 0,
			"sourceName": "cucpserver2",
			"startEpochMicrosec": 8745745764578,
			"timeZoneOffset": "UTC+05.30"
		},
		"notificationFields": {
			"changeIdentifier": "PM_MEAS_FILES",
			"changeType": "FileReady",
			"notificationFieldsVersion": "2.0",
			"arrayOfNamedHashMap": [{
				"name": "A2021-01-15T05-46-30.387-2021-01-15T05-46-30.387-7836-cucpserver2.bin.gz",
				"hashMap": {
					"location": "ftpes://192.168.0.101:22/ftp/rop/A2021-01-15T05-46-30.387-2021-01-15T05-46-30.387-7836-cucpserver2.bin.gz",
					"compression": "gzip",
					"fileFormatType": "org.3GPP.32.435#measCollec",
					"fileFormatVersion": "V10"
				}
			}]
		}
	}
}

14. Datafile Collector

Datafile Collector reads the File Ready VES notifications from the message router. It fetches the PM file from the simulator using the FTP/SFTP location in the notification and places it in the data router. PM Mapper reads this PM file (xml format).

Refer DataFile Collector (5G Usecase) for the set up

15. PM Mapper

PM Mapper should be in running state.

This component reads the PM data file(xml) from the data router, generates PM events (json format) and posts the message at the topic org.onap.dmaap.mr.PERFORMANCE_MEASUREMENTS. This topic is created during the start up of PM-Mapper.

Slice Analysis MS reads the data from this topic and further does the analysis on it.

Refer PM-Mapper (5G Usecase) for PM Mapper set up.

16. Slice Analysis MS

Refer DCAE R7 Slice Analysis MS (Network Slicing Usecase) for Slice Analysis MS set up.

17. Policies for Slice Analysis MS:

Execute these curl requests from any of the running pods.

Policy Creation:

curl -k --silent --user 'healthcheck: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, 

Code Block
titleSLA 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": "frankfurt"
               }
            }
         }
        ]
    }
}

To push the policy:

curl --silent -k --user 'healthcheck: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,

...

titleSLA MS - Push the Policy

...

This page explains the steps to be followed to create the templates needed for supporting option 1 deployment.

Manual Configurations

This page covers the configuration to be taken in various ONAP components after the installation.

Core & RAN Simulators

This page contains the reference to set up the simulators for E2E network slicing use case.

ClosedLoop Setup

This page is contains the reference for additional ONAP components that are needed to support closed loop.

...