Versions Compared

Key

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

...

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 sample policies for Option1 below,

View file
namepolicies.zip
height150

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 CN_NSST minimize latency

python3 policy_utils.py create_and_push_policies gen_nssi_policies

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

NOTE:

  • The service name given for creating the policy must match with the service name in the request
  • 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

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


    Expand
    titlepopulate-init-data-to-AAI

    #!/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

...

  • 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 

    Expand
    titlepopulate-init-data-to-AAI

    #!/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 '{
        "platformglobal-customer-nameid": "test5GCustomer",
        "subscriber-name": "5GCustomer",
        "subscriber-type": "INFRA"
    }'

    echo "===== Populating ProjectsowningEntity"


    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/business/projects/project/Project-5GCustomerowning-entities/owning-entity/67f2e84c-734d-4e90-a1e4-d2ffa2e75849' \
    --header 'X-TransactionId: 40c3addb3656171c-c6613188-4bd24a3d-bf80b29a-5160e4223776284d2ba97ede' \
    --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",
        "projectowning-entity-name": "ProjectOE-5GCustomer"
    }'

    echo "===== = Populating Line of BusinessPlatforms"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/business/lines-of-business/line-of-business/LOB-5GCustomerplatforms/platform/test' \
    --header 'X-TransactionId: ffed72013c215f06-15ab6ca5-41ab4de4-89608b75-6db2cd16a264bb06d002c922' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "line-of-businessplatform-name": "LOB-5GCustomertest"
    }'

    echo "====== == Populating ComplexProjects"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/cloud-infrastructurebusiness/complexesprojects/complexproject/clli2Project-5GCustomer' \
    --header 'X-TransactionId: 79ec2b5540c3addb-0e1ac661-4a8a4bd2-904cbf80-02d87a43fdc55160e4223776' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "physicalproject-location-idname": "clli2",
        "physical-location-type": "office",
        "street1": "Dummy 1",
        "city": "Kraków",
        "postal-code": "30-000",
        "country": "Poland",
        "region": "Smaller Poland"
    }'Project-5GCustomer"
    }'

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

    curl -k --location -g --request PUT 'echo "======== Populating Cloud Region"curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/business/cloudlines-of-infrastructurebusiness/cloudline-of-regionsbusiness/cloud-region/k8scloudowner4/k8sregionfourLOB-5GCustomer' \
    --header 'X-TransactionId: 34cac914ffed7201-d32c15ab-452341ab-ac758960-008db129bcc66db2cd16a264' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "cloud-ownerline-of-business-name": "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
    }'LOB-5GCustomer"
    }'

    echo "=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' \
    -complexes/complex/clli2' \
    --header 'X-TransactionId: 1d65169779ec2b55-0c650e1a-4d214a8a-bad5904c-299f95e4ddb602d87a43fdc5' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "relatedphysical-location-toid": "complexclli2",
        "relatedphysical-location-linktype": "/aai/v16/cloud-infrastructure/complexes/complex/clli2office",
        "relationship-datastreet1": ["Dummy 1",
            {"city": "Kraków",
                "relationshippostal-keycode": "complex.physical-location-id30-000",
                "relationship-valuecountry": "clli2Poland",
            }
        ]
    "region": "Smaller Poland"
    }'


    echo "======== Populating ServiceCloud Region"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/servicecloud-design-and-creation/services/service/5Ginfrastructure/cloud-regions/cloud-region/k8scloudowner4/k8sregionfour' \
    --header 'X-TransactionId: db58cf7334cac914-f420d32c-4f074523-8cabac75-801474c9303c008db129bcc6' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
            "servicecloud-descriptionowner": "5GCore on K8sk8scloudowner4",
            "servicecloud-region-id": "5Gk8sregionfour"
    }'

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

    ,
        "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://'curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5Gcloud-infrastructure/cloud-regions/cloud-region/k8scloudowner4/k8sregionfour/relationship-list/relationship' \
    --header 'X-TransactionId: c385a48c1d651697-cf4b0c65-4fcd4d21-976cbad5-2d9cad40b19e299f95e4ddb6' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
            "servicerelated-typeto": "5Gcomplex"
    },
        "related-link": "/aai/v16/cloud-infrastructure/complexes/complex/clli2",
        "relationship-data": [
            {
                "relationship-key": "complex.physical-location-id",
                "relationship-value": "clli2"
            }
        ]
    }'

    echo "======== Populating TenantService"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/cloudservice-infrastructure/cloud-regions/cloud-region/k8scloudowner4/k8sregionfour/tenants/tenant/3d5819f1542e4ef9a4ccb0bcb278ca10design-and-creation/services/service/5G' \
    --header 'X-TransactionId: c229f2aadb58cf73-ea0ff420-40574f07-a9dd8cab-0144b6e0e72a801474c9303c' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
            "tenantservice-iddescription": "3d5819f1542e4ef9a4ccb0bcb278ca105GCore on K8s",
            "tenantservice-nameid": "ONAP-tm5G"
    }'

    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": [,
        "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",
                {
                    "relationshiprelated-valueto": "5GCustomerservice-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": "service-subscription.service-typecustomer.global-customer-id",
                            "relationship-value": "5G5GCustomer"
                        },
                      ]  {
                }
            ]
        }
    }'"relationship-key": "service-subscription.service-type",
                            "relationship-value": "5G"
                        }
                    ]
                }
            ]
        }
    }'


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

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

