跳转到主要内容

NetBox的插件,用于轻松添加新设备。

项目描述

NetBox Onboarding插件

Build Status

NetBox的插件,用于轻松添加新设备。

ntc-netbox-plugin-onboarding 使用 NetmikoNAPALMDjango-RQ 来简化新设备添加到NetBox的过程,只需将IP地址和站点信息添加进去。该插件的目标不是将设备的所有信息导入NetBox,而是帮助快速建立NetBox中的清单,这通常是自动化旅程的第一步。

安装

如果使用NetBox文档中的安装模式,在安装前需要激活虚拟环境,以确保将包安装到虚拟环境中。

cd /opt/netbox
source venv/bin/activate

该插件作为Python包在pypi中可用,可以使用pip安装。安装完成后,需要重启NetBox和NetBox工作进程。

pip install ntc-netbox-plugin-onboarding
systemctl restart netbox netbox-rq

兼容性矩阵

Netbox 2.8 Netbox 2.9 Netbox 2.10 Netbox 2.11
Onboarding Plugin 1.3 X
Onboarding Plugin 2.0 X X
Onboarding Plugin 2.1 X X X
Onboarding Plugin 2.2 X X X X

为确保NetBox Onboarding插件在未来的升级过程中自动重新安装,请创建一个名为local_requirements.txt的文件(如果尚未存在),并将其放在NetBox根目录中(与requirements.txt文件并列),然后在其中列出ntc-netbox-plugin-onboarding软件包

# echo ntc-netbox-plugin-onboarding >> local_requirements.txt

安装完成后,需要在您的configuration.py文件中启用此插件

# In your configuration.py
PLUGINS = ["netbox_onboarding"]

# PLUGINS_CONFIG = {
#   "netbox_onboarding": {
#     ADD YOUR SETTINGS HERE
#   }
# }

最后,请确保运行此插件的迁移

python3 manage.py migrate

可以使用以下设置列表控制插件的行为

  • create_platform_if_missing布尔值(默认True),如果为True,当netmiko发现的新平台对象不存在且在支持的平台列表(cisco_ioscisco_nxosarista_eosjuniper_junoscisco_xr)中时,将创建一个新的平台对象
  • create_device_type_if_missing布尔值(默认True),如果为True,当Napalm发现的新设备型号与现有设备型号不匹配时,将创建一个新的设备类型对象
  • create_manufacturer_if_missing布尔值(默认True),如果为True,当Napalm发现的新制造商与现有制造商不匹配时,将创建一个新的制造商对象,此选项仅在create_device_type_if_missing也为True时有效
  • create_device_role_if_missing布尔值(默认True),如果为True,当提供的设备角色不是作为onboarding的一部分提供,并且default_device_role不存在时,将创建一个新的设备角色对象
  • create_management_interface_if_missing布尔值(默认True),如果为True,则向设备添加管理接口和IP地址。如果为False,则不会创建管理接口,也不会将IP地址添加到NetBox中,但设备仍然会被添加
  • default_device_status字符串(默认"active"),默认分配给新设备的状态(必须是小写)
  • default_device_role字符串(默认"network")
  • default_device_role_color字符串(默认FF0000),如果需要创建设备角色时分配的颜色
  • default_management_interface字符串(默认"PLACEHOLDER"),当设备上无法识别时,将创建的管理接口的名称
  • default_management_prefix_length整数(默认0),当找不到IP地址时,将用于管理IP地址的前缀长度
  • skip_device_type_on_update布尔值(默认False),如果为True,现有的NetBox设备将不会更新其设备类型。如果为False,则设备类型将更新为在设备上发现的类型
  • skip_manufacturer_on_update布尔值(默认False),如果为True,现有的NetBox设备将不会更新其制造商。如果为False,则制造商将更新为在设备上发现的制造商
  • platform_map(字典),将自动检测的Netmiko平台映射到您的平台的NetBox slug名称。该字典应采用以下格式
    {
      <Netmiko Platform>: <NetBox Slug>
    }
    
  • onboarding_extensions_map(字典),将NAPALM驱动程序名称映射到用作onboarding扩展的可加载Python模块。该字典应采用以下格式
    {
      <Napalm Driver Name>: <Loadable Python Module>
    }
    
  • object_match_strategy(字符串),定义搜索模型的方法。目前有两种策略:严格和宽松。严格必须是直接匹配,通常使用slug。宽松允许一系列搜索标准匹配单个对象。如果返回多个对象,将引发错误。

升级

