Giter VIP home page Giter VIP logo

enms's Introduction

eNMS

An enterprise-grade vendor-agnostic network automation platform.


Branch Status Coverage Documentation Python Style JavaScript Style License
master Build Status (master branch) Coverage (master branch) Documentation (master branch) PEP8
Code style: black
Code style: google
Code style: prettier
License
develop Build Status (develop branch) Coverage (develop branch) Documentation (develop branch)

Introduction

eNMS is a vendor-agnostic NMS designed for building workflow-based network automation solutions.

eNMS

It encompasses the following aspects of network automation:

  • Configuration Management Service: Commit / Rollback of a configuration with Napalm or Netmiko.
  • Ansible Service: Sending and managing Ansible playbooks.
  • ReST Service: Sending a ReST call (GET/POST/UPDATE/DELETE) with variable URL and payload.
  • Custom Services: Any python script can be integrated into the web UI. If the script takes input parameters, a form will be automatically generated.
  • 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.
  • Event-driven automation: Services and workflows can be triggered by an external event (ReST call or Syslog message).

Workflow System


Main features

1. Network creation

Devices and links can be created either one by one, 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.

A dashboard provides a graphical overview of all objects with dynamic charts.

Inventory Dashboard
Inventory Dashboard

2. Network visualization

Once created, eNMS can display your network:

  • geographically on a 2D or 3D world map (with the tile layer of your choice: Open Street Map, Google Map...)
  • logically with a force-based algorithm (d3.js).

You can click on a device to display its properties or start a Web SSH terminal session.

Geographical View Logical View
Geographical Logical

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.

To generate a form that matches your service, eNMS will perform the following conversion:

  • python string -> Text box (single line or multiline)
  • python list -> Drop-down list (single or multiselect).
  • python bool -> Checkbox.
  • python dict -> Text box expecting a dictionary.

eNMS

Once created, you can have as many instances of your service as you need. Service instances can be executed, edited and deleted from the web UI.

Service Management

4. Workflows

Services (and other Workflows) can be combined into a single workflow.

Within a workflow, services can be connected with two edge types: Success edge and Failure edge. The Success edge (versus Failure edge) indicates which path to follow in the graph if the source service is successfully executed (versus failed).

A workflow keeps track of a payload dictionary, such that when a service starts, it has access to the results of all previously executed services.

When a workflow is executed, its status will be updated in real-time on the web UI.

Workflow Builder

5. Scheduling

While services and workflows can be run directly and immediately from the web UI, you can also schedule them to run at a later time, or periodically by defining a frequency, a start date and an end date. All scheduled tasks are displayed in a calendar.

Calendar

6. Configuration Management

eNMS can work as a network device configuration backup tool and replace Oxidized/Rancid with the following features:

  • Poll network elements; download configurations when they change
  • Easily view the current configuration of a device in the inventory
  • Search for any text in any configuration
  • View differences between various revisions of a configuration
  • Download device configuration to a local text file
  • Use the ReST API support to return a specified device’s configuration
  • Export all device configurations to a remote Git repository (e.g. Gitlab)

Configuration Management

6. Event-driven automation

Event-driven automation in eNMS has two aspects:

  • eNMS has a ReST API that can be used to create, update and delete any type of objects (services, workflows, tasks), but also to trigger the execution of a service or a workflow with a GET request to the appropriate URL.
  • eNMS can be configured as a Syslog server: all logs are stored in the database, and rules can be created to trigger the execution of a service or a workflow upon receiving a log matched by the rule.

Docs: ReST API

Notification system

After a service or a workflow is executed, you can configure eNMS to send a notification with the results. Three types of notification are available:

  • via mail (a brief summary and the full logs attached as a textfile)
  • via Slack
  • via Mattermost (Open-Source and private alternative to Slack)

Additionally, eNMS can be configured to push the results to a remote Git repository.


Advanced features

1. Authentication

  • eNMS supports TACACS+ and LDAP/Active Directory authentication: upon logging in, a request will be sent to your TACACS+/LDAP server to validate the credentials and log in the user.
  • Authentication with RADIUS is currently under development.

2. Network creation with external Network Source of Truth

If you use an NSoT like OpenNMS or Netbox to document your network, eNMS can automatically import the network topology (devices and links), as well as all IP addresses and geographical coordinates.

3. Network export

  • Networks can be exported as an Excel file.
  • Networks can be exported as a kmz file for you to visualize your network on Google Earth.

Getting started

Quick start

Install python 3.6+ (earlier versions not supported)
git clone https://github.com/afourmy/eNMS.git
cd eNMS
pip3 install -r requirements.txt
export FLASK_APP=app.py (on Windows, use `set` instead of `export`)
flask run --host=0.0.0.0
Log in (default credentials: admin / admin)

Quick start as a docker container

With a SQLite database

sudo docker build -t enms -f docker/Dockerfile .
sudo docker run -it -d -p 5000:5000 --name enms enms
Log in (default credentials: admin / admin)

With a PostgreSQL database

sudo docker-compose -f docker/docker-compose.yml up -d
Log in (default credentials: admin / admin)

Deploy eNMS in production

In production, eNMS is configured to use a PostgreSQL database and a Hashicorp Vault (storage of network credentials).

Check out the Installation section of the docs: Install eNMS

Contact

For any feedback, advice, feature request, join us on the Network to Code slack, channel #enms.


Coming up next

  • RADIUS authentication
  • Database clustering architecture
  • Training Videos

Other projects you might be interested in

  • Flask Gentelella: The Flask/Bootstrap template eNMS is built upon.
  • pyNMS: A PyQt software for network simulation and optimization.
  • SWAP: A solver for the Wavelength Assignment Problem in optical networks.

enms's People

Contributors

afourmy avatar shorton3 avatar codfant avatar longdn84 avatar oznetnerd avatar jberger avatar sliddjur avatar jackwa avatar jmcgrath207 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.