eNMS is an open source web application designed to help automate networks graphically.
It encompasses the following aspects of network automation:
While network automation traditionally requires scripting skills, eNMS provides a way to automate networks graphically, in a few simple steps:
Nodes and links can be created either one by one by specifying all properties manually, or all at once by importing an Excel spreadsheet. Once created, all objects are displayed in a sortable and searchable table, from which they can be edited and deleted.
The dashboard provides a graphical overview of all objects with dynamic charts.
Try it out yourself: Object management, Dashboard
Relevant part of the doc: Object creation
Two visualizations are proposed:
Views can be filtered to display only a subset of the network. A filter is a combination of values (or regular expressions) for each property: it defines whether an object should be displayed or not.
You can display the property of an object from both views, and start an SSH session to a device.
In the following example, we create a first filter with the regular expression france|spain
for location
to filter all objects that are not in France or in Spain, and a second filter with the value IOS-XR
for Operating System
to filter all nodes that do not have the IOS-XR
operating system.
We use these filters on both views, then start an SSH session to one of the router.
Try it out yourself (double-click on a node to display its properties): Geographical view, Logical view, Filters
Relevant parts of the doc: Geographical view, Logical view, Filters, Bindings
The following types of script can be created:
Scripts can be combined to form a workflow. A workflow is a directed graph which vertices are scripts.
There are two types of edge in a workflow: success edge
and failure edge
. The success edge (resp. failure edge) indicates which path to follow in the graph if the source script was successfully executed (resp. failed).
In the following example, we create a workflow to configure a VRF on Cisco IOS. Our workflow is made of 4 scripts:
create_vrf
: uses NAPALM to configure a new VRF on the router (via Load merge
).NAPALM Commit
: commits the newly configured VRF.validate_vrf
: uses Netmiko to verify that the state of the router is consistent with what is expected.NAPALM Rollback
: use NAPALM to rollback the configuration if the previous validation fails (validate_vrf
script).Try it out yourself: Script creation, Script management, VRF configuration workflow (double-click on a script to display its properties)
Relevant parts of the doc: Scripts, Workflows, OS upgrade workflow,
Once a script / workflow has been created, a task can be scheduled from the graphical view. The targets are selected graphically. Filters can be used to schedule a task on a specific subset of device.
The following parameters are available:
In the following example, we schedule the configure_vrf
workflow created at the previous step.
All scheduling fields are left empty: the workflow is executed immediately.
The scripts of the workflow are executed one by one, except for NAPALM Rollback
as the validation step does not fail.
Try it out yourself (Scheduling
button): Geographical view, Logical view, Calendar
Relevant part of the doc: Scheduling
The results of a periodic task can be compared between two different times, devices or tasks. eNMS displays a dynamic line-by-line diff of the outputs.
In the following example, we schedule two periodic tasks:
show interfaces
on a router with Netmiko.get_interfaces_counters
getter.We can see in the comparison how counters increase through time for both tasks.
Try it out yourself: Task management
Relevant part of the doc: Task results
git clone https://github.com/afourmy/eNMS.git
cd eNMS
pip install -r requirements.txt
(Windows) set FLASK_APP=enms.py
(Unix) export FLASK_APP=enms.py
flask run --host=0.0.0.0
docker run -d -p 5000:5000 --name enms --restart always afourmy/enms
For any feedback, advice, feature request, join us on the Network to Code slack (channel #enms)