Automation of network services or how to build a virtual lab with OpenDaylight, Postman and Vrnetlab



In this article I will tell you how to configure OpenDaylight to work with network equipment, and also show how you can control this equipment using Postman and simple RESTCONF requests. We will not work with hardware, but instead we will deploy small virtual labs with a single router using Vrnetlab on top of Ubuntu 20.04 LTS .



I will show the detailed configuration first using the example of a Juniper vMX 20.1R1.11 router , and then we will compare it with the Cisco xRV9000 7.0.2 configuration .



Content



  • Required knowledge
  • Part 1 : we briefly discuss OpenDaylight (hereinafter referred to as ODL ) , Postman and Vrnetlab and why we need them
  • Part 2 : description of the virtual laboratory
  • Part 3 : setting up OpenDaylight
  • Part 4 : configuring Vrnetlab
  • Part 5 : using Postman, we connect a virtual router ( Juniper vMX ) to ODL
  • Part 6 : get and change the router configuration using Postman and ODL
  • Part 7 : Add the Cisco xRV9000
  • Conclusion
  • PS
  • List of references


Required knowledge



, , ( , ).



, , ( ) :





1:





  • SDN , Linux Foundation
  • Java inside
  • Model-Driven Service Abstraction Level (MD-SAL)
  • YANG RESTCONF API


. . API.



OpenDaylight .





  • API


REST API OpenDaylight'. , , , Postman .



: ().





  • Docker'
  • : Cisco XRv, Juniper vMX, Arista vEOS, Nokia VSR .
  • Open Source


, . Juniper vMX Cisco xRV9000 Ubuntu 20.04 LTS.



.



2:



:







  • Juniper vMX Docker ( Vrnetlab) .
  • ODL .
  • Postman ODL: / , .




Juniper vMX ODL . vMX 6 Gb 4 . "" (Heulett Packard Enterprise MicroServer ProLiant Gen8, Ubuntu 20.04 LTS). , , "", .



3: OpenDaylight





ODL โ€” Magnesium SR1



1) Java OpenJDK 11 ( )



ubuntu:~$ sudo apt install default-jdk


2) ODL

3)

4)

5) ./bin/karaf



ODL ( 8181, ).



ODL Features, NETCONF RESTCONF. ODL :



opendaylight-user@root> feature:install odl-netconf-topology odl-restconf-all


ODL . ( ).



4: Vrnetlab







Vrnetlab . Docker, git, sshpass:



ubuntu:~$ sudo apt update
ubuntu:~$ sudo apt -y install python3-bs4 sshpass make
ubuntu:~$ sudo apt -y install git
ubuntu:~$ sudo apt install -y \
    apt-transport-https ca-certificates \
    curl gnupg-agent software-properties-common
ubuntu:~$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
ubuntu:~$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
ubuntu:~$ sudo apt update
ubuntu:~$ sudo apt install -y docker-ce docker-ce-cli containerd.io


Vrnetlab



Vrnetlab github:



ubuntu:~$ cd ~
ubuntu:~$ git clone https://github.com/plajjan/vrnetlab.git


vrnetlab:



ubuntu:~$ cd ~/vrnetlab


, . , :



ubuntu:~/vrnetlab$ ls
CODE_OF_CONDUCT.md  config-engine-lite        openwrt           vr-bgp
CONTRIBUTING.md     csr                       routeros          vr-xcon
LICENSE             git-lfs-repo.sh           sros              vrnetlab.sh
Makefile            makefile-install.include  topology-machine  vrp
README.md           makefile-sanity.include   veos              vsr1000
ci-builder-image    makefile.include          vmx               xrv
common              nxos                      vqfx              xrv9k


image



, Vrnetlab, . Juniper vMX .tgz ( ) vmx make:



ubuntu:~$ cd ~/vrnetlab/vmx
ubuntu:~$ #     .tgz   
ubuntu:~$ sudo make


vMX 10-20 . !



, ?

:



" , VCP (Control Plane) , , VRR VCP vMX. Docker, , VCP , , ( 5 ). VCP Docker, Docker --privileged, , qemu KVM , , . , , , , . , , , ."



