Skip to content

插件

插件是打包的 Django 应用程序,可以与 NetBox 一起安装,以提供核心应用程序中没有的自定义功能。插件可以引入其自己的模型和视图,但不能干扰现有组件。NetBox 用户可以选择安装社区提供的插件,或自行构建插件。

功能

NetBox 插件架构允许以下操作:

  • 添加新数据模型。 插件可以引入一个或多个模型来存储数据。 (模型本质上是 SQL 数据库中的表。)
  • 添加新的 URL 和视图。 插件可以在 /plugins 根路径下注册 URL,以为用户提供可浏览的视图。
  • 向现有模型模板添加内容。 模板内容类可用于在核心 NetBox 模型的视图中注入自定义 HTML 内容。此内容可以显示在页面的左侧、右侧或底部。
  • 添加导航菜单项。 每个插件可以在导航菜单中注册新链接。每个链接可以具有一组特定操作的按钮,类似于内置导航项。
  • 添加自定义中间件。 每个插件都可以注册自定义的 Django 中间件。
  • 声明配置参数。 每个插件可以在其独特的命名空间中定义所需、可选和默认配置参数。插件配置参数由用户在 configuration.py 中的 PLUGINS_CONFIG 下定义。
  • 限制 NetBox 版本的安装。 插件可以指定其兼容的最低和/或最高 NetBox 版本。

限制

无论是出于政策还是技术限制,插件与 NetBox 核心的交互都会受到某些限制。插件可能无法:

  • 修改核心模型。 插件不能以任何方式更改、删除或覆盖核心 NetBox 模型。此规则的目的是确保核心数据模型的完整性。
  • /plugins 根路径之外注册 URL。 所有插件的 URL 限制在此路径下,以防止与核心或其他插件的路径冲突。
  • 覆盖核心模板。 插件可以在支持的地方注入附加内容,但不能操纵或删除核心内容。
  • 修改核心设置。 插件提供了配置注册表,但它们不能更改或删除核心配置。
  • 禁用核心组件。 插件不允许禁用或隐藏核心 NetBox 组件。

安装插件

以下说明详细描述了安装和启用 NetBox 插件的过程。

安装软件包

根据其安装说明下载并安装插件软件包。通过 PyPI 发布的插件通常使用 pip 安装。请确保在 NetBox 的虚拟环境中安装插件。

$ source /opt/netbox/venv/bin/activate
(venv) $ pip install <package>

或者,您可以手动安装插件,通过运行 python setup.py install。如果您正在开发插件并希望仅临时安装它,请改用 python setup.py develop 运行。

启用插件

configuration.py 中,将插件的名称添加到 PLUGINS 列表中:

PLUGINS = [
    'plugin_name',
]

配置插件

如果插件需要任何配置,请在 configuration.py 中的 PLUGINS_CONFIG 参数下定义它。插件的 README 文件应详细说明可用的配置参数。

PLUGINS_CONFIG = {
    'plugin_name': {
        'foo': 'bar',
        'buzz': 'bazz'
    }
}

运行数据库迁移

如果插件引入了新的数据库模型,请运行提供的模式迁移:

(venv) $ cd /opt/netbox/netbox/
(venv) $ python3 manage.py migrate

收集静态文件

插件可以打包要由 HTTP 前端直接提供的静态文件。确保将这些文件与 collectstatic 管理命令复制到静态根目录:

(venv) $ cd /opt/netbox/netbox/
(venv) $ python3 manage.py collectstatic

重启 WSGI 服务

重启 WSGI 服务以加载新插件:

# sudo systemctl restart netbox

移除插件

按照以下步骤完全删除插件。

更新配置

configuration.py 中的 PLUGINS 列表中删除插件。还要从 PLUGINS_CONFIG 中删除任何相关的配置参数。

删除 Python 包

使用 pip 来删除已安装的插件:

$ source /opt/netbox/venv/bin/activate
(venv) $ pip uninstall <package>

重启 WSGI 服务

重启 WSGI 服务:

# sudo systemctl restart netbox

删除数据库表格

注意

此步骤仅适用于已创建一个或多个数据库表格的插件(通常是通过引入新模型)。如果不确定,请查看插件的文档。

进入 PostgreSQL 数据库 shell 以确定插件是否已创建任何 SQL 表格。在下面的示例中,将 pluginname 替换为要删除的插件的名称。 (您还可以运行不带模式的 \dt 命令来列出 所有 表格。)

netbox=> \dt pluginname_*
                   List of relations
                   List of relations
 Schema |       Name     | Type  | Owner
--------+----------------+-------+--------
 public | pluginname_foo | table | netbox
 public | pluginname_bar | table | netbox
(2 rows)

警告

删除表格时请格外小心。强烈建议用户在执行这些操作之前立即备份数据库。

删除列表中的每个表格以从数据库中删除它:

netbox=> DROP TABLE pluginname_foo;
DROP TABLE
netbox=> DROP TABLE pluginname_bar;
DROP TABLE