Versions Compared

Key

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

Table of Contents

Jira
serverONAP Jira
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keyCPS-390

...

DMI URI format to follow below pattern Sandeep Shah

<OP>dmi/<v{v-number}>/ch/<cm-handle>/<data|operations|dmi-action>/ch/<cmHandle>/ds/{datastore}/[rp:]<resource-path>?<query>

URIMandatory or OptionalDescription
<OP>mandatorythe HTTP method
dmimandatorythe dmi root resource
<v{v-number}>mandatoryversion of the dmi interface is the target resource URI is the query parameter list
<cm-handle>mandatoryunique (string) identifier of a yang tree instance.
<data|operations|dmi-action>mandatoryyang data, rpc operation or a (non-modeled) ncmp api action
<cmHandle>mandatoryunique (string) identifier of a yang tree instance.
{datastore}optionaloptional datastore
<resource-path>optionalthe path expression identifying the resource that is
being accessed by the operation. If this field is not
present, then the target resource is the API itself.
<query>optionalthe set of parameters associated with the RESTCONF message;
see Section 3.4 of [RFC3986]. RESTCONF parameters have 
the familiar form of "name=value" pairs. Most query parameters are
optional to implement by the server and optional to use by the client. Each optional query parameter is identified by a URI

Datastore

If datastore (ds/{datastore}) is not included in the URL then the request is defaulted to ncmp-datastore:running/operational.

...

RESTCONF/NETCONF relationship


REST API

The examples in the below table refer back to the NCMP interface as the only difference is the  URI prefix /dmi instead of /ncmp


Expand
titleREST API details



UsecaseREST MethodURIExample
1Add a data resource for a cmHandlePOST

{dmi-root}/dmi/v1/data/ch/<cmhandle>/ds/ncmp-datastore:running/{parent-data-resource-identifier}

{
<new-yang-data-resource>
}

Content-Type: application/json

"data" payload : yang-data+json

see example 4 CPS-391Spike: Define and Agree NCMP REST Interface#RESTAPI
2Delete a data resource for a cmHandlePUT{dmi-root}/dmi/v1/data/ch/<cm-handle>/ds/ncmp-datastore:running/{resource-identifier}see example 7 CPS-391Spike: Define and Agree NCMP REST Interface#RESTAPI
3Patch a data resource for a cmHandlePATCH

{dmi-root}/dmi/v1/data/ch/<cm-handle>/ds/ncmp-datastore:running/{resource-identifier}

{
<yang-data-for-merging>
}

Content-Type: application/json

"data" payload : yang-data+json

see example 5 CPS-391Spike: Define and Agree NCMP REST Interface#RESTAPI
4Patch multiple child resources for a single cmHandlePATCH

{dmi-root}/dmi/v1/data/ch/<cm-handle>/ds/ncmp-datastore:running/{resource-identifier}


Content-Type: application/json

"data" payload : yang-patch+json

see example 6 CPS-391Spike: Define and Agree NCMP REST Interface#RESTAPI
5Execute a yang action on a cmhandle instancePOST

{dmi-root}/dmi/v1/data/ch/<cm-handle>/ds/ncmp-datastore:operational/{resource-identifier}/{action}


input: {
         "param1Name" :"param1Value”,
          "param2Name" : "param2Value”

}


Note : If the "action" statement has no "input" section, the request message MUST NOT include a message-body

see example 10 CPS-391Spike: Define and Agree NCMP REST Interface#RESTAPI
6Execute an rpc operationPOST

{dmi-root}/dmi/v1/operations/ch/<cm-handle>/ds/ncmp-datastore:operational/ {module-name}:{action}

{

...

input: {
            "param1Name" : "param1Value”,
             "param2Name" : "param2Value”
}

...

}

Note: If there is no "input" section, the request MUST NOT include a message-body

see example 11 CPS-391Spike: Define and Agree NCMP REST Interface#RESTAPI
7Read a filtered set of data under a data resource for a cmHandlePUT

{dmiroot}/dmi/v1/data/ch/<cm-handle>/ds/ncmp-datastore:operational/{resource-identifier}?fields={fields-expression}

OptionDescription
fieldsRequest a subset of the target
resource contents



8Read data resources with specified fields under a given data resource for a given cmHandlePUT

{dmi-root}/dmi/v1/data/ch/<cm-handle>/ds/ncmp-datastore:operational/{resource-identifier}?fields={fields-expression}


OptionDescription
fieldsRequest a subset of the target
resource contents


see example 12 CPS-391Spike: Define and Agree NCMP REST Interface#RESTAPI
9Get data resource with 'fileds' for a cmhandle with a given scope conditionPUT{dmi-root}/dmi/v1/data/ch/{cm-handle}/ds/ncmp-datastore:operational/{resourcepath}?fields={fields}&scope={scope}see example 2 CPS-391Spike: Define and Agree NCMP REST Interface#RESTAPI
10Read descendant nodes to a given depth for a given cmHandlePUT

{dmi-root}/dmi/v1/data/ch/{cm-handle}/ds/ncmp-datastore:operational/{resource-identifier}?depth={level}


OptionDescription
depthRequest limited sub-tree depth in
the reply content
If '1' then only immediate resource
is retrieved
If '2' then resource plus next level
resources are retrieved


see example 12 CPS-391Spike: Define and Agree NCMP REST Interface#RESTAPI
11Replace data for a CMHandlePUT

{dmi-root}/dmi/v1/data/ch/<cm-handle>/ds/ncmp-datastore:running/{resource-identifier}

