TBDMT = Template-Based Data Model Transformer, it is currently part of CPS.

References

  1. CPS-TBDMT Service (Honolulu work)
  2. CPS APIs (for SON and E2E Network Slicing use cases)
  3. Presentation given to ArchCom: cps_tbdmt_20210323_v1.0.pptx


Design & Implementation

This service shall be used to map the erstwhile Config-DB-like REST APIs to appropriate CPS API calls. The purpose of this service is to abstract the details of (possibly multiple, and complex) XPath queries from the users of CPS. It enables CPS-users to continue using simple REST API calls that are intuitive and easy-to-understand and implement. The mapping to appropriate queries to CPS (including mapping of one API call to many Xpath queries) shall be done in a generic way by the CPS-TBDMT service.


1. Architecture


2. API definition guide

Swagger file: CPS-TBDMT-swagger.yaml

Template CRUD operations

Create xpath template
Interface definitionDescription
Content-Typeapplication/json
OperationPOST
URI/templates
Request Body
AttributeRequiredTypeDescription
templateIdYStringIdentifier for the template
modelYStringschema set on which xpath query should be executed
requestTypeYStringrequest type(get, post ..)
xpathTemplateYStringxpath template
includeDescendantsYbooleaninclude descendants
multipleQueryTemplateIdNStringmultiple query template Id
transformParamNStringtranformation format("param1, param2")
Response Codes
CodeDescription
201Template created successfully
400Bad Request (Error in request attributes)
500Internal server error
List all xpath templates
Interface definitionDescription
Content-Typeapplication/json
OperationGET
URI/templates
Response Codes
CodeDescription
200Templates returned successfully
404No templates found
500Internal server error
Response Body
AttributeRequiredTypeDescription
templatesYListList of template objects
Template Object
AttributeRequiredTypeDescription
templateIdYStringIdentifier for the template
modelYStringschema set on which xpath query should be executed
requestTypeYStringrequest type(get, post ..)
xpathTemplateYStringxpath template
includeDescendantsYBooleaninclude descendants
multipleQueryTemplateIdNStringmultiple query template Id
transformParamNStringtransformation format("param1, param2")
Execute template
Interface definitionDescription
Content-Typeapplication/json
OperationPOST
URI/execute/{model}/{id}
Request Body
AttributeRequiredTypeDescription
inputParametersYJSON blobInput dictionary to be applied to the template
payloadNJSON blobPayload to be used during edit/patch
Response Codes
CodeDescription
200Template executed successfully
400Bad Request (Error in request attributes)
404Template Not  found
500Internal server error
Response Body
AttributeRequiredTypeDescription
resultYJSON BlobResult of the xpath query as JSON object

3. Definition of templates

Sample xpath query

/NearRTRIC[idNearRTRIC=11]/GNBDUFunction[idGNBDUFunction=1]/NRCellDU[idNRCellDU=15296]/attributes/RRMPolicyRatio[id=123]

Sample xpath template

/NearRTRIC[idNearRTRIC='\''{{nearrtric_id}}'\'']/GNBDUFunction[idGNBDUFunction='\''{{gnbdu_id}}'\'']/NRCellDU[idNRCellDU='\''{{nrcelldu_id}}'\'']/attributes/RRMPolicyRatio[id='\''{{rrmpolicy_id}}'\'']

Sample API for the above template


Response Object

4. Output Transformation Template Example

   

curl --location --request POST 'http://localhost:8080/templates' --header 'Content-Type: application/json' --data-raw '{
"templateId": "get-ric",
"model": "ns-schemaset",
"requestType": "get",
"xpathTemplate": "/",
"includeDescendants": true,
"transformParam":"NearRTRIC,GNBDUFunction,NRCellDU,idNRCellDU"
}'


5. Multiple query Example

Example test-tree model:

{"branch":[{"name":"Right","nest":{"name":"Big","birds":["Owl","Raven","Crow"]}},{"name":"Left","nest":{"name":"Small","birds":["Robin","Sparrow","Finch"]}}]}

Get-all-data
curl --location --request POST 'http://localhost:8080/templates' --header 'Content-Type: application/json' --data-raw '{
"templateId": "get-all-data",
"model": "CSIT-SchemaSet",
"requestType": "get",
"xpathTemplate": "/test-tree",
"includeDescendants": true,
"transformParam":"branch,name"
}' -i

curl --location --request POST 'http://localhost:8080/execute/CSIT-SchemaSet/get-all-data' --header 'Content-Type: application/json' --data-raw '{
"inputParameters": {
}
}' -i

Response: 

["Left","Right"]

The above response will be inserted ({{name}}) in the below template and will be executed twice(First "/test-tree/branch[@name='Left']/nest"  and then "/test-tree/branch[@name='Right']/nest") to give collective output.

Get-branch
curl --location --request POST 'http://localhost:8080/templates' --header 'Content-Type: application/json' --data-raw '{
"templateId": "get-branch",
"model": "CSIT-SchemaSet",
"requestType": "get",
"xpathTemplate": "/test-tree/branch[@name='\''{{name}}'\'']/nest",
"includeDescendants": true,
"multipleQueryTemplateId":"get-all-data",
"transformParam":"birds"
}' -i

6. Supported requestTypes:

  1. get (/anchors/{anchor}/node?xpath=)
  2. query (/anchors/{anchor}/nodes/query?xpath)
  3. query-cps-path (/anchors/{anchor}/nodes/query?cps-path)
  4. post (/anchors/{anchor}/nodes?xpath=)
  5. put (/anchors/{anchor}/nodes?xpath=)
  6. patch (/anchors/{anchor}/nodes?xpath=)
  7. post-list-node (/anchors/{anchor}/list-node?xpath=)
  8. delete(/anchors/{anchor}/nodes?xpath=)
  9. delete-list-node(/anchors/{anchor}/list-nodes/?xpath=)


7. Deployment aspects

  1. git clone "https://gerrit.onap.org/r/cps/cps-tbdmt
  2. cd cps-tbdmt/
  3. mvn clean install
  4. cd docker-compose/
  5. update cps & ncmp ip-address in application.yml
  6. docker-compose up (use the image built using the above steps in the docker-compose file)



  • No labels