eNMS: a vendor-agnostic Network Management System using NAPALM for network automation
- By Antoine Fourmy
- Posted January 11, 2018
During the Hackathon, I worked on eNAPALM, a simple web interface to Netmiko and NAPALM.
The idea was to provide a way to use netmiko and napalm for those who don’t have any Python or Ansible knowledge.
After a few weeks, I decided to start all over from scratch and created a whole new project designed to be a Network Management System focused on network visualization and automation: eNMS.
You can find a demo of eNMS here !
In this post, I will start by briefly introducing eNMS network automation features, then show with some practical video examples of Netmiko and NAPALM automation on a Cisco 1841 (IOS) with eNMS.
eNMS network automation features
Types of task
There are four types of task in eNMS:
- Netmiko configuration task: list of commands to configure the device (plain text or Jinja2 template).
- Netmiko show commands task: list of “show commands” which output is displayed in the task logs.
- NAPALM configuration task: partial or full configuration (plain text or Jinja2 template).
- NAPALM getters: list of getters which output is displayed in the task logs.
For all tasks, the user can choose one or more target devices.
eNMS also provides some scheduling functions:
- Start date: instead of running the task immediately, the task starts at a specific time.
- Frequency: the task is run periodically. This is especially useful for tasks that pull some information from the device, i.e netmiko show commands / NAPALM getters tasks.
How to use eNMS: a few examples
First step: import your network
Nodes and links can be created in two ways:
- one by one by specifying all properties manually, in the Object creation page.
- by importing an Excel file with one sheet per type of object.
Examples of such Excel files are available in the /project folder.
Once your objects have been created, you can go to the Overview page. All objects are displayed in a sortable and searchable table.
Simple configuration script with Netmiko
- Create a script in the Script creation page.
- Set the script parameters (netmiko driver, global delay factor, target devices).
For complex script, it is best to use Jinja2 templating language:
- Write a Jinja2 template in the Script creation page.
- Import a YAML file that contains all associated variables.
eNMS will take care of converting the template to a real text-based script.
NAPALM can be used to change the configuration (merge or replace), either via a plain text script or a Jinja2-enabled template.
Netmiko show commands periodic retrieval
You can schedule a task to retrieve the output of a list of commands (show, ping, traceroute, etc) periodically. The result is stored in the database and displayed in the logs of the task, in the Task management page.
NAPALM getters periodic retrieval
You can also schedule a task to retrieve a NAPALM getter periodically.
For all periodic tasks, you can compare the results between any two devices, at two different times.
The comparison result is displayed with two methods:
- A unified diff: show just the lines that have changed plus a few lines of context, in an inline style. (like Git)
- A ndiff: list every line and highlights interline changes.
eNMS technical stack
- Web framework: Flask
- Database: SQLAlchemy / SQLite (possible migration to PostgreSQL soon)
- Task scheduling: AP Scheduler (via flask_apscheduler)
You can find more information about eNMS on Github