CODE FLOWS OF BPMN-INFRA

API Handler is a SO Component. Every Rest API will first reach to the API Handler. Curl command which is mentioned below will directly hit to the E2EServiceInstances.java file of the API Handler component.

API HANDLER ( E2EServiceInstances.java )

curl -v -H “Content-Type: application/json” -X POST –data @request_body_file_name.json -u mso_admin:password1$ http://localhost:8080/onap/so/infra/e2eServiceInstances/v3

Request Body:

    {
   "service":{
      "name":"SliceService",
      "description":"SliceService",
      "serviceInvariantUuid":"dfcd7471-16c7-444e-8268-d4c50d90593a",
      "serviceUuid":"dfcd7471-16c7-444e-8268-d4c50d90593a",
      "globalSubscriberId":"test_custormer",
      "serviceType":"embb",
      "parameters":{
          "locationConstraints":[
          ],
          "resources":[
              {
                  "resourceIndex":"1",
                  "resourceName":"allottedResource",
                  "resourceInvariantUuid":"eeefcd86-7b5b-41ae-9516-08acc5d59d92",
                  "resourceUuid":"265da937-76c7-4152-98e3-5f0d0a844b7f",
                  "resourceCustomizationUuid":"a4eda1d9-1af4-424b-997f-12c57b74c67a",
                  "parameters":{
                      "locationConstraints":[
                      ],
                      "resources":[
                      ],
                      "requestInputs":{
                  }
                  }
              }
          ],
          "requestInputs":{
                          "sST": "embb",
              "sNSSAI": "1-10101",
              "uEMobilityLevel": "stationary",
              "areaTrafficCapDL": 123,
              "maxNumberofUEs": 1000,
              "expDataRateUL": 2000,
              "plmnIdList": "39-00|39-01",
              "areaTrafficCapUL": 456,
              "latency": 300,
              "expDataRateDL": 400,
              "coverageAreaTAList": 101001,
              "activityFactor": 99,
              "resourceSharingLevel": "shared",
             "nstar0_allottedresource0_providing_service_uuid": "4e8d930b-7483-4b9b-8c82-4708638ade4a",
             "nstar0_allottedresource0_providing_service_invariant_uuid": "1899e5c1-df4e-43a8-a889-48c157dad7bc"
          }
      }
   }
Response body:

   {
   "service": {
       "serviceId": "ebe2d37f-f65b-43d8-8906-f81811ed8f22",
       "operationId": "ed9b4c84-17db-4874-8896-25324a0401fe"
     }
   }

Code flows:

  1. It reaches to the E2EServiceInstances.java file of API-Handeler infra project and Input json is mapped to the createE2EServiceInstance method

  2. A unique request id is generated corresponding to every request and checked if request Id already exists in requestdb InfraActiveReqest table

  1. http://request-db-adapter:8083/infraActiveRequests/requestID (GET), which will return a 404 if not exists

  2. createInstance is set to the action variable

  1. Running local validations on input json.

  2. Gets the orchestration url from the recipe table

a. Checks whether the service already exists in catalogdb http://catalog-db-adapter:8082/service/{modelNameVersionId} (GET)

b. Checks the service recipe table with the modelNameVersionId and the action to be perfomed http://catalog-db- adapter:8082/serviceRecipe/search/findFirstByServiceModelUUIDAndAction?serviceModelUUID= {modelNameVersionId}&action=createInstance . Returns a 404 if no recipe exists with the corresponding id.

c. As recipe corresponding to this doesnt exist, we try to get with a default value. This flow comes under default flow so the defaultvalue is UUI_DEFAULT. First we get service with this value http://catalog-db-adapter:8082/service/search/findFirstByModelNameOrderByModelVersionDesc?modelName=UUI_DEFAULT (GET) . It returns a service with modelUUID as dfcd7471-16c7-444e-8268-d4c50d90593a, and further can be used to get the recipe .

d. http://so-catalog-db-adapter.onap:8082/serviceRecipe/search/findFirstByServiceModelUUIDAndAction? serviceModelUUID=dfcd7471-16c7-444e-8268-d4c50d90593a&action=createInstance gives a recipe which has a parameter “orchestrationUri” as “/mso/async/services/CreateCustomE2EServiceInstance”

BPMN-INFRA

Hits CreateCustomE2EServiceInstances

Address: http://bpmn-infra:8081/mso/async/services/CreateCustomE2EServiceInstance

Payload will be reaching to bpmn in the form of:

{
"variables": {
  "bpmnRequest": {
     "value": {
        "requestDetails": {
           "modelInfo": {
              "modelInvariantId": "699dd37d-c82f-4bd5-adec-856900fc2796",
              "modelType": "service",
              "modelNameVersionId": "0692e0c9-8913-41ca-893a-58626f4afff2",
              "modelName": "voLTE",
              "modelVersion": "1.0",
              "modelVersionId": "0692e0c9-8913-41ca-893a-58626f4afff2",
              "modelUuid": "0692e0c9-8913-41ca-893a-58626f4afff2",
              "modelInvariantUuid": "699dd37d-c82f-4bd5-adec-856900fc2796"
           },
           "requestInfo": {
              "source": "UUI",
              "instanceName": "SliceService",
              "suppressRollback": true
           },
           "subscriberInfo": {
              "globalSubscriberId": "test_custormer"
           },
           "requestParameters": {
              "subscriptionServiceType": "MOG",
              "userParams": [
                 {
                    "ServiceInstanceName": "SliceService",
                    "UUIRequest": {
                       "service": {
                          "name": "SliceService",
                          "description": "SliceService",
                          "serviceInvariantUuid": "699dd37d-c82f-4bd5-adec-856900fc2796",
                          "serviceUuid": "0692e0c9-8913-41ca-893a-58626f4afff2",
                          "globalSubscriberId": "test_custormer",
                          "serviceType": "embb",
                          "parameters": {
                             "locationConstraints": [],
                             "resources": [
                                {
                                   "resourceIndex": "1",
                                   "resourceName": "allottedResource",
                                   "resourceInvariantUuid": "eeefcd86-7b5b-41ae-9516-08acc5d59d92",
                                   "resourceUuid": "265da937-76c7-4152-98e3-5f0d0a844b7f",
                                   "resourceCustomizationUuid": "a4eda1d9-1af4-424b-997f-12c57b74c67a",
                                   "parameters": {
                                      "locationConstraints": [],
                                      "resources": [],
                                      "requestInputs": {}
                                   }
                                }
                             ],
                             "requestInputs": {
                                "sST": "embb",
                                "sNSSAI": "1-10101",
                                "uEMobilityLevel": "stationary",
                                "areaTrafficCapDL": 123,
                                "maxNumberofUEs": 1000,
                                "expDataRateUL": 2000,
                                "plmnIdList": "39-00|39-01",
                                "areaTrafficCapUL": 456,
                                "latency": 300,
                                "expDataRateDL": 400,
                                "coverageAreaTAList": 101001,
                                "activityFactor": 99,
                                "resourceSharingLevel": "shared",
                                "nstar0_allottedresource0_providing_service_uuid": "4e8d930b-7483-4b9b-8c82-4708638ade4a",
                                "nstar0_allottedresource0_providing_service_invariant_uuid": "1899e5c1-df4e-43a8-a889-48c157dad7bc"
                             }
                          }
                       }
                    }
                 }
              ],
              "aLaCarte": true,
              "usePreload": true
           }
        },
        "serviceInstanceId": null,
        "vnfInstanceId": null,
        "pnfName": null,
        "networkInstanceId": null,
        "volumeGroupInstanceId": null,
        "vfModuleInstanceId": null,
        "configurationId": null,
        "instanceGroupId": null
     },
     "type": "String"
  },
  "requestId": {
     "value": "6fa42cd2-4f49-4e2c-92fb-fae133277e9e",
     "type": "String"
  },
  "mso-request-id": {
     "value": "6fa42cd2-4f49-4e2c-92fb-fae133277e9e",
     "type": "String"
  },
  "isBaseVfModule": {
     "value": false,
     "type": "Boolean"
  },
  "recipeTimeout": {
     "value": 180,
     "type": "Integer"
  },
  "requestAction": {
     "value": "createInstance",
     "type": "String"
  },
  "serviceInstanceId": {
     "value": "",
     "type": "String"
  },
  "pnfCorrelationId": {
     "value": "",
     "type": "String"
  },
  "vnfId": {
     "value": "",
     "type": "String"
  },
  "vfModuleId": {
     "value": "",
     "type": "String"
  },
  "volumeGroupId": {
     "value": "",
     "type": "String"
  },
  "networkId": {
     "value": "",
     "type": "String"
  },
  "configurationId": {
     "value": "",
     "type": "String"
  },
  "serviceType": {
     "value": "embb",
     "type": "String"
  },
  "vnfType": {
     "value": "",
     "type": "String"
  },
  "vfModuleType": {
     "value": "",
     "type": "String"
  },
  "networkType": {
     "value": "",
     "type": "String"
  },
  "recipeParams": {
     "value": null,
     "type": "String"
  },
  "host": {
     "value": null,
     "type": "String"
  },
  "operationType": {
     "value": "",
     "type": "String"
  },
  "apiVersion": {
     "value": "v3",
     "type": "String"
  },
  "aLaCarte": {
     "value": false,
     "type": "Boolean"
  },
  "requestUri": {
     "value": "",
     "type": "String"
  },
  "instanceGroupId": {
     "value": "",
     "type": "String"
  },
  "generateIdsOnly": {
     "value": false,
     "type": "Boolean"
  }
 }
}

Based on the serviceUuid which is mentioned in the request body it will call the the CreateCommunicationService.bpmn file and This CreateCommunicationService.bpmn is taken as a example to this workflow Understanding which then call the subprocess of this flow and so on.

../_images/CreateCommunicationService.png
  1. CreateCommunicationService -> preProcessRequest()

  1. Get Input Request will be logged as shown above

  2. Get Request ID

  3. Here ServiceInstanceId is null so serviceInstanceId is generated randomly.

  4. Input productFamilyId is null

  5. Now it will get the user input parameter from the request json.

  1. CreateCommunicationService–> prepareInitOperationStatus

  1. Generate a new operation based on serviceInstanceId and operationId

  2. call to prepareUpdateOperationStatus() method

  1. RequestDBUtil–> prepareUpdateOperationStatus()

  1. This method will be called to update the operation status in the requestDB

  2. Exit prepareUpdateOperationStatus()

  3. Exit prepareInitOperationStatus()

  1. Based on the bpmn structure DecomposeService class is called

  1. This class takes input as

  • msoRequestId

  • isDebugLogEnabled

  • serviceInstanceId

  • serviceModelInfo

  • requestParameters

  1. Sent GET request to catalogdb to fetch the data based on serviceModelInvariantId and modelVersion http://so-catalog-db-adapter.onap:8082/ecomp/mso/catalog/v2/{serviceModelUuid}

  2. Response from catalogdb will be looking like:

{
"serviceResources": {
  "modelInfo": {
     "modelName": "CST",
     "modelUuid": "bfc2775b-64ad-41e5-95fe-d3bc57df6c73",
     "modelInvariantUuid": "d4df55ca-c985-46c9-8088-f952181f553e",
     "modelVersion": "1.0"
  },
  "serviceType": "embb",
  "serviceRole": "",
  "environmentContext": "General_Revenue-Bearing",
  "resourceOrder": "ServiceProfile Service Proxy",
  "workloadContext": "Production",
  "serviceVnfs": [],
  "serviceNetworks": [],
  "serviceInfo": {
     "id": 11,
     "serviceInput": [
        {
           "default": true,
           "name": "skip_post_instantiation_configuration",
           "type": "boolean",
           "required": false
        },
        {
           "default": "",
           "name": "useInterval",
           "type": "string",
           "required": false
        },
        {
           "default": "SO-REF-DATA",
           "name": "controller_actor",
           "type": "string",
           "required": false
        },
        {
           "default": "",
           "name": "maxNumberofUEs",
           "type": "integer",
           "required": false
        },
        {
           "default": "",
           "name": "latency",
           "type": "integer",
           "required": false
        },
        {
           "default": "",
           "name": "cds_model_version",
           "type": "string",
           "required": false
        },
        {
           "default": "",
           "name": "uEMobilityLevel",
           "type": "string",
           "required": false
        },
        {
           "default": "",
           "name": "cds_model_name",
           "type": "string",
           "required": false
        },
        {
           "default": "",
           "name": "expDataRateUL",
           "type": "integer",
           "required": false
        },
        {
           "default": "",
           "name": "expDataRateDL",
           "type": "integer",
           "required": false
        },
        {
           "default": "",
           "name": "coverageAreaList",
           "type": "string",
           "required": false
        },
        {
           "default": "",
           "name": "resourceSharingLevel",
           "type": "string",
           "required": false
        }
     ],
     "serviceProperties": [
        {
           "default": true,
           "name": "skip_post_instantiation_configuration",
           "type": "boolean",
           "constraints": [
              {
                 "valid_values": [
                    true,
                    false
                 ]
              }
           ]
        },
        {
           "default": "SO-REF-DATA",
           "name": "controller_actor",
           "type": "string",
           "constraints": [
              {
                 "valid_values": [
                    "SO-REF-DATA",
                    "CDS",
                    "SDNC",
                    "APPC"
                 ]
              }
           ]
        },
        {
           "name": "maxNumberofUEs",
           "type": "integer",
           "required": false
        },
        {
           "name": "latency",
           "type": "integer",
           "required": false
        },
        {
           "name": "expDataRateUL",
           "type": "integer",
           "required": false
        },
        {
           "name": "sNSSAI",
           "type": "string",
           "required": false
        },
        {
           "name": "useInterval",
           "type": "string",
           "required": false
        },
        {
           "default": "39-00",
           "name": "plmnIdList",
           "type": "string",
           "required": false
        },
        {
           "name": "cds_model_version",
           "type": "string"
        },
        {
           "name": "uEMobilityLevel",
           "type": "string",
           "required": false
        },
        {
           "name": "cds_model_name",
           "type": "string"
        },
        {
           "name": "expDataRateDL",
           "type": "integer",
           "required": false
        },
        {
           "name": "coverageAreaList",
           "type": "string",
           "required": false
        },
        {
           "name": "resourceSharingLevel",
           "type": "string",
           "required": false
        }
     ],
     "serviceArtifact": []
  },
  "serviceProxy": [
     {
        "modelInfo": {
           "modelName": "ServiceProfile Service Proxy",
           "modelUuid": "ed00301c-51ec-46a4-b766-e3af50c210d2",
           "modelInvariantUuid": "071d426c-3f9b-44a9-9757-422043d80fc1",
           "modelVersion": "1.0",
           "modelCustomizationUuid": "81c5a468-37d3-4d8d-95f5-e72b0933d3d4",
           "modelInstanceName": "serviceprofile_proxy 0"
        },
        "toscaNodeType": "org.openecomp.nodes.serviceprofile_proxy",
        "description": "A Proxy for Service ServiceProfile",
        "sourceModelUuid": "94553b32-e075-4cb0-b309-dd318ebbf670"
     }
  ],
  "serviceAllottedResources": []
 }
}
  1. CreateCommunicationService–> prepareDoComposeE2E()

  1. To decompose the service based on serviceModelUuid

  1. CreateCommunicationService–> parseCSParamsFromReq()

  1. To parse the CreateCommunication parameter Request from the Request json

  1. Now sending PUT request to AAI based on globalSubscriberId and serviceType

  1. https://aai.onap:8443/aai/v19/business/customers/customer/{globalSubscriberId}/service-subscriptions/service- subscription/{seviceType}/service-instances/service-instance/{serviceInstanceId}

  2. Customer can be got by GET request with https://aai.onap:8443/aai/v19/business/customers/customer/{globalSubscriberId}

  3. Service-Subscription can be got by GET request with https://aai.onap:8443/aai/v19/business/customers/customer/{globalSubscriberId}/service-subscriptions/service- subscription/{seviceType}

  4. Request body for PUT request to the AAI from bpmn:

    {

    “service-instance-name”: “SliceService”, “service-role”: “communication-service”, “environment-context”: “01-70CAA6B”, “created-at”: “2020-06-23 05:02:56”, “model-invariant-id”: “d4df55ca-c985-46c9-8088-f952181f553e”, “model-version-id”: “bfc2775b-64ad-41e5-95fe-d3bc57df6c73”, “orchestration-status”: “processing”, “input-parameters”: “{ "service":{ "name":"SliceService", "description":"SliceService", "serviceInvariantUuid":"d4df55ca-c985-46c9-8088-f952181f553e", "serviceUuid":"bfc2775b-64ad-41e5-95fe-d3bc57df6c73", "globalSubscriberId":"5GCustomer", "serviceType":"5G", "parameters":{ "locationConstraints":[ ], "resources":[ { "resourceIndex":"1", "resourceName":"allottedResource", "resourceInvariantUuid":"eeefcd86-7b5b-41ae-9516-08acc5d59d92", "resourceUuid":"265da937-76c7-4152-98e3-5f0d0a844b7f", "resourceCustomizationUuid":"a4eda1d9-1af4-424b-997f-12c57b74c67a", "parameters":{ "locationConstraints":[ ], "resources":[ ], "requestInputs":{ } } } ], "requestInputs":{ttt "sST": "embb", "sNSSAI": "1-10101", "uEMobilityLevel": "stationary", "areaTrafficCapDL": 123, "maxNumberofUEs": 1000, "expDataRateUL": 2000, "plmnIdList": "39-00|39-01", "areaTrafficCapUL": 456, "latency": 300, "expDataRateDL": 400, "coverageAreaTAList": 101001, "activityFactor": 99, "resourceSharingLevel": "shared", "nstar0_allottedresource0_providing_service_uuid": "4e8d930b-7483-4b9b-8c82-4708638ade4a", "nstar0_allottedresource0_providing_service_invariant_uuid": "1899e5c1-df4e-43a8-a889-48c157dad7bc" } } }}”

    }

Response: Response is returned with an empty entity

  1. Sending PUT request to the AAI for communication service profile

https://aai.onap:8443/aai/v19/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G/service-instances/service-instance/8a95e3ac-32cd-4ffb-b9e3-5366b393a7a2/communication-service-profiles/communication-service-profile/202a5e9a-d1d7-4afd-922f-3e7a709c780c

payload:

{“profile-id”:”202a5e9a-d1d7-4afd-922f-3e7a709c780c”,”max-number-of-UEs”:1000,”latency”:300,”exp-data-rate-UL”:2000,”exp-data-rate-DL”:400,”ue-mobility-level”:”stationary”,”resource-sharing-level”:”shared”}

Response: Response is returned with an empty entity

  1. CreateCommunicationService–> sendSyncResponse()

  1. Send a response to the API-Handler

  2. Response Body:

{
  "service": {
      "serviceId":"8a95e3ac-32cd-4ffb-b9e3-5366b393a7a2",
      "operationId":"a970a804-7ac5-4de9-b6db-17352afbc6fa"
  }
}
  1. CreateCommunicationService–> generateE2EServiceProfile()

  1. It gets the E2E service templete Id and change communication profile to E2E service profile

  2. Basically it generates the E2E service profile

  1. CreateCommunicationService–> preRequestSend2NSMF()

  1. It sets the payload to send to the other bpmn file

  1. Here based on the CreateCommunicationService bpmn structure required bpmn file will be called and corresponding to

    this bpmn, groovy file will be called. For example, Here CreateSliceService.groovy is being called.

  2. CreateCommunicationService–> processNSMFResponse()

  1. It processes the NSMF response code which was returned from other groovy file

  1. CreateCommunicationService–> createCSAndSSRelationship()

  1. It will create relationship between communication service and e2e service

  1. CreateCommunicationService–> createRelationShipInAAI()

  1. Sending a PUT request to make a relationship between two services https://aai.onap:8443/aai/v19/business/customers/customer/5GCustomer/service-subscriptions/service- subscription/5G/service-instances/service-instance/8a95e3ac-32cd-4ffb-b9e3-5366b393a7a2/relationship- list/relationship

  1. Request body:

    { “related-link”:”aai/v16/business/customers/customer/5GCustomer/service-subscriptions/service- subscription/5G/service-instances/service-instance/2e6c2d7f-85c0-4b1f-b7fd-5f2364c27ea7” }

  1. CreateCommunicationService–> prepareUpdateOperationStatus()

  1. prepare update operation status after create relationship in aai

  1. RequestDBUtil–> prepareUpdateOperationStatus()

  1. update operation status in requestDB

  2. DB Adapter Endpoint is: http://so-request-db-adapter.onap:8083/services/RequestsDbAdapter