{

...

data : {

            .... the complete tree config to be replaced

...

     

...

}

...


DMI Inventory and Sync



Use CaseRest MethodURIExample
1DMI notifies NCMP of new , deleted or
changed cmhandles DMI Plugin NCMP
POST

{ncmp-root}/ncmp/v1/ch/

Scenario : DMI notifies NCMP of new cmhandles
Method : POST
URI : {ncmp-root}/ncmp/v1/ch/
Header :
Content-Type: application/json

Body
:
{}

Body
:
{
"dmi-plugin" : "system:5555", //should be resolvable sevicename in
k8s DNS
"createdcmhandles" : [ // Used for initial cm handle registrations or subsequent
cmhandle creations (post initial registration)
{
"cmhandle" : "rf4er5454",
"additionalProperties" :
{
"subsystemId" : "system-001"
"targetId" : "Subnetwork=Stockholm,MeContext=Kista,ManagedElement=Kista001"
}
},
{
"cmhandle" : "dfget656",
"additionalProperties" :
{
"subsystemId" : "system-001"
"targetId" : "Subnetwork=Stockholm,MeContext=Kista,
ManagedElement=Kista-002"
}
}
...
...
],
...
# Used for updates to cmhandles
"updatedcmhandles" : # For example the cmhandle has got rehomes to a new
system.
{
"cmhandle" : "rf4er5454",
"additionalProperties" :
{
"subsystemId" : "system-001"
"targetId" : "Subnetwork=Stockholm,MeContext=Kista,ManagedElement=Kista001"
}
},
{
"cmhandle" : "dfget656",
"additionalProperties" :
{
"subsystemId" : "system-001"
"targetId" : "Subnetwork=Stockholm,MeContext=Kista,
ManagedElement=Kista-002"
}
}
...
...
],
// Used for deleted cmhandles
"removedcmhandles" : [ "sfsdf", .... ], # array of cmhandles that have been deleted
from the network. ...
}
2Get all the registered cmhandles for a
given plugin
GET{ncmp-root}/ncmp/v1/dmi-plugins/{plugin-id}/ch
Scenario : Get all cmhandles from NCMP for a given dmi-plugin. May be used
for conciliation
Method : GET
URI : {ncmp-root}/ncmp/v1/dmi-plugins/{dmi-plugin}/ch
Header :
Content-Type: application/json

Body :
// EMPTY BODY

Success Response :
HTTP/1.1 200 Ok
Date: Thu, 26 Jan 2021 20:56:30 GMT
Server: example-server
{
"cmhandles" : [
{
"cmhandle" : "sdf8fs0d8",
"additionalProperties" : [
"target" : "Subnetwork=Stockholm,MeContext=Kista,ManagedElement=Kista001",
"subSystem" : "system-001"
]
},
{
"cmhandle" : "sdsd6567687",
"additionalProperties" : [
"target" : "Subnetwork=Stockholm,MeContext=Kista,ManagedElement=Kista002",
"subSystem" : "system-001"
]
}
...
}
3

Notify of change to CMHandle(s)

-

Topic : 'NCMP_INVENTORY' / sync request topic
Topic name should come from Data Catalog OR
should DMI registry store the topic from the initial
NCMP sync request?)

Topic : NCMP_INVENTORY


Event Body :
{
"dmi-plugin" : "sample-adapter:5555",
"createdcmhandles" : # Newly discovered/created cmhandles
{
"cmhandle" : "rf4er5454",
"additionalProperties" :
{
"subsystemId" : "system-001"
"targetId" : "Subnetwork=Stockholm,MeContext=Kista,ManagedElement=Kista001"
}
},
{
"cmhandle" : "dfget656",
"additionalProperties" :
{
"subsystemId" : "system-001"
"targetId" : "Subnetwork=Stockholm,MeContext=Kista,
ManagedElement=Kista-002"
}
}
...
...
],
"updatedcmhandles" : # For example the cmhandle has got rehomes to a new system.
{
"cmhandle" : "rf4er5454",
"additionalProperties" :
{
"subsystemId" : "system-001"
"targetId" : "Subnetwork=Stockholm,MeContext=Kista,ManagedElement=Kista001"
}
},
{
"cmhandle" : "dfget656",
"additionalProperties" :
{
"subsystemId" : "system-001"
"targetId" : "Subnetwork=Stockholm,MeContext=Kista,
ManagedElement=Kista-002"
}
}
...
...
],
"removedcmhandles" : [ "sfsdf", .... ], # array of cmhandles that have been deleted
from the network. ...
}
4Sync the model to NCMPPUT{dmi-root}/dmi/v1/sync/ch/<cmhandle>
Scenario : NCMP requests sync of cmhandle yang tree
Method : PUT
URI : {dmi-root}/dmi/v1/sync/ch/243234
Header :
Content-Type: application/json
Body :
{}


Body
:
{
"additionalProperties" :
{
"subsystemId" : "sample-subsystemId"
"targetId" : "Subnetwork=Stockholm,MeContext=Kista,ManagedElement=1"
}
}


Response
:
HTTP/1.1 200 OK
Date: Thu, 26 Jan 2017 20:56:30 GMT
Server: example-server
Content-Type: application/yang-data-json
{
_3gpp-common-managed-element:ManagedElement [
{
id=1,
...
_3gpp-nr-nrm-gnbdufunction:GNBDUFunction :[
{
id=1,
nrsectcarr3gpp:NRSectorCarrier=1 { # level 2
"_3gpp-common-top:id" : "NRSectorCarrier-1", # level 3
"attributes" : { # level 3
"txDirection" : "DL_AND_UL", # level 4
"arfcnUL" : "55555", # level 4
...
}
},
...
]
}

...