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.

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.

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

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

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

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

4. SO

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

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

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

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 

policies.zip

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 NSTO1

python3 policy_utils.py create_and_push_policies gen_nsi_policies

cd policies/nssi

python3 policy_utils.py generate_nsi_policies TESTRANTOPNSST

python3 policy_utils.py create_and_push_policies gen_nsi_policies

python3 policy_utils.py generate_nssi_policies RAN_NF_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 TN_MH_NSST  minimize latency

python3 policy_utils.py create_and_push_policies gen_nssi_policies

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

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,

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

Updated slice/service profile mapping - https://gerrit.onap.org/r/gitweb?p=optf/osdf.git;a=blob;f=config/slicing_config.yaml;h=179f54a6df150a62afdd72938c2f33d9ae1bd202;hb=HEAD

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_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_List": copy_first,
    "availability": copy_first,
    "throughput": min,
    "reliability": copy_first,
    "max_number_of_ues": copy_first,
    "exp_data_rate_ul": copy_first,
    "exp_data_rate_dl": copy_first,
    "ue_mobility_level": copy_first,
    "activity_factor": copy_first,
    "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. Core NF Simulator Setup

  • We need a KUD vm with kubernetes installed, please follow below link to setup a KUD VM.

           https://wiki.onap.org/display/DW/Kubernetes+Baremetal+deployment+setup+instructions/

  • Please find below script with required data to be populated in AAI, provide the tenant id of the openstack project 

    #!/bin/bash 

    echo "Enter NFS Server: "
    read nfsServer

    echo "======== RUNNING AAI Data Populate ======="
    echo $nfsServer

    echo "===== Populating Customer"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v21/business/customers/customer/5GCustomer' \
    --header 'X-TransactionId: 42d3461d-074e-400e-93b1-c7ab5f48ce89' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "global-customer-id": "5GCustomer",
        "subscriber-name": "5GCustomer",
        "subscriber-type": "INFRA"
    }'

    echo "===== Populating owningEntity"


    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/business/owning-entities/owning-entity/67f2e84c-734d-4e90-a1e4-d2ffa2e75849' \
    --header 'X-TransactionId: 3656171c-3188-4a3d-b29a-284d2ba97ede' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "owning-entity-id": "67f2e84c-734d-4e90-a1e4-d2ffa2e75849",
        "owning-entity-name": "OE-5GCustomer"
    }'

    echo "===== Populating Platforms"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/business/platforms/platform/test' \
    --header 'X-TransactionId: 3c215f06-6ca5-4de4-8b75-bb06d002c922' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "platform-name": "test"
    }'

    echo "===== Populating Projects"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/business/projects/project/Project-5GCustomer' \
    --header 'X-TransactionId: 40c3addb-c661-4bd2-bf80-5160e4223776' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "project-name": "Project-5GCustomer"
    }'

    echo "====== Populating Line of Business"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/business/lines-of-business/line-of-business/LOB-5GCustomer' \
    --header 'X-TransactionId: ffed7201-15ab-41ab-8960-6db2cd16a264' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "line-of-business-name": "LOB-5GCustomer"
    }'

    echo "======== Populating Complex"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/cloud-infrastructure/complexes/complex/clli2' \
    --header 'X-TransactionId: 79ec2b55-0e1a-4a8a-904c-02d87a43fdc5' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "physical-location-id": "clli2",
        "physical-location-type": "office",
        "street1": "Dummy 1",
        "city": "Kraków",
        "postal-code": "30-000",
        "country": "Poland",
        "region": "Smaller Poland"
    }'


    echo "======== Populating Cloud Region"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/cloud-infrastructure/cloud-regions/cloud-region/k8scloudowner4/k8sregionfour' \
    --header 'X-TransactionId: 34cac914-d32c-4523-ac75-008db129bcc6' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --data-raw '{
        "cloud-owner": "k8scloudowner4",
        "cloud-region-id": "k8sregionfour",
        "cloud-type": "k8s",
        "owner-defined-type": "t1",
        "cloud-region-version": "1.0",
        "complex-name": "clli2",
        "cloud-zone": "CloudZone",
        "sriov-automation": false
    }'


    echo "======== Populating Complex Cloud Region Relationship"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/cloud-infrastructure/cloud-regions/cloud-region/k8scloudowner4/k8sregionfour/relationship-list/relationship' \
    --header 'X-TransactionId: 1d651697-0c65-4d21-bad5-299f95e4ddb6' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "related-to": "complex",
        "related-link": "/aai/v16/cloud-infrastructure/complexes/complex/clli2",
        "relationship-data": [
            {
                "relationship-key": "complex.physical-location-id",
                "relationship-value": "clli2"
            }
        ]
    }'

    echo "======== Populating Service"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/service-design-and-creation/services/service/5G' \
    --header 'X-TransactionId: db58cf73-f420-4f07-8cab-801474c9303c' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
            "service-description": "5GCore on K8s",
            "service-id": "5G"
    }'

    echo "======== Populating Service Subscription"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G' \
    --header 'X-TransactionId: c385a48c-cf4b-4fcd-976c-2d9cad40b19e' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
            "service-type": "5G"
    }'

    echo "======== Populating Tenant"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/cloud-infrastructure/cloud-regions/cloud-region/k8scloudowner4/k8sregionfour/tenants/tenant/3d5819f1542e4ef9a4ccb0bcb278ca10' \
    --header 'X-TransactionId: c229f2aa-ea0f-4057-a9dd-0144b6e0e72a' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "tenant-id": "3d5819f1542e4ef9a4ccb0bcb278ca10",
        "tenant-name": "ONAP-tm",
        "relationship-list": {
            "relationship": [
                {
                    "related-to": "service-subscription",
                    "relationship-label": "org.onap.relationships.inventory.Uses",
                    "related-link": "/aai/v16/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G",
                    "relationship-data": [
                        {
                            "relationship-key": "customer.global-customer-id",
                            "relationship-value": "5GCustomer"
                        },
                        {
                            "relationship-key": "service-subscription.service-type",
                            "relationship-value": "5G"
                        }
                    ]
                }
            ]
        }
    }'


    echo "======== Populating availability zone name"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/cloud-infrastructure/cloud-regions/cloud-region/k8scloudowner4/k8sregionfour/availability-zones/availability-zone/k8savz' \
    --header 'X-TransactionId: c229f2aa-ea0f-4057-a9dd-0144b6e0e72a' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "availability-zone-name": "k8savz",
        "hypervisor-type": "k8s"
    }'


    echo "=========================== Finished Populating AAI Data ============="

  • After KUD setup and AAI data entries, update the connectivity Info: <port: msb-iag port>

          curl -k -i -F "metadata=<post.json;type=application/json" -F file=@/root/.kube/config -X POST https://{{k8s}}:32330/api/multicloud-k8s/v1/v1/connectivity-info

          Please find post.json below,

         {
           "cloud-region": "k8sregionfour",
           "cloud-owner": "k8scloudowner4"
          }

  • Load the dictionary data using the below dd.sh script,
