插件

    从 nornir3 开始,插件需要注册之后才能使用,包括:

    • 主机清单插件(inventory plugins)

    • 转换函数(transform functions)

    • 连接插件(connection plugins)

    • 运行插件(runners)

    插件注册有两种方式:

    1. 在打包发布插件时添加 来让 nornir 自动注册

    2. 在脚本中编写代码手动注册

    如果使用 peotry 打包发布,需要在 pyproject.toml 中添加配置:

    1. [tool.poetry.plugins."PATH"]
    2. "NAME" = "path.to:Plugin"

    其中:

    PATH 是需要配置的插件类型,有以下几个值:

    • nornir.plugins.inventory - for inventory plugins

    • nornir.plugins.transform_function - for transform functions

    • nornir.plugins.connections - for connection plugins

    NAME 是要引用插件的的名称, path.to:Plugin 是导入路径,例如定义一个名为 inventory-name 的主机清单插件:

    如果需要使用本地编写的插件,或者发布时没有添加 entry point 的插件,需要以代码的方式来注册,例如注册一个名为 inventory-name 的主机清单插件:

    1. from nornir.core.plugins.inventory import InventoryPluginRegister
    2. InventoryPluginRegister.register("inventory-name", InventoryPlugin)

    连接插件(Connections)

    是一种让 nornir 管理与设备的连接的插件,常见的有 netmiko、paramiko、napalm 等。

    是一种让 nornir 从外部源(如 YAML、CSV、DB 等)创建一个 Inventory 对象的插件,常见的有 SimpleInventory、ansible、netbox、table 等。

    Nornir 默认包含 SimpleInventory 插件,它从 YAML 文件读取信息,源码定义如下:

    转换函数(Transform function)

    是一种独立于已使用的主机清单插件来操作主机的插件,可以帮助用户使用环境变量、加密存储或者类似的方式来对主机的数据进行扩展。

    是一种定义如何在主机上执行任务的插件,分为单线程和多线程。

    SerialRunner 单线程插件,在每个主机上顺序执行任务,源码定义如下:

    1. class nornir.plugins.runners.__init__.SerialRunner():
    2. def run(
    3. task: nornir.core.task.Task,
    4. hosts: List[nornir.core.inventory.Host]

    ThreadedRunner 使用多线程在每个主机上异步执行任务,源码定义如下:

    处理器(Processors)

    是一种让用户编写任意代码来控制任务执行事件的插件,具体使用方法见入门教程中的 处理器