Versions Compared

Key

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

1. 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

2. 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

3. SO Database Update

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

...

1. 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 Added

2. 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 Added

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

Image Added

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 Added

5.  Input the basic info as the picture shows for so-orchestrationTasks (also refer to the registration info provided above)

Image Added

6. You should add a  aai-business service for MSB.
Steps:

  • Got to msb https://{{master server ip}}:30284/iui/microservices/default.html
  • Select "Service Discover" from left panel
  • Click "Service Register" button
    • ADD the following info:
      Service Name: aai-business
      Url: /aai/v13/business
      Protocol: REST
      Enable SSL to True
      Version: v13
      Load balancer: round-robin
      Visualranfe: InSystem
    • Add host:
      AAI service ip and port (8443)
  • Save all

3. 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 ('

createInstance

deleteInstance', '1', 'Custom recipe to

create

delete communication service

-instance

if no custom BPMN flow is found', '/mso/async/services/

CreateCommunicationService

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 ('

deleteInstance

activateInstance', '1.0', '

Custom recipe to delete

activate communication service

if no custom BPMN flow is found

', '/mso/async/services/

DeleteCommunicationService

ActivateCommunicationService', NULL, 180, NULL, 'c9252b26-f9cd-4e6c-988c-4d6ff39c6dda');

 
INSERT INTO `catalogdb`.`service_

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 ('

activateInstance

createInstance', '1

.0

', '

activate communication service

Custom recipe to create slice\r\nservice-instance if no custom BPMN flow is found', '/mso/async/services/

ActivateCommunicationService

CreateSliceService', NULL, 180, NULL,

 

'

c9252b26

bfca8b32-

f9cd

3404-

4e6c

4e5c-

988c

a441-

4d6ff39c6dda

dc42b6823e88');

Insert ORCHESTRATION_URI into service_recipe,  SERVICE_MODEL_UUID is ServiceProfile.ModelId

INSERT INTO `catalogdb`.`service_recipe`(`ACTION`,

 
INSERT INTO `catalogdb`.`service_recipe`(`ACTION`, `VERSION_STR`, `DESCRIPTION`, `ORCHESTRATION_URI`, `SERVICE_PARAM_XSD`, `RECIPE_TIMEOUT`,


`SERVICE_TIMEOUT_INTERIM`, `SERVICE_MODEL_UUID`) VALUES ('

createInstance

deleteInstance', '1', 'Custom recipe to create slice\r\nservice-instance if no custom BPMN flow is found', '/mso/async/services/

CreateSliceService

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 ('

deleteInstance

activateInstance', '1.0', '

Custom

Gr api recipe to

create slice\r\nservice

activate service-instance

if no custom BPMN flow is found

', '/mso/async/services/

DeleteSliceService

ActivateSliceService', 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');

4. A&AI Configuration

If the service distribution to A&AI failed, like the picture shows bellow:

Image Removed

Add 'ServiceProfile' and 'NSTAR' model to A&AI through postman.(ServiceProfile/NSTAR Model Id and Invariant Id can be find on SDC page.)

Postman set as follows :

Image Removed

'ServiceProfile' request· body :

Elite soft json viewer
hideMenutrue
width700
hideBordertrue
height260
{
	"model-invariant-id": "045e2672-1c46-4fca-810d-95f8cdb8bc38",
	"model-type": "service",
	"model-vers": {
	    "model-ver": [
	        {
	            "model-version-id": "bfca8b32-3404-4e5c-a441-dc42b6823e88",
	            "model-name": "ServiceProfile",
	            "model-version": "1.0"
	        }
	    ]
	}
}

'NSTAR' request· body :

Elite soft json viewer
hideMenutrue
width700
hideBordertrue
height260
{
	"model-invariant-id": "73e7212d-a340-4626-a050-a9d07b96e146",
	"model-type": "resource",
	"model-vers": {
	    "model-ver": [
	        {
	            "model-version-id": "7d33bac2-7372-45d6-89a3-d8b2ecf16f87",
	            "model-name": "NSTAR",
	            "model-version": "1.0"
	        }
	    ]
	}
}

Create Customer and service-subscription

Create customer(5GCustomer) and service-subscription(5G) in AAI.

Image Removed

Image Removed

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

OSDF CHANGES(FOR NSI SELECTION)

1) In OOF charts- oom/kubernetes/oof/resources/config/common-config.yaml, the following changes has to be made before deploying oof.

  •  oof/resources/config/common-config.yml has to be updated to use local policies instead of remote policies. change "global_disabled" from True to False
Code Block
languageyml
themeRDark
collapsetrue
osdf_temp:  # special configuration required for "workarounds" or testing
    local_policies:
        global_disabled: False
  •  In  oof/resources/config/common-config.yml change the model name -  whenever the model name changes, it has to be updated here 

            EG. when the model name is "Embb_NST". Replace the keys with "slice_selection_policy_dir_embb_nst" &  "slice_selection_policy_dir_embb_nst" 

            This block is an illustration when the model name is- "URLLC_1"

Code Block
languageyml
themeRDark
collapsetrue
slice_selection_policy_dir_urllc_1: "./test/policy-local-files/"
slice_selection_policy_files_urllc_1:

2) AAI preload script should be executed (when we need shared nsi solution to be returned in the response)

This preload AAI  script can be run by passing the model invariant id and model version id of NST and NSST in the respective order

( ./pre_v1.sh  <model-inv-id of NST>  <model-vers-id of NST>  <model-inv-id of NSST>  <model-vers-id of NSST> )

Code Block
languageyml
themeRDark
collapsetrue
#./pre_v1.sh  2d5b9bc2-0ece-4b5c-b5f7-dcdc19f53ad1 9507fc4a-37d3-4024-a991-9a56c16c4dc0 c0eeaa3b-625c-4518-bd1f-f01cc784813c 836eb219-346d-4b8b-8376-b0c4d17954a9
Code Block
languagetext
titleAAI preload script
linenumberstrue
collapsetrue
#!/bin/bash
echo "preloading AAI data";
result=
resourceversion=
result=$(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://10.0.0.9:30233/aai/v14/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G/service-instances/service-instance/4115d3c8-dd59-45d6-b09d-e756dee9b518 -d '{
    "service-instance-id": "4115d3c8-dd59-45d6-b09d-e756dee9b518",
    "service-instance-name": "nsi_test_0211",
    "service-type": "embb",
    "service-role": "nsi",
    "model-invariant-id": "'"$1"'",
    "model-version-id": "'"$2"'",
    "orchestration-status": "active"}')
echo $result
result=$(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://10.0.0.9:30233/aai/v14/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G/service-instances/service-instance/1a636c4d-5e76-427e-bfd6-241a947224b0 -d '{
    "service-instance-id": "1a636c4d-5e76-427e-bfd6-241a947224b0",
    "service-instance-name": "nssi_test_0211",
    "service-type": "embb",
    "service-role": "nssi",
    "environment-context": "cn",
    "model-invariant-id": "'"$3"'",
    "model-version-id": "'"$4"'",
    "orchestration-status": "active"}')
echo $result
resourceversion=$(curl --user AAI:AAI -X GET -H "X-FromAppId:AAI" -H  "X-TransactionId:get_aai_subscr" -H "Accept:application/json" -H "Content-Type:application/json" -k https://10.0.0.9:30233/aai/v14/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G/service-instances/service-instance/4115d3c8-dd59-45d6-b09d-e756dee9b518 | jq --raw-output '."resource-version"')
result=$(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://10.0.0.9:30233/aai/v14/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G/service-instances/service-instance/4115d3c8-dd59-45d6-b09d-e756dee9b518 -d '{
    "service-instance-id": "4115d3c8-dd59-45d6-b09d-e756dee9b518",
    "service-instance-name": "nsi_test_0211",
    "service-type": "embb",
    "service-role": "nsi",
    "orchestration-status": "active",
    "model-invariant-id": "'"$1"'",
    "model-version-id": "'"$2"'",
    "resource-version":"'"$resourceversion"'",
    "relationship-list": {
        "relationship": [
            {
                "related-to": "service-instance",
                "relationship-label": "org.onap.relationships.inventory.ComposedOf",
                "related-link": "/aai/v16/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G/service-instances/service-instance/1a636c4d-5e76-427e-bfd6-241a947224b0",
                "relationship-data": [
                    {
                        "relationship-key": "customer.global-customer-id",
                        "relationship-value": "5GCustomer"
                    },
                    {
                        "relationship-key": "service-subscription.service-type",
                        "relationship-value": "5G"
                    },
                    {
                        "relationship-key": "service-instance.service-instance-id",
                        "relationship-value": "1a636c4d-5e76-427e-bfd6-241a947224b0"
                    }
                ],
                "related-to-property": [
                    {
                        "property-key": "service-instance.service-instance-name",
                        "property-value": "nssi_test_0211"
                    }
                ]
            }
        ]
    }
}')
echo $result
resourceversion=$(curl --user AAI:AAI -X GET -H "X-FromAppId:AAI" -H  "X-TransactionId:get_aai_subscr" -H "Accept:application/json" -H "Content-Type:application/json" -k https://10.0.0.9:30233/aai/v19/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G/service-instances/service-instance/1a636c4d-5e76-427e-bfd6-241a947224b0/slice-profiles/slice-profile/cdad9f49-4201-4e3a-aac1-b0f27902c299 | jq --raw-output '."resource-version"')
echo $resourceversion
result=$(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://10.0.0.9:30233/aai/v19/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G/service-instances/service-instance/1a636c4d-5e76-427e-bfd6-241a947224b0/slice-profiles/slice-profile/cdad9f49-4201-4e3a-aac1-b0f27902c299 -d '{
                "profile-id": "cdad9f49-4201-4e3a-aac1-b0f27902c299",
                "latency": 5,
                "max-number-of-UEs": 0,
                "coverage-area-TA-list": "[{\"province\":\"??\",\"city\":\"???\",\"county\":\"???\",\"street\":\"?????\"}]",
                "ue-mobility-level": "stationary",
                "resource-sharing-level": "shared",
                "exp-data-rate-UL": 100,
                "exp-data-rate-DL": 100,
                "activity-factor": 0,
                "e2e-latency": 0,
                "jitter": 0,
                "survival-time": 0,
                "exp-data-rate": 0,
                "payload-size": 0,
                "traffic-density": 0,
                "conn-density": 0,
                "reliability":99.999,
                "resource-version":"'"$resourceversion"'"
            }')
echo $result
exit

3) Local policies (vnf, subscriber & threshold policy) should be copied to the osdf pod 

(i) Execute the below script in the test environment by passing nst name, nsst name, model invariant id of NSST & model version id (aka) model uuid of NSST (in the same order as mentioned here)

./policy.sh  <NST name>  <NSST name>  <model-invariant-id of NSST>  <model-version-id of NSST>

Code Block
languageyml
themeRDark
collapsetrue
#./policy.sh  EmbbNst EmbbCn 5t636c4d-5e76-427e-bfd6-241a947224b0 1a636c4d-5e76-427e-bfd6-241a947224b0
Code Block
languagepowershell
themeRDark
titlepolicy.sh
collapsetrue
mkdir test
cd test
mkdir policy-local-files
cd policy-local-files
cat <<EOF >vnfPolicy_URLLC_Core_1.json
{
  "OSDF_FRANKFURT.vnfPolicy_URLLC_Core_1": {
    "type": "onap.policies.optimization.resource.VnfPolicy",
    "version": "1.0.0",
    "type_version": "1.0.0",
    "metadata": {
      "policy-id": "OSDF_FRANKFURT.vnfPolicy_URLLC_Core_1",
      "policy-version": 1
    },
    "properties": {
      "scope": [
        "OSDF_FRANKFURT",
        "$1",
        "$2"
      ],
      "resources": [
        "$2"
      ],
      "services": [
        "$1"
      ],
      "identity": "vnf_URLLC_Core_1",
      "applicableResources": "any",
      "vnfProperties": [
        {
          "inventoryProvider": "aai",
          "inventoryType": "nssi",
          "region": "RegionOne",
          "attributes": {
            "orchestrationStatus": "active",
            "service-role": "nssi",
            "modelInvariantId":"$3",
            "modelVersionId":"$4"
          }
        }
      ]
    }
  }
}
EOF
cat <<EOF >thresholdPolicy_URLLC_Core_1.json
{
                   "OSDF_FRANKFURT.Threshold_URLLC_Core_1":{
                      "type":"onap.policies.optimization.resource.ThresholdPolicy",
                      "version":"1.0.0",
                      "type_version":"1.0.0",
                      "metadata":{
                         "policy-id":"OSDF_FRANKFURT.Threshold_URLLC_Core_1",
                         "policy-version":1
                      },
                      "properties":{
                         "scope":[
                            "OSDF_FRANKFURT",
                            "$1",
                            "$2"
                         ],
                         "resources":[
                            "$2"
                         ],
                         "services":[
                            "$1"
                         ],
                         "geography": [],
                         "identity":"Threshold_URLLC_Core_1",
                         "thresholdProperties":[
                               {
                                  "attribute":"latency",
                                  "operator":"lte",
                                  "threshold":5,
                                  "unit":"ms"
                               }
                         ]
                      }
                   }
}
EOF
cat <<EOF >subscriber_policy_URLLC_1.json
{
  "OSDF_FRANKFURT.SubscriberPolicy_URLLC_1": {
    "type": "onap.policies.optimization.service.SubscriberPolicy",
    "version": "1.0.0",
    "type_version": "1.0.0",
    "metadata": {
      "policy-id": "OSDF_FRANKFURT.SubscriberPolicy_URLLC_1",
      "policy-version": 1
    },
    "properties": {
      "scope": [
        "OSDF_FRANKFURT",
        "$1"
      ],
      "services": [
        "$1"
      ],
      "identity": "subscriber_URLLC_1",
      "properties": {
        "subscriberName": [
          "$2"
        ]
    }
  }
}
}
EOF

(ii) after the script gets executed, directory named "test" gets created. Copy the test directory inside the Pod

Code Block
languageyml
themeRDark
collapsetrue
# kubectl cp -n onap <path to the test folder>  <osdf-pod name>:/opt/osdf/

Example of these three policies can be found in this link  Policy Models and Sample policies - NSI selection

6. ESR Configuration

Configure Simulator by Esr

...

themeEclipse

...

4. 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

5. OOF Configuration

OSDF CHANGES(FOR NSI SELECTION)

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

Please find the policies for Option1 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.zip
height250


Copy the policy files 

unzip policies.zip

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

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

cd policies/nsi

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/nssi

python3 policy_utils.py generate_nssi_policies TN_BH_NSST minimize latency

python3 policy_utils.py create_and_push_policies gen_nssi_policies

python3 policy_utils.py generate_nssi_policies CN_NSST minimize latency

python3 policy_utils.py create_and_push_policies gen_nssi_policies

python3 policy_utils.py generate_nssi_policies TN_MH_NSST minimize latency

python3 policy_utils.py create_and_push_policies gen_nssi_policies

python3 policy_utils.py generate_nssi_policies TN_FH_NSST minimize latency

python3 policy_utils.py create_and_push_policies gen_nssi_policies

python3 policy_utils.py generate_nssi_policies RAN_NF_NSST minimize latency

python3 policy_utils.py create_and_push_policies gen_nssi_policies

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 CORE NSSMF Simulator

Installation Steps:

 There are two ways to run Core NSSMF simulator. One is to start via jar package(External Core NSSMF Simulator Use Guide) and the other is to start via docker-compose.

Start by docker-compose

This is the package:

Image Added

simulator.tar.gz

1. Extract the downloaded cn-nssmf-simulator-docker-compose.tar.gz

tar xf cn-nssmf-simulator-docker-compose.tar.gz -C .
cd cn-nssmf-simulator-docker-compose

2. modify application.properties

# vi application.properties
server.port=11111
notifyurl=http://192.168.235.25:30472/v1/pm/notification
ftppath=sftp://root:oom@192.168.235.25:22/home/ubuntu/dcae/PM.tar.gz
fixeddelay=900000
#Configure the output files generated in docker.
filepath=/app/dcae
amffilepath=/app/dcae/AMF.xml.gz
upffilepath=/app/dcae/UPF.xml.gz

3. modify docker-compose.yml

# vi docker-compose.yml
version: '3'
services:
cn-simulator-docker-compose:
image: openjdk:8-jre-slim
container_name: cn-simulator-test-1
ports:
- "11111:11111"
restart: always
# mount the cn-nssmf-simulator-docker-compose directory of the host machine to the /app directory of the container
# If you need to modify the simulator's configuration file application.properties later,
# you can directly modify the host's cn-nssmf-simulator-docker-compose/application.properties to synchronize to the container
volumes:
- ./:/app
working_dir: /app
entrypoint: java -jar simulator-0.0.1-SNAPSHOT.jar


4. start up the application by running " docker-compose up"

Register to ONAP ESR

Add an esr-thirdparty-sdnc and esr-system-info to ESR:

Run command:

Run command:

curl -k -X PUT "https://AAI:AAI@<worker-vm-ip>:30233/aai/v23/external-system/esr-thirdparty-sdnc-list/esr-thirdparty-sdnc/nssmf-cn" \

-H 'Accept: application/json' \

-H 'X-FromAppId: AAI' \

-H 'X-TransactionId: 1' \

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

-d '{

"thirdparty-sdnc-id":"nssmf-cn",

    "product-name": "nssmf",

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

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

"system-name": "E2E",

"vendor": "huawei",

"type": "cn",

"service-url": "",

"user-name": "",

"password": "",

"system-type": "thirdparty_SDNC",

"ip-address": "<ip-address-of-simulator>",

"port": "11111"

}]}

}'

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.

7. ACTN Simulator

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

Step 1. Fetch the simulator docker image

First, pull down the simulator image from public docker hub.

docker pull dzhanghuawei/pncsimulator:latest

Step 2. Start the simulator container(s)

After compiling the pnc-simulator image locally or fetching the docker image from remote registry, execute the command below to start the container:

docker run –p 18181:8181 –d –name pncsimu-18181 –t dzhanghuawei/pncsimulator:latest


docker run –p 18182:8181 –d –name pncsimu-18181 –t dzhanghuawei/pncsimulator:latest

For demonstration purposes, two domain controllers are required, in our case we use 18181 as SERVER_PORT for domain1 and 18182 for domain2.

After starting the container, you should be able to verify the running container by:

docker container ps –a | grep pncsimu

Step 3. Initialize the simulator(s)

The simulator offers a set of administrative APIs which are designed for initialization and management purposes.

To initialize the simulator for each domain:

curl –X POST –H "content-type:application/json" http://${SERVER_IP:SERVER_PORT}/pncsimu/v1/reload-data -d @INITIAL_DATA_FILE

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

pnc-init-payload-1

pnc-init-payload-2    

ESR Registration using AAI ESR Url:

Once a third-party controller is being registered in ONAP, a "Topology Discovery" operation need be triggered and the domain controller will be called in order to retrieve the topology. SDNC then, will store the topology in AAI. Please execute the below curl command for the ESR registration of initialized two domain controllers,

NOTE: Replace <simulator-ip> and <simulator-port> with the IP Address and port of initialized simulators.

Code Block
languagetext
titleesr_registration
linenumberstrue
collapsetrue
curl -k -X PUT "https://AAI:AAI@<worker-vmIp>:30233/aai/v23/external-system/esr-thirdparty-sdnc-list/esr-thirdparty-sdnc/{thirdparty-sdnc-id}
ff9ef162-951d-4e14-9ce6-b4fa0adf896b" \
-H 'Accept: application/json' {\
    "thirdparty-sdnc-id":"",
    "location": "",
    "product-name": "nssmf"
}
Code Block
themeEclipse
titleConfigure Simulator Info
PUT /external-system/esr-thirdparty-sdnc-list/esr-thirdparty-sdnc/{thirdparty-sdnc-id}/esr-system-info-list/esr-system-info/{esr-system-info-id}

application/xml
<esr-system-info xmlns="http://org.onap.aai.inventory/v16">
    <esr-system-info-id></esr-system-info-id>
    <system-name></system-name>
    <version></version>
    <user-name></user-name>
    <password></password>
    <system-type></system-type>   
    <ip-address>simulator IP</ip-address>
    <port>simulator Port</port>   
</esr-system-info>-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"
}]}
}' 

8. UUI operations (Creating communication service, Activation)

There are no changes in the UI for the NSMF based TN slices. It is same as the usual operations. The UUI operation details can be found here.

UI Operation Guidance for 5G Network Slicing