dd.sh
#!/bin/bash
# Author: abdelmuhaimen.seaudi@...
# Usage: name this script as dd.sh, and put the data dictionaries list JSON as dd.json in the same directory, and run dd.sh
# dd.sh will read the dictionary list JSON from dd.json, will output to stdout the number of Defintions found, and will start pushing them one by one to CDS DB
l=`jq '.|length' dd.json`
echo "Found $l Dictionary Definition Entries"
i=0
while [ $i -lt $l ]
do
  echo "i = $i"

  d=`jq ".[$i]" dd.json`

  echo $d

  #REPLACE <cds-ui> with the IP Address of ONAP

result=$(curl 'http://cds-ui:8080/api/v1/dictionary' -v -X POST -H 'Content-type: application/json' -H 'Authorization: Basic Y2NzZGthcHBzOmNjc2RrYXBwcw=='  -d"$d")
echo $result
  sleep 1
  echo -e "\n*****************************************\n"
  i=$(( $i + 1 ))
done

[
{
  "name": "k8s-rb-profile-name",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, k8s-rb-profile-name",
    "name" : "k8s-rb-profile-name",
    "property" : {
      "description" : "Profile name used in multicloud/k8s plugin to identify Helm chart(s) where this mapping is providing override values.",
      "type" : "string"
    },
    "group" : "default",
    "updated-by" : "Samuli, Silvius <s.silvius@partner.samsung.com>",
    "sources" : {
      "input" : {
        "type" : "source-input"
      },
      "default" : {
        "type" : "source-default",
        "properties" : { }
      },
      "sdnc" : {
        "type" : "source-rest",
        "properties" : {
          "verb" : "GET",
          "type" : "JSON",
          "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/k8s-rb-profile-name",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "k8s-rb-profile-name" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  "description": "k8s-rb-profile-name",
  "tags": "k8s-rb-profile-name",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
  "name": "k8s-rb-profile-namespace",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, k8s-rb-profile-namespace",
    "name" : "k8s-rb-profile-namespace",
    "property" : {
      "description" : "Profile name used in multicloud/k8s plugin to identify Helm chart(s) where this mapping is providing override values.",
      "type" : "string"
    },
    "group" : "default",
    "updated-by" : "Samuli, Silvius <s.silvius@partner.samsung.com>",
    "sources" : {
      "input" : {
        "type" : "source-input"
      },
      "default" : {
        "type" : "source-default",
        "properties" : { }
      },
      "sdnc" : {
        "type" : "source-rest",
        "properties" : {
          "verb" : "GET",
          "type" : "JSON",
          "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/k8s-rb-profile-namespace",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "k8s-rb-profile-namespace" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  "description": "k8s-rb-profile-namespace",
  "tags": "k8s-rb-profile-namespace",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
  "name": "config.test",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, config.test",
    "name" : "config.test",
    "property" : {
      "description" : "Profile name used in multicloud/k8s plugin to identify Helm chart(s) where this mapping is providing override values.",
      "type" : "string"
    },
    "group" : "default",
    "updated-by" : "Samuli, Silvius <s.silvius@partner.samsung.com>",
    "sources" : {
      "input" : {
        "type" : "source-input"
      },
      "default" : {
        "type" : "source-default",
        "properties" : { }
      },
      "sdnc" : {
        "type" : "source-rest",
        "properties" : {
          "verb" : "GET",
          "type" : "JSON",
          "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/config.test",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "config.test" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  "description": "config.test",
  "tags": "config.test",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
  "name": "singletest",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, singletest",
    "name" : "singletest",
    "property" : {
      "description" : "Profile name used in multicloud/k8s plugin to identify Helm chart(s) where this mapping is providing override values.",
      "type" : "string"
    },
    "group" : "default",
    "updated-by" : "Samuli, Silvius <s.silvius@partner.samsung.com>",
    "sources" : {
      "input" : {
        "type" : "source-input"
      },
      "default" : {
        "type" : "source-default",
        "properties" : { }
      },
      "sdnc" : {
        "type" : "source-rest",
        "properties" : {
          "verb" : "GET",
          "type" : "JSON",
          "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/singletest",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "singletest" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  
  "description": "singletest",
  "tags": "singletest",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
  "name": "config.amfName",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, config.amfName",
    "name" : "config.amfName",
    "property" : {
      "description" : "Profile name used in multicloud/k8s plugin to identify Helm chart(s) where this mapping is providing override values.",
      "type" : "string"
    },
    "group" : "default",
    "updated-by" : "Samuli, Silvius <s.silvius@partner.samsung.com>",
    "sources" : {
      "input" : {
        "type" : "source-input"
      },
      "default" : {
        "type" : "source-default",
        "properties" : { }
      },
      "sdnc" : {
        "type" : "source-rest",
        "properties" : {
          "verb" : "GET",
          "type" : "JSON",
          "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/config.amfName",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "config.amfName" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  "description": "config.amfName",
  "tags": "config.amfName",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
  "name": "config.smfName",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, config.smfName",
    "name" : "config.smfName",
    "property" : {
      "description" : "Profile name used in multicloud/k8s plugin to identify Helm chart(s) where this mapping is providing override values.",
      "type" : "string"
    },
    "group" : "default",
    "updated-by" : "Samuli, Silvius <s.silvius@partner.samsung.com>",
    "sources" : {
      "input" : {
        "type" : "source-input"
      },
      "default" : {
        "type" : "source-default",
        "properties" : { }
      },
      "sdnc" : {
        "type" : "source-rest",
        "properties" : {
          "verb" : "GET",
          "type" : "JSON",
          "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/config.smfName",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "config.smfName" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  "description": "config.smfName",
  "tags": "config.smfName",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
"name": "config.upfName",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, config.upfName",
    "name" : "config.upfName",
    "property" : {
      "description" : "Profile name used in multicloud/k8s plugin to identify Helm chart(s) where this mapping is providing override values.",
      "type" : "string"
    },
    "group" : "default",
    "updated-by" : "Samuli, Silvius <s.silvius@partner.samsung.com>",
    "sources" : {
      "input" : {
        "type" : "source-input"
      },
      "default" : {
        "type" : "source-default",
        "properties" : { }
      },
      "sdnc" : {
        "type" : "source-rest",
        "properties" : {
          "verb" : "GET",
          "type" : "JSON",
          "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/config.upfName",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "config.upfName" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  "description": "config.upfName",
  "tags": "config.upfName",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
"name": "amfName",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, amfName",
    "name" : "amfName",
    "property" : {
      "description" : "Profile name used in multicloud/k8s plugin to identify Helm chart(s) where this mapping is providing override values.",
      "type" : "string"
    },
    "group" : "default",
    "updated-by" : "Samuli, Silvius <s.silvius@partner.samsung.com>",
    "sources" : {
      "input" : {
        "type" : "source-input"
      },
      "default" : {
        "type" : "source-default",
        "properties" : { }
      },
      "sdnc" : {
        "type" : "source-rest",
        "properties" : {
          "verb" : "GET",
          "type" : "JSON",
          "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/amfName",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "amfName" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  "description": "amfName",
  "tags": "amfName",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
"name": "smfName",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, smfName",
    "name" : "smfName",
    "property" : {
      "description" : "Profile name used in multicloud/k8s plugin to identify Helm chart(s) where this mapping is providing override values.",
      "type" : "string"
    },
    "group" : "default",
    "updated-by" : "Samuli, Silvius <s.silvius@partner.samsung.com>",
    "sources" : {
      "input" : {
        "type" : "source-input"
      },
      "default" : {
        "type" : "source-default",
        "properties" : { }
      },
      "sdnc" : {
        "type" : "source-rest",
        "properties" : {
          "verb" : "GET",
          "type" : "JSON",
          "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/smfName",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "smfName" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  "description": "smfName",
  "tags": "smfName",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
"name": "upfName",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, upfName",
    "name" : "upfName",
    "property" : {
      "description" : "Profile name used in multicloud/k8s plugin to identify Helm chart(s) where this mapping is providing override values.",
      "type" : "string"
    },
    "group" : "default",
    "updated-by" : "Samuli, Silvius <s.silvius@partner.samsung.com>",
    "sources" : {
      "input" : {
        "type" : "source-input"
      },
      "default" : {
        "type" : "source-default",
        "properties" : { }
      },
      "sdnc" : {
        "type" : "source-rest",
        "properties" : {
          "verb" : "GET",
          "type" : "JSON",
          "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/upfName",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "upfName" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  "description": "upfName",
  "tags": "upfName",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
"name": "config.supportedNssai.sNssai.snssai",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, config.supportedNssai.sNssai.snssai",
    "name" : "config.supportedNssai.sNssai.snssai",
    "property" : {
      "description" : "Profile name used in multicloud/k8s plugin to identify Helm chart(s) where this mapping is providing override values.",
      "type" : "string"
    },
    "group" : "default",
    "updated-by" : "Samuli, Silvius <s.silvius@partner.samsung.com>",
    "sources" : {
      "input" : {
        "type" : "source-input"
      },
      "default" : {
        "type" : "source-default",
        "properties" : { }
      },
      "sdnc" : {
        "type" : "source-rest",
        "properties" : {
          "verb" : "GET",
          "type" : "JSON",
          "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/fivegc0_snssai",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "config.supportedNssai.sNssai.snssai" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  "description": "config.supportedNssai.sNssai.snssai",
  "tags": "config.supportedNssai.sNssai.snssai",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
  "name": "fivegc0_snssai",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, fivegc0_snssai",
    "name" : "fivegc0_snssai",
    "property" : {
      "description" : "Profile name used in multicloud/k8s plugin to identify Helm chart(s) where this mapping is providing override values.",
      "type" : "string"
    },
    "group" : "default",
    "updated-by" : "Samuli, Silvius <s.silvius@partner.samsung.com>",
    "sources" : {
      "input" : {
        "type" : "source-input"
      },
      "default" : {
        "type" : "source-default",
        "properties" : { }
      },
      "sdnc" : {
        "type" : "source-rest",
        "properties" : {
          "verb" : "GET",
          "type" : "JSON",
          "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/fivegc0_snssai",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "fivegc0_snssai" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  
  "description": "fivegc0_snssai",
  "tags": "fivegc0_snssai",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
  "name": "snssai",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, snssai",
    "name" : "snssai",
    "property" : {
      "description" : "Profile name used in multicloud/k8s plugin to identify Helm chart(s) where this mapping is providing override values.",
      "type" : "string"
    },
    "group" : "default",
    "updated-by" : "Samuli, Silvius <s.silvius@partner.samsung.com>",
    "sources" : {
      "input" : {
        "type" : "source-input"
      },
      "default" : {
        "type" : "source-default",
        "properties" : { }
      },
      "sdnc" : {
        "type" : "source-rest",
        "properties" : {
          "verb" : "GET",
          "type" : "JSON",
          "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/fivegc0_snssai",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "snssai" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  
  "description": "snssai",
  "tags": "snssai",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
  "name": "supportedNssai",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, supportedNssai",
    "name" : "supportedNssai",
    "property" : {
      "description" : "Profile name used in multicloud/k8s plugin to identify Helm chart(s) where this mapping is providing override values.",
      "type" : "string"
    },
    "group" : "default",
    "updated-by" : "Samuli, Silvius <s.silvius@partner.samsung.com>",
    "sources" : {
      "input" : {
        "type" : "source-input"
      },
      "default" : {
        "type" : "source-default",
        "properties" : { }
      },
      "sdnc" : {
        "type" : "source-rest",
        "properties" : {
          "verb" : "GET",
          "type" : "JSON",
          "url-path" : "/restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/vnfs/vnf/$vnf-id/vnf-data/vnf-topology/vnf-parameters-data/param/fivegc0_supportedNssai",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "supportedNssai" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  
  "description": "supportedNssai",
  "tags": "supportedNssai",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
}
]

Refer Core NF Simulator setup to setup Core NF Simulator.

7. RAN Simulator Setup

7a) RANSIM Controller

Refer RAN-Sim setup to setup RAN-simulator

Refer RAN-Sim for ransim impacts done for Guilin Release

7b) 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-1.11.0-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-1.11.0-openjdk-amd64 mvn clean install -Dcheckstyle.skip"

Once the mvn build is done, build the docker image

Step 1: Go to directory ~/ran-sim/hcsim-content/gnbsim
Step 2: JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ mvn clean install -Dcheckstyle.skip
Step 3: cp -r gnbsim-distribution/jssecacerts gnbsim-distribution/target/gnbsim-distribution-1.19.08-SNAPSHOT-hc/gnbsim-distribution-1.19.08-SNAPSHOT/
Step 4: cp -r gnbsim-distribution/honeycomb gnbsim-distribution/target/gnbsim-distribution-1.19.08-SNAPSHOT-hc/gnbsim-distribution-1.19.08-SNAPSHOT/
Step 5: cp -r gnbsim-distribution/Dockerfile gnbsim-distribution/target/gnbsim-distribution-1.19.08-SNAPSHOT-hc/gnbsim-distribution-1.19.08-SNAPSHOT/
Step 6: 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 gnbsim

To run the Netconf Servers:

  1. Update ransim and honeycom IP address at ~/ran-sim/hcsim-content/gnbsim/hc/config/gnbsim.json

      2. Run the below command from ~/ran-sim/hcsim-content/gnbsim/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. 

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

8. 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. Latest source is available at Image versions, preparation steps and useful info-Config DB Preload Info Section.

Necessary RAN network functions data are preloaded in config DB while booting the maria DB container.

Note: Refer the latest templates from gerrit which are committed in June 2021. https://gerrit.onap.org/r/gitweb?p=ccsdk/distribution.git;a=commit;h=8b86f34f6ea29728e31c4f6799009e8562ef3b6f

9. ACTN 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

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-r9.jsonpnc-init-payload-2-r9.json

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.

esr_registration
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"
}]}
}' 


E2E network slicing test(using resource occupancy details)

Before creating shared communication service for testing NSI/NSSI selection using resource occupancy details, below manual configurations must be done:

Deployment Prerequisite/dependencies

  1. VES, PM mapper and DataFile Collector, dcae-mongodb, Datalake Extraction Service(DES) and Datalake-feeder services should be running.

Datalake Extraction Service(DES):


  1. Build presto image and push the images to a exsting repository
    1. Download and extract presto package version v0.0.2: presto-v0.0.2.tar.gz
    2. docker build -t presto:v0.0.2 .
    3. docker tag presto:v0.0.2 registry.baidubce.com/onap/presto:v0.0.2
    4. docker push registry.baidubce.com/onap/presto:v0.0.2
    5. Note: Replace the repository path with your own repository.
  2. Install presto service
    1. kubectl -n onap run dl-presto --image=presto:v0.0.2 --env="MongoDB_IP=dcae-mongohost" --env="MongoDB_PORT=27017" --image-pull-policy=IfNotPresent
    2. kubectl expose pod dl-presto --name=dl-presto --port=9000 --target-port=9000 --type=NodePort -n onap
  3. Login to the dev-dcae-datalake-postgres-primary container and execute following sql commands:
    1. datalake-db init_data
      delete from map_db_topic;
      delete from map_db_design;
      delete from db;
      delete from data_exposure ;
      insert into db (id, db_type_id, enabled, encrypt, name,host,port,database_name) values (2, 'MONGO', true, true, 'MongoDB 1','dcae-mongohost',27017,'datalake');
      insert into map_db_topic(db_id,topic_id) select db.id, topic.id from db_type, db, topic where db.db_type_id=db_type.id and db_type.tool=false;
      update kafka set secure=true, pass='admin_secret' where id=1;
      insert into topic_name (id) values ('unauthenticated.PERFORMANCE_MEASUREMENTS');
      insert into topic(id, topic_name_id,correlate_cleared_message,enabled, message_id_path,data_format) values (6, 'unauthenticated.PERFORMANCE_MEASUREMENTS',true,true,'/event/commonEventHeader','JSON');
      insert into data_exposure(id, note,sql_template,db_id) values ('pm_data','pm_message', 'SELECT json_format(CAST( event.perf3gppFields.measDataCollection.measInfoList[1].measTypes.sMeasTypesList AS JSON)) AS sMeasTypesList, json_format(CAST( event.perf3gppFields.measDataCollection.measInfoList[1].measValuesList AS JSON)) AS measValuesList FROM unauthenticatedperformancemeasurements WHERE any_match(event.perf3gppFields.measDataCollection.measInfoList[1].measTypes.sMeasTypesList, e -> e like ''${snssai}'') AND event.commonEventHeader.startEpochMicrosec >= ${time}',2); //db_id refers to mongodb in table db, this template filters PM data based on snssai and startEpochMicrosec;
    2. Load sample data in mongo db(refer DCAE mongodb section)

    3. Execute below request to verify: curl --header "Content-type: application/json" --request POST --data '{"snssai":"SM.PrbUsedDl.01-910EF6","time":"1649853949111"}' http://dl-des:1681/datalake/v1/exposure/pm_data -i

Datalake Feeder:

  1. Restart datalake-feeder container after loading above configurations in the DB.

POLICY :

     The following policies are to be included for the OOF optimisation based on resource occupancy . Refer Optimization Policy Creation Steps for optimization policy creation and deployment steps.

resource-occupancy-policies.zip

RANSIM :

  1. RANSIM and honeycomb containers should be running
  2. 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.
  3. RANSIM must contain 'plmninfo' of the service which is to be shared with other services. Then generate closed-loop PM data which will be stored in mongo-db by datalake-feeder.
  4. Sample closed loop data: closed-loop-data.txt
  5. Run the following command to generate Closed Loop PM data:
    1. curl -X POST http://localhost:8081/ransim/api/generateClosedLoopPmData -i
  6. 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
  7. Access the DU honeycomb containers to view the logs:
    1. docker container logs -f 110
  8. Check the folder(where SFTP setup is done) to view the generated PM data files.
  9. Access VES, data file collector, dmaap-dr, PM mapper and slice-analysis logs to verify.


DCAE-MONGO DB:

  1. Login to dcae-mongodb container and execute following commands to check if PM data was saved in DB:
    1. mongo
    2. use datalake
    3. db.unauthenticatedperformancemeasurements.find({})
    4. to load sample data:
sample mongodb data
db.unauthenticatedperformancemeasurements.insert({
   "event":{
      "commonEventHeader":{
         "domain":"perf3gpp",
         "eventId":"95e79282-2876-4000-8192-b514ad7f399a",
         "sequence":0,
         "eventName":"perf3gpp_RnNode-Slicing_pmMeasResult",
         "sourceName":"220",
         "reportingEntityName":"",
         "priority":"Normal",
         "startEpochMicrosec":1651216762867,
         "lastEpochMicrosec":1651216762868,
         "version":"4.0",
         "vesEventListenerVersion":"7.1",
         "timeZoneOffset":"UTC+05:30"
      },
      "perf3gppFields":{
         "perf3gppFieldsVersion":"1.0",
         "measDataCollection":{
            "granularityPeriod":900,
            "measuredEntityUserName":"",
            "measuredEntityDn":"220",
            "measuredEntitySoftwareVersion":"r0.1",
            "measInfoList":[
               {
                  "measInfoId":{
                     "sMeasInfoId":"measInfoIsVal"
                  },
                  "measTypes":{
                     "sMeasTypesList":[
                        "SM.PrbUsedDl.01-3C5C90",
                        "SM.PrbUsedUl.01-3C5C90"
                     ]
                  },
                  "measValuesList":[
                     {
                        "measObjInstId":"15155",
                        "suspectFlag":"false",
                        "measResults":[
                           {
                              "p":1,
                              "sValue":"5"
                           },
                           {
                              "p":2,
                              "sValue":"7"
                           }
                        ]
                     },
                     {
                        "measObjInstId":"15174",
                        "suspectFlag":"false",
                        "measResults":[
                           {
                              "p":1,
                              "sValue":"6"
                           },
                           {
                              "p":2,
                              "sValue":"7"
                           }
                        ]
                     },
                     {
                        "measObjInstId":"15175",
                        "suspectFlag":"false",
                        "measResults":[
                           {
                              "p":1,
                              "sValue":"15"
                           },
                           {
                              "p":2,
                              "sValue":"4"
                           }
                        ]
                     },
                     {
                        "measObjInstId":"15176",
                        "suspectFlag":"false",
                        "measResults":[
                           {
                              "p":1,
                              "sValue":"5"
                           },
                           {
                              "p":2,
                              "sValue":"14"
                           }
                        ]
                     },
                     {
                        "measObjInstId":"15825",
                        "suspectFlag":"false",
                        "measResults":[
                           {
                              "p":1,
                              "sValue":"0"
                           },
                           {
                              "p":2,
                              "sValue":"14"
                           }
                        ]
                     }
                  ]
               }
            ]
         }
      }
   }
})



  • No labels