Patch or Merge Operation

In the case of RFC 8040, resources for configuration and operational datastores start /rests/data/.

For example:

GET http://localhost:8181/rests/data/network-topology:network-topology with response of both datastores. It is allowed to use query parameters to distinguish between them.
GET http://localhost:8181/rests/data/network-topology:network-topology?content=config for configuration datastore
GET http://localhost:8181/rests/data/network-topology:network-topology?content=nonconfig for operational datastore.

Also in the case of RFC 8040, if a data node in the path expression is a YANG leaf-list or list node, the path segment has to be constructed by having leaf-list or list node name, followed by an “=” character, then followed by the leaf-list or list value. Any reserved characters must be percent-encoded.

For example:

GET http://localhost:8181/rests/data/network-topology:network-topology/topology=topology-netconf?content=config

Retrieves data from configuration datastore for topology-netconf value of topology list is equivalent to the deprecated request.

A patch request can be used to modify an existing configuration. Currently, only yang-patch (RFC 8072) is supported. The URL would be the same as the above PUT examples.

Using JSON for the body, the headers needed for the request would be:

Copy
Accept: application/yang.patch-status+json
content-Type: application/yang.patch+json

(Change the header-type for XML accordingly.)

JSON payload
Copy
content-Type: application/yang.patch+json
{
  "ietf-restconf:yang-patch" : {
    "patch-id" : "0",  
    "edit" : [
      {
        "edit-id" : "edit1",  
        "operation" : "merge",  
        "target" : "/",    //target value is the module to be configured
        "value" : {
 
 
         ### configuration goes here ###
 
 
        }
     }
    ]
  }
}
XML payload
Copy
content-Type: application/yang.patch+xml
<yang-patch xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf">
    <patch-id>0</patch-id>
    <edit>
        <edit-id>edit1</edit-id>
        <operation>merge</operation>
        <target>/   </target> //target value is the module to be configured
        <value>
 
 
            ### config goes here ###
 
 
        </value>
    </edit>
</yang-patch>

This example shows a patch operation to edit ip-address for interface using ODL:

Copy
PATCH 

http://localhost:8181/rests/data/network-topology:network-topology/topology=topology-
netconf/node=123a/yang-ext:mount/ipi-interface:interfaces/interface=eth3/ipi-if-ip:ipv4
JSON payload
Copy
content-Type: application/yang.patch+json
{
    "ietf-restconf:yang-patch": {
        "patch-id": "",
        "edit": [
            {
                "edit-id": "edit1",
                "operation": "merge",
                "target": "/ipi-if-ip:config",
                "value": {
                    "ipi-if-ip:config": {
                        "primary-ip-addr": "x.x.x.x/24"
                    }
                }
            }
        ]
    }
}
XML payload
Copy
content-Type: application/yang.patch+xml
<yang-patch xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf">
    <patch-id>0</patch-id>
    <edit>
        <edit-id>edit1</edit-id>
        <operation>merge</operation>
        <target>/ipi-if-ip:config</target>
        <value>
            <config xmlns="http://www.ipinfusion.com/yang/ocnos/ipi-if-ip">
                <primary-ip-addr>x.x.x.x/24</primary-ip-addr>
            </config>
        </value>
    </edit>
</yang-patch>

Header for the action: