Extend Devices and Links with subclass / custom properties and a separate tab in the UI, the same way services work.
Remove deep_services function used for export, use service.children relationship instead.
Dont subclass SQLAlchemy Column following advice of SQLAlchemy creator.
Make corrupted edges deletion mechanism a troublehooting snippet instead of a button in the admin panel.
Move redis configuration in settings.json > "redis" key
Add new mechanism to limit results in server-side drop-down list with filtering constraints.
Limit superworkflow selection to workflows that contains the shared Placeholder service.
Set trigger variable to "Regular Run" or "Parameterized Run" when service is triggered from the UI instead of "UI".
Add SSH Proxy mechanism (multiple jump server in gateways property, gateway device subtype, priority
tie-break mechanism)
Consider runtime limiting user / all toggle mechanism in the restart service window.
Move doc link to settings.json to allow custom doc links for plugins. Generate doc link in the jinja2 template
instead of javascript (otherwise, wrong doc link until updated in js)
Move tables refresh rate to settings.json to allow for custom refresh rates.
New "Category" property / mechanism for the drop-down list of the site and workflow builder.
Reinstate service selection with single left click (Ctrl no longer needed)
Remove pytest, coverage, and travis dependencies.
Reinstate single left click for node selection in workflow & site builder.
Remove most union subquery in rbac_filter because a union of query yields a CompoundSelect
SQLAlchemy object, and this is not compatible with using with_entites (via filtering properties kw).
Fix export in bulk (the hierarchical display mode was not considered, all services inside a workflow
were exported even when "hierarchical display" was selected)
Add notification banner mechanism
Remove default_access property, replace with "admin_only" boolean. Impact on migration.
Make "run_service" rest api endpoint default to async True
Update netmiko and napalm Backup services to load deferred row before updating. Impact on both services.
Remove pathlib from requirements.txt
Update workflow algorithm to not add services to priority queue in DxD mode if all are discarded.
Update Ansible Service to use custom path in cwd argument of subprocess.check_output.
Change default priority to 10 for services. Update of migration files required.
Implement Cache Invalidation mechanism so that javascript/css files are reloaded at each release.
Cache invalidation is activatated by setting "invalidate_cache" to true in settings.json.
eNMS automatically renames the version folder in static / js and static / css to the version number
stripped from its punctuation.
Add new check box "Approved by an Admin user" in the Unix Command service. That box must be ticked by
an admin user for the service to be allowed to run. A non-admin user cannot save a service if it is
ticked, meaning that each time a Unix Command service is edited, it must be re-appproved.
Add new timeout parameters for Scrapli service
Always show security logs, even when logging is disabled. Add "allow_disable" (default: True) keyword argument
to log function to prevent logs from being disabled if necessary.
Add new 'deactivate_rbac_on_read' property in rbac.json, under 'advanced' key. Set to true by default.
When true, eNMS no longers applies rbac for reading from the database. (=> better performances)
Make the vendor, operating_system and model properties a custom list for devices, links and services,
and category for sites and workflows. The drop-down list choices can be configured in properties.json > property_list key.
Add support for renaming objects from the REST API (with key "new_name")
Add limit to maximum number of nodes that can be displayed in site builder". Configurable via
visualization.json > Network Builder > max_allowed_nodes
Add new option to display site nodes as ellipses instead of images for better performances. Configurable via
visualization.json > Network Builder > display_nodes_as_images
Auto-update Vendor and Operating System property value of a new service in the workflow builder
based on the values of these properties in the parent workflow.
Add support for custom ordering in plugin tables (configurable by overriding the tableOrdering function in the
table JS class)
Add support for using device credentials in the Rest Call Service (impact on migration files:
"username" / "password" => "custom_username" / "custom_password"). Don't allow using device credentials
if the run method is set to "Run Once".
Make webssh command configurable from settings / ssh section
Add new label size property to configure label size in workflow and network builder
Add new "Configuration" RBAC mode
Make "sessions" an admin model (visible only to admin users)
Update git service to support git clone, shallow clone and custom path to local folder (instead of hardcoded path to
"network_data" folder)
Update slack notification service to use newest slack_sdk library (instead of slackclient<2)
Make scrapli connection arguments configurable from automation.json / scrapli / connection_args
v4
2 years ago
Refactor of the run mechanism. When running a service, a single run is created and saved to the
database.
Remove "operation" (any / all) property from pool
Change the way pool objects are computed: via SQL query instead of pure python:
better performances expected for large pools.
Add regex support for SQLite
Add new "Invert" option for table filtering
Move terminal application for web SSH feature inside the application: the terminal application
was previously moved outside the application because websockets requires sticky sessions which is
incompatible with having multiple gunicorn workers. Moving to a deployment where eNMS is started
multiple times with 1 gunicorn worker via the backend stream configuration, it is now possible for
the terminal to be inside the main application.
Fix submenu bug when the menu is minimized (gentelella bug)
Replace prerequisite edge with priority mechanism
Allow making non-shared service shared and vice-versa (if the shared service doesn't have more than one workflow).
Separate progress for main devices & iteration devices in workflow builder
Fix bug where subworkflow device counters not displayed in results when device iteration is used
Bug report mail: "No status for services in subworkflow with device iteration"
HTTP requests logging: all requests are now logged by eNMS and not by werkzeug like before.
=> fine grained controlled for what is logged for each request. The log now contains the username.
Add duplicate button in service table
Refactor the geographical and Logical View to behave like the workflow builder:
List of all pools that contain at least one device or link, stored in user browser local storage
Remove default pool mechanism. Remove "visualization_default" property in pool model.
By design, the default pool becomes the first pool in alphabetical order
Add backward / forward control like the workflow builder
Add global "factory" and "delete" functions in the workflow builder to create and delete new objects
from a workflow.
When refreshing a pool, rbac is now ignored so that the pool "refresh" action result does not depend on the
user triggering it.
If a workflow is defined to run on a set of devices, and the user lacks access to one or more devices,
execute for all accessible devices and fail for the inaccessible devices instead of failing the entire workflow.
Store and commit web SSH session content in backend instead of relying on send beacon mechanism and
onbeforeunload callback so that the saving of a session does not depend on user behavior
Add new "Empty" option in table filters and pool definition to filter based on whether the property
value is empty or not.
Add table display with property value constraint when clicking on the charts in the dashboard.
Add scrapli netconf service
Move LDAP and TACACS+ server init to environment file instead of custom file. Impact on authentication
ldap / tacacs functions.
Add Token-based authentication via REST API. New GET endpoint "/rest/token" to generate a token.
Separate controller (handling HTTP POST requests) from main application (gluing everything together)
Impact:
In plugins,
the "custom" file that contains pre_init, post_init, and the authentication custom code no longer inherits
from the controller
Add new "ip_address" field in settings.json > app section
Add paging for REST API search endpoint: new integer parameter "start" to request results from "start"
Add server time at the bottom of the menu (e.g for scheduling tasks / ease of use)
Add button in service table to export services in bulk (export all displayed services as .tgz)
Ability to paste device list (comma or space separated) into a multiple instance field (e.g service device and pool targets)
Re-add current Run counter to 'Service' and 'Workflow' on the dashboard banner + Active tasks
Ability to download result as json file + new copy result path to clipboard button in result json editor panel
Ability to download logs as text file
When importing existing workflows via service import, remove all existing services and edges from the workflow
Upload service from laptop instead of checking for file on the VM
Add Parameterized Form mechanism to update run properties and payload.
Add new "full results" button to results tree
Fix bug in WB where multiple services stay selected
Add confirmation prompt in workflow builder before deletion
Change default postprocessing mode to "Run on success only"
Add log in case postprocessing is skipped
Add SSH key support in generic file transfer service
Always set "look_for_keys" to False in generic file transfer service - no longer an option
Add validation_section mechanism: set path to section of the result to validate (default: results["result"])
Add new "connection_name" mechanism to open multiple parallel connections to the same device in the
same workflow
Add new "get_credential" global variable in workflow builder. Used to get a password or a passphrase
for a netmiko validaiton command or rest call service. For obfuscation purposes.
mail: Obfuscate Credentials passed into Netmiko Command Line
Fix data extraction service and operation keyword in set_var
Don't set status of currently running services to "Aborted" when using a flask CLI command
Add TextFSM support for the netmiko validation service (+ regression workflow)
Add stop mechanism for services in the Result table
Add server name parameter in Run table to specify which server a service was run from.
Server to be configured from env variable SERVER_NAME and SERVER_ADDR.
Lock editing / run of Workflow to group of owners
v3.22.3
3 years ago
Add regression workflow for file transfer
Fix RBAC service run and task scheduling REST API bug
Fix payload extraction workflow setitem bug
Add regression workflow with lots of service for scalability testing
Add regression workflow for skipped service in workflow targets SxS run mode
Fix rest call service local() scope bug
Fix get var / set var "devices" keyword bug
Add jump on connect parameters for netmiko backup service
Fix skipped query with device in service by service with workflow targets mode bug
v3.22.2
3 years ago
Fix iteration device factory commit bug
Fix workflow in service by service with workflow targets skipped and skip query service bug
Add missing rbac endpoints in full + read only access
Fix device creation empty driver due to Scrapli
Fix workflow iteration mechanism bug
v3.22.1
3 years ago
Add user authentication method in user forms
Fix settings saving mechanism
Fix gunicorn multiple workers sqlalchemy post fork session conflict bug
Dont prevent wrong device GPS coordinates from displaying links in network view
Fix RBAC bugs
Add new Scrapli service to send commands / configuration to network device
v3.22
3 years ago
Remove database url from settings. Configured via env variable DATABASE_URL
Remote scheduler
Remove TACACS+ parameters from settings, use env variable instead: TACACS_ADDR, TACACS_PASSWORD
Make REST API accept Tacacs and LDAP credentials (in the last version, if you were using TACACS+ or LDAP, you could authenticate
in the UI but couldn't make calls to the REST API)
Remove LDAP parameters from settings. The LDAP authentication is in the custom controller, there is a default
function that works with a standard LDAP installation, but you can customize however you want.
The LDAP server is now configured with the env variable LDAP_SERVER.
The settings contain a new section "database" to enable ldap, database or tacacs authentication.
Add replier option in send mail mechanism
Rename "app_log" option to "change_log" in log function for services
Add new entry in workflow RC menu "Workflow Results Table": contains all results for a given runtime,
allowing for comparison of results same device / different service, same service / different device, etc.
Refactor logging mechanism. In settings.json, add new logging sections to configure whether the log
for a given logger should also be logged as changelog or service log by default.
RBAC
Fix authentication bug flask_login and add session timeout mechanism
Make plugins separate from eNMS in their own folder, add bash script to install/update/uninstall them
Make the CLI interface a plugins
Remove summary from service state to improve workflow refresh performances
Add Dark mode and theme mechanism
Make search endpoint work with result to retrieve device results
Allow dictionary and json as custom properties. For json properties, use jsoneditor to let the user
edit them.
Add placeholder as a global variable in a workflow (e.g to be used in the superworkflow)
Add mechanism for creating custom configuration property
Refactor data backup services with custom configuration properties. Implement "Operational Data" as
an example custom property.
Add new Git service. Replace "git_push_configurations" swiss army knife service with instance of git service.
Add database fetch/commit retry mechanism to handle deadlocks & other SQL operational errors
Add validation condition for validation section.
v3.21.3
4 years ago
Add new plugins mechanism
Fix bug help panel open when clicking a field or label
Add error message in the logs when a service is run in per device mode but no devices have been selected.
Add default port of 22 for TCP ping in ping service
Disable edit panel on double-click for start/end services of a workflow
Fix invalid request bug when pressing enter after searching the "add services to workflow" panel
Forbid "Start", "End" and "Placeholder" for service names
Fix Result in mail notification for run once mode
Make Netmiko prompt command service a substitution string in the UI
Fix wrong jump password when using a Vault
Fix workflow results recursive display no path in results bug
Improve "Get Result" REST endpoint: returns 404 error if no run found, run status if a run is found but there are
no results (e.g job still running), and the results if the job is done.
Remove wtforms email validator in example service following wtforms 2.3 release
v3.21.2
4 years ago
Fix rest api update endpoint bug
Add device results to rest api get_result endpoint
Rename subservice -> placeholder
Fix rendering of custom boolean properties
Fix custom properties accordion in service panel
Fix service cascade deletion bug with service logs and placeholder
Fix front-end alert deleting services and make it a success alert
Fix historical config / oper data comparison mechanism
Fix bug where superworkflow cannot be cleared from list after selection
Fix bug placeholder service deletion from workflow
Make superworkflow a workflow property only. Remove superworkflow targets option
Display only workflows in the superworkflow drop-down list
Save alert when displaying python error as an alert
When using a custom logger, only the actual user content is logged
Update docs rest API
Improve log function (custom logger behavior / creator)
Fix superworkflow bug for standalone services
Dont display private properties in parameterized run results
Add Ansible playbook service log to security logger
Update superworkflow initial payload with placeholder service initial payload
Dont update netmiko and napalm configuration / oper data backup if empty result / no commands