Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: syntax

...

Copy subnetCapability.json to SO-API Handler pod to configure subnet capabilities at run time.You can copy the file to the pod using the following command

...

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

Sample subnetCapability.json

{
"AN_NF": {
"latency": 5,
"maxNumberofUEs": 200,
"maxThroughput": 90,
"termDensity": 40
},
"AN": {
"latency": 20,
"maxNumberofUEs": 100,
"maxThroughput": 150,
"termDensity": 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
}
}

You can copy the file to the pod using the following command

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.

INSERT

SO Database Update

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

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 ('deleteInstancecreateInstance''1''Custom recipe to delete create communication service-instance if no custom BPMN flow is found''/mso/async/services/DeleteCommunicationServiceCreateCommunicationService', 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 ('activateInstancedeleteInstance''1.0''activate Custom recipe to delete communication service if no custom BPMN flow is found''/mso/async/services/ActivateCommunicationServiceDeleteCommunicationService', 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 ('createInstanceactivateInstance', '1.0', 'Custom recipe to create slice\r\nservice-instance if no custom BPMN flow is foundactivate communication service', '/mso/async/services/CreateSliceServiceActivateCommunicationService', NULL, 180 180, NULL, 'bfca8b32c9252b26-3404f9cd-4e5c4e6c-a441988c-dc42b6823e884d6ff39c6dda');  

Insert ORCHESTRATION_URI into service_recipe,  SERVICE_MODEL_UUID is ServiceProfile.ModelId

INSERT INTO `catalogdb`.`service_recipe`(`ACTION`, `VERSION_STR`, `DESCRIPTION`, `ORCHESTRATION_URI`, `SERVICE_PARAM_XSD`, `RECIPE_TIMEOUT`,
`SERVICE_TIMEOUT_INTERIM`, `SERVICE_MODEL_UUID`) VALUES ('deleteInstancecreateInstance', '1', 'Custom recipe to create slice\r\nservice-instance if no custom BPMN flow is found', '/mso/async/services/DeleteSliceServiceCreateSliceService', 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 ('activateInstancedeleteInstance', '1.0', 'Gr api Custom recipe to activate servicecreate slice\r\nservice-instance if no custom BPMN flow is found', '/mso/async/services/ActivateSliceServiceDeleteSliceService', NULL, 180, NULL, 'bfca8b32-3404-4e5c-a441-dc42b6823e88');
  

5. OOF Configuration - Policy Creation Steps

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

View file
namepolicies_option2_Istanbul.zip
height150

Copy the policy files

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 - Policy Creation Steps

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

Please find the policies for Option2 below, generate the policies outside the OOF pod and push the policies from inside OOF pod, since it has python3 and necessary libraries already installed 

View file
namepolicies_option2.zip
height150

Copy the policy files

unzip policies_option2.zip

kubectl cp policies_option2 -n onap <oof-pod-name>:/opt/osdf

kubectl exec -ti -n onap <oof-pod-name> bash

cd policies_option2/

python3 policy_utils.py create_policy_types policy_typesunzip policies_option2_Istanbul.zip
kubectl cp policies -n onap <oof-pod-name>:/opt/osdf
kubectl exec -ti -n onap <oof-pod-name> bash
cd policies/
python3 policy_utils.py create_policy_types policy_types
python3 policy_utils.py create_and_push_policies nst_policies
python3 policy_utils.py generate_nsi_policies NSTO2
python3 policy_utils.py create_and_push_policies gen_nsi_policies
cd policies/
python3 policy_utils.py generate_nssi_policies EmbbAn_NF minimize latency

python3 policy_utils.py create_and_push_policies gen_nssinst_policies

python3 policy_utils.py generate_nssinsi_policies Tn_ONAP_internal_BH  minimize latency

NOTE: For NST Selection based on latency constraint, please make sure you have updated the latency constraint as property in the design time template of NST as below,

Image Removed

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

Updated slice/service profile mapping - slicing_config.yaml

HAS-API/HAS-DATA - Add data dictionary 

NSTO2

python3 policy_utils.py create_and_push_policies gen_nsi_policies

python3 policy_utils.py generate_nssi_policies EmbbAn_NF minimize latency

python3 policy_utils.py create_and_push_policies gen_nssi_policies

python3 policy_utils.py generate_nssi_policies Tn_ONAP_internal_BH  minimize latency

python3 policy_utils.py create_and_push_policies gen_nssi_policies

NOTE: 

For NST Selection based on latency constraint, please make sure you have updated the latency constraint as property in the design time template of NST as below,

Image Added

Updated slice/service profile mapping - slicing_config.yaml

HAS-API/HAS-DATA - Add data dictionary 

Go to (/opt/has/conductor/conductor/data/plugins/inventory_provider/candidates/slice_profiles_candidate.py) in OOF HAS pod 
update the following :
    "max_bandwidthGo to (conductor/conductor/data/plugins/inventory_provider/candidates/slice_profiles_candidate.py) 
add the following :
    "max_bandwidth": copy_first,
    "jitter": sum,
    "sst": copy_first,
    "latency": sum,
    "resource_sharing_level": copy_first,
    "s_nssai": copy_first,
    "s_nssai_list": copy_first,
    "plmn_id_list": copy_first,
    "plmn_id_Listjitter": copy_firstsum,
    "availabilitysst": copy_first,
    "throughputlatency": minsum,
    "reliabilityresource_sharing_level": copy_first,
    "max_number_of_uess_nssai": copy_first,
    "exps_datanssai_rate_ullist": copy_first,
    "expplmn_dataid_rate_dllist": copy_first,
    "ueplmn_mobilityid_levelList": copy_first,
    "activity_factoravailability": copy_first,
    "survival_timethroughput": copy_firstmin,
    "max_number_of_connsreliability": copy_first,
    "coveragemax_areanumber_taof_listues": copy_first,
    "maxexp_numberdata_ofrate_pdu_sessionul": copy_first,
    "max_throughputexp_data_rate_dl": copy_first,
    "perfue_mobility_reqlevel": copy_first,
    "terminalactivity_densityfactor": copy_first,

update those and restart the container

NOTE:

  • The service name given for creating the policy must match with the service name in the request
  • The scope fields in the policies should match with the value in the resourceSharingLevel(non-shared/shared). Do modify the policy accordingly.
  • Check the case of the attributes with the OOF request with the attribute map (camel to snake and snake to camel) in config/slicing_config.yaml, if any mismatch found modify the attribute map accordingly.
  • 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>

6. External RAN NSSMF Simulator

Deployment Guide for External RAN NSSMF Simulator

1. Download:

...

git clone https://gerrit.onap.org/r/integration

cd integration/test/mocks/ran-nssmf-simulator

2. Environment Setup (Optional):

1) The default listening port of RESTful API is 8443, and you can set environment variable RAN_NSSMF_REST_PORT to change it, such as:

...

2) The default username and password are in RanNssmfSimulator/etc/auth.json, and you can edit the file to change them or add new ones.

...

There are two options to run the simulator:

Option 1. Directly run it in the current directory:

...

pip3 install -r requirements.txt

python3 main.py

Option 2. Install it using setuptools, and run it in any directory:

...

python3 setup.py install --user

python3 -m RanNssmfSimulator.MainApp

Register to ONAP ESR

1. Add an esr-thirdparty-sdnc to ESR:

...

Run command:

...

    "survival_time": copy_first,
    "max_number_of_conns": copy_first,
    "coverage_area_ta_list": copy_first,
    "max_number_of_pdu_session": copy_first,
    "max_throughput": copy_first,
    "perf_req": copy_first,
    "terminal_density": copy_first

update those and restart the container

NOTE:

  • The service name given for creating the policy must match with the service name in the request
  • The scope fields in the policies should match with the value in the resourceSharingLevel(non-shared/shared). Do modify the policy accordingly.
  • Check the case of the attributes with the OOF request with the attribute map (camel to snake and snake to camel) in config/slicing_config.yaml, if any mismatch found modify the attribute map accordingly.
  • 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>

      CPS Configuration:

      Refer CPS Configuration to setup standalone CPS and configuration of OOF and CPS.

6. External RAN NSSMF Simulator

Deployment Guide for External RAN NSSMF Simulator

1. Download:

git clone https://gerrit.onap.org/r/integration

cd integration/test/mocks/ran-nssmf-simulator


2. Environment Setup (Optional):

1) The default listening port of RESTful API is 8443, and you can set environment variable RAN_NSSMF_REST_PORT to change it, such as:

