NetBox的插件,用于轻松添加新设备。
项目描述
NetBox Onboarding插件
NetBox的插件,用于轻松添加新设备。
ntc-netbox-plugin-onboarding
使用 Netmiko、NAPALM 及 Django-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_ios
、cisco_nxos
、arista_eos
、juniper_junos
、cisco_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 environment
、utility
和testing
。
每个命令都可以使用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)。在此注册。
屏幕截图
上线任务列表
导入多个设备的CSV表单
上线单个设备
菜单
项目详情
下载文件
下载您平台对应的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码发行版
构建发行版
散列值 for ntc_netbox_plugin_onboarding-2.2.0-py3-none-any.whl
算法 | 散列摘要 | |
---|---|---|
SHA256 | c6c400f92562f73729c382b82edeb4583fb04de035cb303536daffa4c7281fe6 |
|
MD5 | ef0569f6f7141d1f9e998b94867f06ee |
|
BLAKE2b-256 | d8eade5a7aa5b131a10c0d8c0dc8bb1936c0f7d21c268839e908166aba2048dd |