...

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

  • We need to load Load the dictionary data using the below dd.sh script,
Code Block
languagetext
titledd.sh
linenumberstrue
collapsetrue
#!/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

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


Expand
titledd.json

[
{
  "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>"
},

Expand
titledd.json

[
{
  "name": "k8s-rb-profile-namenamespace",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, k8s-rb-profile-namenamespace",
    "name" : "k8s-rb-profile-namenamespace",
    "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-namenamespace",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "k8s-rb-profile-namenamespace" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  "description": "k8s-rb-profile-namenamespace",
  "tags": "k8s-rb-profile-namenamespace",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
  "name": "k8s-rb-profile-namespaceconfig.test",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, k8s-rb-profile-namespaceconfig.test",
    "name" : "k8s-rb-profile-namespaceconfig.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/k8s-rb-profile-namespaceconfig.test",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "k8s-rb-profile-namespaceconfig.test" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  "description": "k8s-rb-profile-namespaceconfig.test",
  "tags": "k8s-rb-profile-namespaceconfig.test",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
  "name": "config.testsingletest",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, config.testsingletest",
    "name" : "config.testsingletest",
    "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.testsingletest",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "config.testsingletest" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  
  "description": "config.testsingletest",
  "tags": "config.testsingletest",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
  "name": "singletestconfig.amfName",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, singletestconfig.amfName",
    "name" : "singletestconfig.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/singletestconfig.amfName",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "singletestconfig.amfName" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  
  "description": "singletestconfig.amfName",
  "tags": "singletestconfig.amfName",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
  "name": "config.amfNamesmfName",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, config.amfNamesmfName",
    "name" : "config.amfNamesmfName",
    "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.amfNamesmfName",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "config.amfNamesmfName" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  "description": "config.amfNamesmfName",
  "tags": "config.amfNamesmfName",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
  "name": "config.smfNameupfName",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, config.smfNameupfName",
    "name" : "config.smfNameupfName",
    "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.smfNameupfName",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "config.smfNameupfName" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  "description": "config.smfNameupfName",
  "tags": "config.smfNameupfName",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
"name": "config.upfNameamfName",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, config.upfNameamfName",
    "name" : "config.upfNameamfName",
    "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.upfNameamfName",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "config.upfNameamfName" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  "description": "config.upfNameamfName",
  "tags": "config.upfNameamfName",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
"name": "amfNamesmfName",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, amfNamesmfName",
    "name" : "amfNamesmfName",
    "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/amfNamesmfName",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "amfNamesmfName" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  "description": "amfNamesmfName",
  "tags": "amfNamesmfName",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
"name": "smfNameupfName",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, smfNameupfName",
    "name" : "smfNameupfName",
    "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/smfNameupfName",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "smfNameupfName" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  "description": "smfNameupfName",
  "tags": "smfNameupfName",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
"name": "upfNameconfig.supportedNssai.sNssai.snssai",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, upfNameconfig.supportedNssai.sNssai.snssai",
    "name" : "upfNameconfig.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/upfNamefivegc0_snssai",
          "path" : "/param/0/value",
          "input-key-mapping" : {
            "service-instance-id" : "service-instance-id",
            "vnf-id" : "vnf-id"
          },
          "output-key-mapping" : {
            "upfNameconfig.supportedNssai.sNssai.snssai" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  "description": "upfNameconfig.supportedNssai.sNssai.snssai",
  "tags": "upfNameconfig.supportedNssai.sNssai.snssai",
  "creationDate": "2021-01-06T17:43:12.000Z",
  "updatedBy": "MALAKOV, YURIY <yuriy.malakov@att.com>"
},
{
  "name": "config.supportedNssai.sNssai.fivegc0_snssai",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, config.supportedNssai.sNssai.fivegc0_snssai",
    "name" : "config.supportedNssai.sNssai.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" : {
            "config.supportedNssai.sNssai.fivegc0_snssai" : "value"
          },
          "key-dependencies" : [ "service-instance-id", "vnf-id" ]
        }
      }
    }
  },
  
  "description": "config.supportedNssai.sNssai.fivegc0_snssai",
  "tags": "config.supportedNssai.sNssai.fivegc0_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": "snssaisupportedNssai",
  "dataType": "string",
  "entrySchema": null,
  "resourceDictionaryGroup": "default",
  "definition": {
        "tags" : "k8s, cnf, profile, snssaisupportedNssai",
    "name" : "snssaisupportedNssai",
    "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",
    "updated-by" : "Samuli, Silvius <s.silvius@partner.samsung.com>",
    "sources" : {
          "verbinput" : "GET",{
          "type" : "JSONsource-input",
      },
      "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",default" : {
          "pathtype" : "/param/0/valuesource-default",
          "input-key-mappingproperties" : { }
      },
      "service-instance-idsdnc" : "service-instance-id",{
            "vnf-idtype" : "vnfsource-id"
          }rest",
          "output-key-mappingproperties" : {
            "snssaiverb" : "valueGET",
          }"type" : "JSON",
          "keyurl-dependenciespath" : [ "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"/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" : {
            "tagssupportedNssai" : "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>"
}
]

...

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


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