export RAN_NSSMF_REST_PORT=18443


2) The default username and password are in RanNssmfSimulator/etc/auth.json, and you can edit the file to change them or add new ones.


3. Install and Run:

There are two options to run the simulator:

Option 1. Directly run it in the current directory:

pip3 install -r requirements.txt

python3 main.py


Option 2. Install it using setuptools, and run it in any directory:

python3 setup.py install --user

python3 -m RanNssmfSimulator.MainApp

Register to ONAP ESR

Add an esr-thirdparty-sdnc and esr-system-info 

...

Example of sdnc-an-01.json:

...

{

  "thirdparty-sdnc-id": "sdnc-an-01"

}

2. Add an esr-system-info (RAN NSSMF) to ESR:

Run command:

curl

-s

-k -

u "

X PUT "https://AAI:

AAI" -H "X-FromAppId: testApp" -H "X-TransactionId: 1001" -H "Content-Type: application/json" -H "

AAI@<worker-vm-ip>:30233/aai/v23/external-system/esr-thirdparty-sdnc-list/esr-thirdparty-sdnc/sdnc-an-01" \

-H 'Accept: application/json

"

' \

-

X PUT 

H 'X-FromAppId: AAI' \

-H 'X-TransactionId: 1' \

-H 'Content-Type: application/json' \

