eNMS-automation/eNMS
An enterprise-grade vendor-agnostic network automation platform.
repo name | eNMS-automation/eNMS |
repo link | https://github.com/eNMS-automation/eNMS |
homepage | https://enms.readthedocs.io/en/latest/ |
language | Python |
size (curr.) | 112519 kB |
stars (curr.) | 478 |
created | 2017-10-08 |
license | GNU General Public License v3.0 |
Introduction
eNMS is a vendor-agnostic NMS designed for building workflow-based network automation solutions.
It encompasses the following aspects of network automation:
- Configuration Management Service: Backup with Git, change and rollback of configurations.
- Validation Services: Validate data about the state of a device with Netmiko and NAPALM.
- Ansible Service: Store and run Ansible playbooks.
- REST Service: Send REST calls with variable URL and payload.
- Python Script Service: Any python script can be integrated into the web UI. eNMS will automatically generate a form in the UI for the script input parameters.
- Workflows: Services can be combined together graphically in a workflow.
- Scheduling: Services and workflows can be scheduled to start at a later time, or run periodically with CRON.
- Event-driven automation: Services and workflows can be triggered by an external event (REST call, Syslog message, etc).
Main features
1. Network creation
Your network topology can be created manually or imported from an external Source of Truth (OpenNMS, LibreNMS, or Netbox). Once created, it is displayed in a sortable and searchable table. A dashboard provides a graphical overview of your network with dynamic charts.
Inventory | Dashboard |
---|---|
- Docs: Objects
2. Network visualization
eNMS can display your network on a world map (Google Map or Open Street Map). Each device is displayed at its GPS coordinates. You can click on a device to display its properties, configuration, or start an SSH terminal session. Colocated devices can be grouped into geographical sites (campus, dacacenter, …), and displayed logically with a force-directed layout.
Network View | Sites View |
---|---|
- Docs: Geographical View
3. Service creation
eNMS comes with a number of “default services” leveraging libraries such as ansible
, requests
, netmiko
, napalm
to perform simple automation tasks. However, absolutely any python script can be turned into a service. If your python script takes input parameters, eNMS will automatically generate a form in the web UI.
Services can be combined into a workflow.
- Docs: Workflow System, Workflow Payload
5. Event-driven automation
While services can be run directly and immediately from the UI, you can also schedule them to run at a later time, or periodically by defining a frequency or a CRON expression. All scheduled tasks are displayed in a calendar.
Services can also be executed programmatically:
-
eNMS has a REST API and a CLI interface that can be used to create, update and delete any type of objects, but also to trigger the execution of a service.
-
eNMS can be configured as a Syslog server, and rules can be created for syslog messages to trigger the execution of a service.
-
Docs: Scheduling, REST API
6. Configuration Management
eNMS can work as a network device configuration backup tool and replace Oxidized/Rancid with the following features:
- Poll network elements and store the latest configuration in the database.
- Search for any text or regular-expression in all configurations.
- Download device configuration to a local text file.
- Use the REST API support to return a specified device’s configuration.
- Export all configurations to a remote Git repository (e.g. Gitlab) to view differences between various revisions of a configuration.
Getting started
Online content
- An overview of eNMS on youtube
- A podcast about eNMS and network automation
Quick Install
Install python 3.6+ (earlier versions not supported)
git clone https://github.com/afourmy/eNMS.git
cd eNMS
pip3 install -r build/requirements/requirements.txt
export FLASK_APP=app.py
flask run --host=0.0.0.0
Log in (default credentials: admin / admin)
Contact
For any feedback, advice, feature request, join us on the Network to Code slack, channel #enms.