当新版本发布时,可能需要运行数据库迁移以记录此插件使用的数据模型中的任何更改。在更新软件包后,从NetBox安装的netbox/目录执行命令python3 manage.py migrate

用法

准备

为了正确地onboard一个设备,插件只需要知道站点以及设备的IP地址或DNS名称

为了使DNS名称解析工作,NetBox实例必须能够将设备的名称解析为IP地址

提供其他属性(平台设备类型设备角色)是可选的 - 如果提供了这些属性中的任何一个,插件将使用提供的值用于已上线的设备。如果未提供平台设备类型和/或设备角色,插件将尝试自动识别这些信息,并根据设置,在NetBox中创建它们(如有需要)。

如果提供了平台,它必须指向一个现有的NetBox平台。只有当在NetBox中为该平台定义了NAPALM驱动程序时,才会使用该平台的NAPALM驱动程序。要使用首选的NAPALM驱动程序,可以在NetBox中按平台定义它,或者在插件设置下的platform_map中定义。

上线新设备

可以通过以下方式上线新设备:

  • Web表单 /plugins/onboarding/add/
  • CSV表单以批量导入多个设备。 /plugins/onboarding/import/
  • API,POST /api/plugins​/onboarding​/onboarding​/

在成功的上线过程中,将在NetBox中创建一个新设备,包括其管理接口和分配的主要IP地址。将根据提供的IP地址在设备上发现管理接口。

默认情况下,插件使用在主configuration.py中定义的Napalm凭据(NAPALM_USERNAME/NAPALM_PASSWORD)。可以为每个上线任务定义特定的凭据。

查询上线任务状态

每个设备的上线过程状态都维护在NetBox的一个专用表中,并且可以检索

  • 通过UI /plugins/onboarding/
  • 通过API GET /api/plugins​/onboarding​/onboarding​/

API

插件包括4个API端点来管理上线任务

GET        /api/plugins​/onboarding​/onboarding​/       Check status of all onboarding tasks.
POST       /api/plugins​/onboarding​/onboarding​/       Onboard a new device
GET        /api/plugins​/onboarding​/onboarding​/{id}​/  Check the status of a specific onboarding task
DELETE     /api/plugins​/onboarding​/onboarding​/{id}​/  Delete a specific onboarding task

贡献

欢迎提交拉取请求,并通过TravisCI自动构建和测试多个版本的Python和多个版本的NetBox。

该项目使用基于docker-compose的轻量级开发环境打包,以帮助进行项目的本地开发,并在TravisCI中运行测试。

该项目遵循Network to Code软件开发指南,并利用

  • Black、Pylint、Bandit和pydocstyle进行Python代码审查和格式化。
  • Django单元测试以确保插件正常工作。

CLI辅助命令

该项目附带一个基于invoke的CLI辅助程序,以帮助设置开发环境。命令如下,分为3个类别:dev environmentutilitytesting

每个命令都可以使用invoke <command>执行。所有命令都支持--netbox-ver--python-ver参数,如果您想手动定义要使用的Python和NetBox的版本。每个命令也都有自己的帮助信息invoke <command> --help

本地开发环境

  build            Build all docker images.
  debug            Start NetBox and its dependencies in debug mode.
  destroy          Destroy all containers and volumes.
  start            Start NetBox and its dependencies in detached mode.
  stop             Stop NetBox and its dependencies.

实用工具

  cli              Launch a bash shell inside the running NetBox container.
  create-user      Create a new user in django (default: admin), will prompt for password.
  makemigrations   Run Make Migration in Django.
  nbshell          Launch a nbshell session.

测试

  tests            Run all tests for this plugin.
  pylint           Run pylint code analysis.
  pydocstyle       Run pydocstyle to validate docstring formatting adheres to NTC defined standards.
  bandit           Run bandit to validate basic static code security analysis.
  black            Run black to check that Python files adhere to its style standards.
  unittest         Run Django unit tests for the plugin.

问题

对于任何问题或评论,请首先查看常见问题解答,并请随时访问Network to Code Slack频道(频道#networktocode)。在此注册

屏幕截图

上线任务列表 Onboarding Tasks

导入多个设备的CSV表单 CSV Form

上线单个设备 Single Device Form

菜单 Menu

项目详情


下载文件

下载您平台对应的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码发行版

ntc-netbox-plugin-onboarding-2.2.0.tar.gz (574.3 kB 查看散列值)

上传时间 源代码

构建发行版

ntc_netbox_plugin_onboarding-2.2.0-py3-none-any.whl (599.3 kB 查看散列值)

上传时间 Python 3

由以下提供支持