-d '{

"thirdparty-sdnc-id":"sdnc-an-01",

    "product-name": "nssmf",

                 "

https://aai.onap:30233/aai/v20/external-system/esr-thirdparty-sdnc-list/esr-thirdparty-sdnc/sdnc-an-01/

esr-system-info-list

/esr-system-info/nssmf-an-01 -d @nssmf-an-01.json

":{"esr-system-info":[{

Example of nssmf-an-01.json:

{
 

"esr-system-info-id": "nssmf-an-01",

 

"

type

system-name": "

an

E2E",

 

"vendor": "huawei",

 

"

system-

type": "an",

"

thirdparty-sdnc

user-name": "admin",

 

"

ip-address

password": "

192.168.35.83

123456",

 

"

port

system-type": "

8443

thirdparty-sdnc",

 

"

user

ip-

name

address": "

admin

<ip-address-of-simulator>",

 

"

password

port": "

123456

8443",

 "ssl-cacert": "test.ca"

}]}

}'

Where, ip-address is the IP address or hostname which runs the External RAN NSSMF Simulator, port is the listening port of RESTful API of the simulator,

user-name and password are set in config file RanNssmfSimulator/etc/auth.json of the simulator.

...

Refer ACTN Simulator User Guide to setup ACTN-simulator or follow the below steps to launch and initialize domain controllers,

Refer Transport Slicing Configuration and Operation Guidance for NextHop details of AN &CN

Step 1. Fetch the simulator docker image

...

For demonstration purposes, two domain controllers are required, both need to be properly launched and initialized. The initialization payloads are attached below.

View file
namepnc-init-payload-1-r9.json
height150
View file
namepnc-init-payload-2
    
-r9.json
height150

ESR Registration using AAI ESR Url:

...

Code Block
languagetext
titleesr_registration
linenumberstruecollapsetrue
curl -k -X PUT "https://AAI:AAI@<worker-vmIp>:30233/aai/v23/external-system/esr-thirdparty-sdnc-list/esr-thirdparty-sdnc/ff9ef162-951d-4e14-9ce6-b4fa0adf896b" \
-H 'Accept: application/json' \
-H 'X-FromAppId: AAI' \
-H 'X-TransactionId: 1' \
-H 'Content-Type: application/json' \
-d '{
"thirdparty-sdnc-id":"ff9ef162-951d-4e14-9ce6-b4fa0adf896b",
    "location": "edge",
    "product-name": "TSDN",
	 "esr-system-info-list":{"esr-system-info":[{
"esr-system-info-id": "7c29b9df-feef-4fa7-b56d-3e39f5ef4a90",
"system-name": "sdnc2",
"vendor": "HUAWEI",
"type": "WAN",
"version": "v1.0",
"service-url": "http://<simulator-ip>:<simulator-port>",
"user-name": "onos",
"password": "rocks",
"system-type": "thirdparty_SDNC",
"protocol": "restconf"
}]}
}' 

...