image Docker:



ubuntu:~$ sudo docker image list
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
vrnetlab/vr-vmx     20.1R1.11           b1b2369b453c        3 weeks ago         4.43GB
debian              stretch             614bb74b620e        7 weeks ago         101MB


vr-vmx



:



ubuntu:~$ sudo docker run -d --privileged --name jun01 b1b2369b453c


:



ubuntu:~$ sudo docker container list
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS                                                 NAMES
120f882c8712        b1b2369b453c        "/launch.py"        2 minutes ago       Up 2 minutes (unhealthy)   22/tcp, 830/tcp, 5000/tcp, 10000-10099/tcp, 161/udp   jun01




IP- :



ubuntu:~$ sudo docker inspect --format '{{.NetworkSettings.IPAddress}}' jun01
172.17.0.2


, Vrnetlab vrnetlab/VR-netlab9.

ssh:



ubuntu:~$ ssh vrnetlab@172.17.0.2
The authenticity of host '172.17.0.2 (172.17.0.2)' can't be established.
ECDSA key fingerprint is SHA256:g9Sfg/k5qGBTOX96WiCWyoJJO9FxjzXYspRoDPv+C0Y.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.17.0.2' (ECDSA) to the list of known hosts.
Password:
--- JUNOS 20.1R1.11 Kernel 64-bit  JNPR-11.0-20200219.fb120e7_buil
vrnetlab> show version
Model: vmx
Junos: 20.1R1.11


.



github .



5: Postman โ€” OpenDaylight



Postman



.



ODL



PUT :





  1. :

    PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01
  2. ( Body):

    <node xmlns="urn:TBD:params:xml:ns:yang:network-topology">
    <node-id>jun01</node-id>
    <host xmlns="urn:opendaylight:netconf-node-topology">172.17.0.2</host>
    <port xmlns="urn:opendaylight:netconf-node-topology">22</port>
    <username xmlns="urn:opendaylight:netconf-node-topology">vrnetlab</username>
    <password xmlns="urn:opendaylight:netconf-node-topology">VR-netlab9</password>
    <tcp-only xmlns="urn:opendaylight:netconf-node-topology">false</tcp-only>
    <schema-cache-directory xmlns="urn:opendaylight:netconf-node-topology">jun01_cache</schema-cache-directory>
    </node>
  3. Authorization Basic Auth /: admin/admin. ODL:

  4. Headers :

    • Accept application/xml
    • Content-Type application/xml


. . , "201 Created":





?

node ODL , .



xmlns="urn:TBD:params:xml:ns:yang:network-topology"
xmlns="urn:opendaylight:netconf-node-topology"


XML (XML namespace) ODL node.



, , โ€” node-id, โ€” host .



โ€” . Schema-cache-directory , YANG Schema . $ODL_ROOT/cache/jun01_cache.





GET :



  1. :

    GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/
  2. Authorization Basic Auth /: admin/admin.


. "200 OK" YANG Schema:





: , 10 PUT, YANG shema ODL. GET :







DELETE :



  1. :

    DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01
  2. Authorization Basic Auth /: admin/admin.


6:





GET :



  1. :

    GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/
  2. Authorization Basic Auth /: admin/admin.


. "200 OK" :







:



protocols {
    bgp {
        disable;
        shutdown;
    }
}


POST :



  1. :

    POST http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/junos-conf-root:configuration/junos-conf-protocols:protocols
  2. ( Body):

    <bgp xmlns="http://yang.juniper.net/junos/conf/protocols">
    <disable/>
    <shutdown>
    </shutdown>
    </bgp>
  3. Authorization Basic Auth /: admin/admin.
  4. Headers :

    • Accept application/xml
    • Content-Type application/xml


"204 No Content"



, , . , .



GET :



  1. :

    GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/junos-conf-root:configuration/junos-conf-protocols:protocols
  2. Authorization Basic Auth /: admin/admin.


:







BGP. :



protocols {
    bgp {
        disable;
    }
}


