Software to check EOS topology and validate physical deployment in large environment.
- Interface status
- LLDP topology
- BGP Status
- BGP status for EVPN
- MLAG Status check
- PDF export.
- Python 3
- Flask
- wkhtmltopdf
- DNS resolution for EOS devices.
- eAPI running on port
80
$ pip install -r requirements.txt
On Macos, use brew:
$ brew install Caskroom/cask/wkhtmltopdf
On headless centos, use following setup:
# Install base tool
$ yum install -y wkhtmltopdf
# Required for headless use
$ yum install xorg-x11-server-Xvfb
$ yum install xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi
# Create Service file
$ vim xvfb.service
[Unit]
Description=Virtual Frame Buffer X Server
After=network.target
[Service]
ExecStart=/usr/bin/Xvfb :42 -screen 0 1024x768x24 -ac +extension GLX +render -noreset
[Install]
WantedBy=multi-user.target
# Deploy service
$ cp xvfb.service /etc/systemd/system/xvfb.service
$ sudo systemctl enable xvfb.service && sudo systemctl start xvfb.service && sudo systemctl status xvfb.service
$ sudo systemctl daemon-reload
# Create binary
$ printf '#!/bin/bash\nxvfb-run -a --server-args="-screen 0, 1024x768x24" /usr/bin/wkhtmltopdf -q $*' > /usr/bin/wkhtmltopdf.sh
$ chmod a+x /usr/bin/wkhtmltopdf.sh
$ ln -s /usr/bin/wkhtmltopdf.sh /usr/local/bin/wkhtmltopdf
# Run a test
$ wkhtmltopdf http://www.google.com output.pdf
Server uses DNS hostname to reach devices and connect using eAPI on HTTP port (not HTTPS)
Edit the file referenceCablingMap.json The network representation is based on level (from 1 to nn)
In general:
level1
is for the Spine.level2
is for the Leaf.level3
is for the distribution Leaf.
Reference cable example file:
{
"level1": { // Spine level
"spine1": { // Spine hostname
"1": ["leaf1-A","1"], // Spine1_Eth1 connected to leaf1-A Ethernet1
"2": ["leaf1-B","1"]
},
"spine2": {
"1": ["leaf1-A","2"],
"2": ["leaf1-B","2"]
}
},
"level2": {
"leaf1-A": {
"3": ["leaf1-B","3"],
"5": ["leaf3-A","1"]
},
"leaf1-B":{
"5": ["leaf3-A","2"],
"6":["leaf-level2","2"]
},
"leaf2-A": {
"3": ["leaf2-B","3"],
"4":["leaf4-A","1"]
},
"leaf2-B":{
"4":["leaf4-A","2"]
}
},
"level3":{
"leaf3-A":{
"18":["leaf5-A","1"]
}
}
}
Edit file dwarfFunction.py and change value for username and password:
username = 'dwarf'
password = 'arista'
Edit config.py
accordingly:
AUTHOR = "EOS User"
SITE = "DC1 Fabric"
when executed, server is configured to listen on all interfaces on port 80. It means, you need to get root permission to open socket on that particular port
[root@centos7-lab arista_Check]# python3 run.py
* Serving Flask app "visuapp.views" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
10.73.1.240 - - [06/Jun/2020 12:05:47] "GET /static/css/bootstrap/bootstrap.min.css HTTP/1.1" 200 -
10.73.1.240 - - [06/Jun/2020 12:05:47] "GET /static/css/pdf.css HTTP/1.1" 200 -
10.73.1.28 - - [06/Jun/2020 12:05:48] "GET /mapCablingPdf HTTP/1.1" 200 -
10.73.1.28 - - [06/Jun/2020 12:06:01] "GET / HTTP/1.1" 200 -
Project is published under Apache License.