eNMS - first release
I spent the past few weeks working on eNMS, a vendor-agnostic NMS designed for network visualization and, more importantly, network automation. I've just published a first release yesterday that you can find on Github:
You can find a description of the main features in the readme, I made some video to make it as clear as possible what you can do with it.
I also hosted a demo version on pythonanywhere, which you can find at the following link:
http://ift.tt/2mxeVCX credentials: username: cisco / password: cisco
(this demo is mainly for you to see what it looks like, I disabled most functionalities.)
Features:
In short, the main features are:
-
interface to Netmiko and NAPALM to send scripts graphically to about any type of network device (or group of devices)
-
possibility to use Jinja2 along with a YAML file to send a template-based script
-
scheduling of the script: you can send a script to any group of devices, at any time, at any frequency (once a day, once a week, etc). When a script is sent to a group of device, it is executed in parallel with multiple processes (so it's very fast, even if you have hundreds of routers/switches).
-
visualization of your network with either Open Street Map or via a force-based algorithm if you don't have the GPS coordinates
-
SSH connection to a device from OpenStreetMap or the force-based visualization
-
TACACS+ authentication
-
Dashboard showing some useful information about your network
-
Advanced regex-based filtering (very important and powerful: see readme for details)
-
Export to Google Earth
-
a few other things
If you want to find out more about the project, I suggest you read the readme on github.
History of the project:
It all started during the NAPALM hackathon end of november, when I created a first version that I called "eNAPALM". After a while, I decided to change a lot of things and it wasn't entirely focused on NAPALM anymore, so I renamed it eNMS. So the project is about 6-7 weeks old and there definitely is some testing / debugging to do (if you find a bug (there should be plenty), you can create an issue on github and I'll do my best to fix it). I reimplemented many features that I had already implemented about a year ago in pyNMS (http://ift.tt/2vPCU2U), a similar project in pyQt.
Technical stack:
Back-end:
-
Python (Flask)
-
APScheduler (job scheduling)
-
NAPALM / Netmiko / Jinja2 / YAML (network automation)
-
SQLAlchemy (SQLite for now but I will switch to PostgreSQL soon)
Front-end:
-
Bootstrap
-
Javascript (leaflet, vis, jquery, etc.)
See the "Credits" section of the readme for more information.
For the front-end, I used a Bootstrap template called "Gentelella" (http://ift.tt/1TvhJfN). When I started, there was no integration of Gentelella with Flask (only Django) so as a pre-requisite of eNMS, I had to do that. I thought it might be interesting for other devs, so I made it a standalone project. If you want to develop some Flask interface, this can be a good place to start, kinda like a Flask boilerplate: http://ift.tt/2Aaxbuo
Contributions:
Contributions are most welcome ! This could be improving the code, adding some features (see the issues for a list of things that would be nice to have), creating some documentation (the readme is pretty much all there is right now), creating files for the containerization (I made a /docker folder to host some dockerfiles for example), and commiting some useful templates that you use.
For the templates, I made a /script folder where I show some examples of Jinja2 templates + the YAML file that goes with it. If you have such j2 template (any platform / OS), and you're willing to share, that would be awesome. (the "structure" would be /script/vendor-name/os-name/the-files-here)
Distribution:
GPLv3. Free.
Be careful:
When you use NAPALM merge or NAPALM replace function, the script is automatically commited ! => Be careful not to destroy your network (disclaimer: if you do destroy your network, I'm not responsible) I will change the behavior in the future, by not commiting after loading the conf and instead, display the diff before commiting, see http://ift.tt/2mv0Fe5
No comments:
Post a Comment