PUT :



  1. :

    PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/junos-conf-root:configuration/junos-conf-protocols:protocols
  2. ( Body):

    <protocols xmlns="http://yang.juniper.net/junos/conf/protocols">
    <bgp>
        <disable/>
    </bgp>
    </protocols>
  3. Authorization Basic Auth /: admin/admin.
  4. Headers :

    • Accept application/xml
    • Content-Type application/xml


GET , :







DELETE :



  1. :

    DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/junos-conf-root:configuration/junos-conf-protocols:protocols
  2. Authorization Basic Auth /: admin/admin.


GET :





:



, , XML. JSON.



, , PUT :



{
    "junos-conf-protocols:protocols": {
        "bgp": {
            "description" : "Changed in postman" 
        }
    }
}


Headers :



  • Accept application/json
  • Content-Type application/json


( GET ):





7: Cisco xRV9000



, ? Cisco !

xRV9000 7.0.2 (, 8Gb RAM 4 . , Cisco) โ€” .





Docker Juniper. , .qcow2 , , ( xrv9k) make docker-image.



, :



ubuntu:~$ sudo docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
vrnetlab/vr-xrv9k   7.0.2               54debc7973fc        4 hours ago         1.7GB
vrnetlab/vr-vmx     20.1R1.11           b1b2369b453c        4 weeks ago         4.43GB
debian              stretch             614bb74b620e        7 weeks ago         101MB


:



ubuntu:~$ sudo docker run -d --privileged --name xrv01 54debc7973fc


, :



ubuntu:~$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                 PORTS                                                      NAMES
058c5ecddae3        54debc7973fc        "/launch.py"        4 hours ago         Up 4 hours (healthy)   22/tcp, 830/tcp, 5000-5003/tcp, 10000-10099/tcp, 161/udp   xrv01


ssh:



ubuntu@ubuntu:~$ ssh vrnetlab@172.17.0.2
Password:

RP/0/RP0/CPU0:ios#show version
Mon Jul  6 12:19:28.036 UTC
Cisco IOS XR Software, Version 7.0.2
Copyright (c) 2013-2020 by Cisco Systems, Inc.

Build Information:
 Built By     : ahoang
 Built On     : Fri Mar 13 22:27:54 PDT 2020
 Built Host   : iox-ucs-029
 Workspace    : /auto/srcarchive15/prod/7.0.2/xrv9k/ws
 Version      : 7.0.2
 Location     : /opt/cisco/XR/packages/
 Label        : 7.0.2

cisco IOS-XRv 9000 () processor
System uptime is 3 hours 22 minutes


OpenDaylight



vMX . .

PUT :



GET , , :





:



!
router ospf LAB
 mpls ldp auto-config
!


POST :



  1. :

    POST http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/xrv01/yang-ext:mount/Cisco-IOS-XR-ipv4-ospf-cfg:ospf
  2. ( Body):

    {
        "processes": {
            "process": [
                {
                    "process-name": "LAB",
                    "default-vrf": {
                        "process-scope": {
                            "ldp-auto-config": [
                                null
                            ]
                        }
                    }
                }
            ]
        }
    }
  3. Authorization Basic Auth /: admin/admin.
  4. Headers :

    • Accept application/json
    • Content-Type application/json


"204 No Content".



, .

GET :



  1. :

    GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/xrv01/yang-ext:mount/Cisco-IOS-XR-ipv4-ospf-cfg:ospf
  2. Authorization Basic Auth /: admin/admin.


:





DELETE:



  1. :

    DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/xrv01/yang-ext:mount/Cisco-IOS-XR-ipv4-ospf-cfg:ospf
  2. Authorization Basic Auth /: admin/admin.




, , Cisco Juniper OpenDaylight โ€” . .

, OpenDaylight. , โ€” *



...



P.S.



, , ODL, ODL. .



!





  1. Vrnetlab: Emulate networks using KVM and Docker / Brian Linkletter
  2. OpenDaylight Cookbook / Mathieu Lemay, Alexis de Talhouet, Et al
  3. Network Programmability with YANG / Benoรฎt Claise, Loe Clarke, Jan Lindblad
  4. Learning XML, Second Edition / Erik T. Ray
  5. Effective DevOps / Jennifer Davis, Ryn Daniels



All Articles