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.
- 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
ubuntu:~$ sudo apt install default-jdk
ODL ( 8181, ).
ODL Features, NETCONF RESTCONF. ODL :
opendaylight-user@root> feature:install odl-netconf-topology odl-restconf-all
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 . !
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 :
- :
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01
- ( 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>
- Authorization
Basic Auth
/: admin/admin. ODL:
- 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 :
- :
GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/
- Authorization
Basic Auth
/: admin/admin.
. "200 OK" YANG Schema:
: , 10 PUT, YANG shema ODL. GET :
DELETE :
- :
DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01
- Authorization
Basic Auth
/: admin/admin.
6:
GET :
- :
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/
- Authorization
Basic Auth
/: admin/admin.
. "200 OK" :
:
protocols {
bgp {
disable;
shutdown;
}
}
POST :
- :
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
- ( Body):
<bgp xmlns="http://yang.juniper.net/junos/conf/protocols"> <disable/> <shutdown> </shutdown> </bgp>
- Authorization
Basic Auth
/: admin/admin. - Headers :
- Accept application/xml
- Content-Type application/xml
"204 No Content"
, , . , .
GET :
- :
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
- Authorization
Basic Auth
/: admin/admin.
:
BGP. :
protocols {
bgp {
disable;
}
}
PUT :
- :
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
- ( Body):
<protocols xmlns="http://yang.juniper.net/junos/conf/protocols"> <bgp> <disable/> </bgp> </protocols>
- Authorization
Basic Auth
/: admin/admin. - Headers :
- Accept application/xml
- Content-Type application/xml
GET , :
DELETE :
- :
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
- 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 :
- :
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
- ( Body):
{ "processes": { "process": [ { "process-name": "LAB", "default-vrf": { "process-scope": { "ldp-auto-config": [ null ] } } } ] } }
- Authorization
Basic Auth
/: admin/admin. - Headers :
- Accept application/json
- Content-Type application/json
"204 No Content".
, .
GET :
- :
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
- Authorization
Basic Auth
/: admin/admin.
:
DELETE:
- :
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
- Authorization
Basic Auth
/: admin/admin.
, , Cisco Juniper OpenDaylight โ . .
, OpenDaylight. , โ *
...
P.S.
!
- Vrnetlab: Emulate networks using KVM and Docker / Brian Linkletter
- OpenDaylight Cookbook / Mathieu Lemay, Alexis de Talhouet, Et al
- Network Programmability with YANG / Benoรฎt Claise, Loe Clarke, Jan Lindblad
- Learning XML, Second Edition / Erik T. Ray
- Effective DevOps / Jennifer Davis, Ryn Daniels