Nornir is a pluggable system and only very basic ones are included with nornir 3, for a list of third party plugins visit nornir.tech
Starting with nornir3 some plugins need to be registered in order to be used. In particular:
- inventory plugins
- transform functions
- connection plugins
- runners
To do so you can use entry points or programmatically.
Using entrypoints in your setup.py
:
setup(
# ...
entry_points={
"PATH": "NAME = path.to:Plugin",
}
)
In your pyproject.toml if using poetry
:
[tool.poetry.plugins."PATH"]
"NAME" = "path.to:Plugin"
Where PATH is:
nornir.plugins.inventory
- for inventory pluginsnornir.plugins.transform_function
- for transform functionsnornir.plugins.runners
- for runnersnornir.plugins.connections
- for connection plugins
Where NAME is the way you want to refer to it later on and path.to:Plugin
the import path. For instance:
[tool.poetry.plugins."nornir.plugins.inventory"]
"inventory-name" = "path.to:InventoryPlugin"
To do it programmatically import the correct plugin register and use the register
method. For instance:
from nornir.core.plugins.inventory import InventoryPluginRegister
from path.to import InventoryPlugin
InventoryPluginRegister.register("inventory-name", InventoryPlugin)
A connection plugin is a nornir plugin that allows nornir to manage connections with devices
An inventory plugin is a nornir plugin that allows nornir to create an Inventory object from an external source
nornir.plugins.inventory.__init__
A transform function is a plugin that manipulates the inventory independently from the inventory plugin used. Useful to extend data using the environment, a secret store or similar.
A runner is a plugin that dictates how to execute the tasks over the hosts
nornir.plugins.runners.__init__
For more details about ThreadedRunner
read the execution_model
.
A processor is a plugin that taps into certain events and allows the user to execute arbitrary code on those events.