Plugins¶
CNaaS-NMS uses an extendable and configurable plugin system that can be used to integrate external systems into certain workflows. Plugins register to predefined hooks in the CNaaS-NMS system and gets called with a set of arguments specific to that hook. Multiple plugins can register for the same hooks at the same time. For example, when a new device is added to CNaaS all plugins with the hook new_managed_device will be called with arguments like hostname and device type.
Configuration¶
/etc/cnaas-nms/plugins.yml configuration example:
---
plugins:
- filename: filewriter.py
vars:
logfile: "/tmp/filewriter.log"
This file contains a list of plugins that should be loaded. Any vars defined here can be accessed from the plugin, this can be used to set URLs to other system APIs etc.
What plugins got loaded and what variables that are available can be accessed via the rest API as well.
Hooks¶
new_managed_device¶
Called when a new device is initialized through the init_device API call and that device reaches the “MANAGED” state.
Arguments provided:
hostname: Hostname of the new device
device_type: What type of device, ACCESS, DIST or CORE
serial_number: Serial number of device
vendor: Vendor/manufacturer of device
model: Hardware model of device
os_version: Operating System version of device
allocated_ipv4¶
Called when CNaaS-NMS has allocated a new IPv4 address and configured it on a device. Currently only called during the init_device API call.
Argumens proided:
vrf: Name of the VRF used (ex mgmt)
ipv4_address: IPv4 address (ex 10.0.6.6)
ipv4_network: IPv4 network address in CIDR notation (ex 10.0.6.0/24)
hostname: Hostname of the device that uses this address
Module overrides¶
CNaaS-NMS allows for overriding of certain python modules if you want to run your own custom logic instead of the one in bundled modules.
settings_fields¶
If you want to support other types of settings than the default ones you can override the settings_fields module which defines the allowed setting “fields”. The settings_fields module uses pydantic to define allowed data types in a model. It’s possible to just extend the existing model or to redefine it altogether.
Example settingns_fields.py module to extend existing model:
from typing import List
from cnaas_nms.db import settings_fields as orig_fields
class f_root(orig_fields.f_root):
my_new_field: List[str] = []
Save it as settings_fields.py in src/cnaas_nms/plugins or use environment variables to define a custom name: Environment variables