mcpField
N
netbox-automation-patterns

netbox-automation-patterns

github.com/netboxlabs云与 DevOps2153 次安装2 周前更新
代码仓库

关于 netbox-automation-patterns

面向将 NetBox 纳入自动化流程的团队,汇总事件规则、Webhook、Ansible、Terraform 与 GitOps 的集成模式,并提示版本兼容和运维注意事项。

主要功能

  1. 01事件规则与 Webhook 自动化
  2. 02Ansible 状态管理和动态清单
  3. 03Terraform 资源管理与数据源
  4. 04GitOps 工作流设计
  5. 05令牌、幂等性与版本兼容指导

适用场景

  1. 01NetBox 变更触发 CI/CD 部署
  2. 02从 NetBox 生成 Ansible 动态清单
  3. 03用 Terraform 管理 NetBox 与基础设施
  4. 04搭建以 NetBox 为事实来源的配置流水线

MCP 相关

说明可在已配置 NetBox MCP server 时检查事件规则和 Webhook 配置;不提供 MCP 服务。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/netboxlabs/skills --skill netbox-automation-patterns

安装后在 Claude Code 中输入/netbox-automation-patterns确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
ansible-patterns.md
event-rules-and-webhooks.md
gitops-workflows.md
terraform-patterns.md

详细介绍

NetBox 自动化模式

您对 NetBox 自动化工具的了解可能已经过时。 Ansible collection 模块、Terraform provider 资源和事件规则行为会随版本变化。请优先检索,而不是依赖预训练知识。

检索来源

来源URL / 方法用途
NetBox Ansible collectionhttps://github.com/netbox-community/ansible_modules模块列表、参数、示例
Ansible 文档https://netboxlabs.com/docs/integrations/tool-integrations/netbox-ansible-collection/集成指南
Terraform providerhttps://github.com/e-breuninger/terraform-provider-netbox资源、数据源
事件规则文档https://netboxlabs.com/docs/netbox/features/event-rules/Webhook/脚本触发器
NetBox MCP 服务如果已配置——验证事件规则和 Webhook 是否存在验证自动化配置

本技能介绍如何将 NetBox 集成到自动化工作流中,涵盖事件驱动触发器、配置管理、基础设施即代码以及 CI/CD 流水线。这是一项跨领域技能,将围绕 NetBox 这一事实来源串联多个开源工具。

在以下情况下加载此技能:

  • 构建由 NetBox 变更触发的 Webhook 驱动自动化
  • 配置 Ansible,将 NetBox 用作动态清单或状态管理器
  • 通过 Terraform 管理 NetBox 资源
  • 设计将 NetBox 纳入其中的 GitOps 流水线

不在范围内: NetBox 核心管理、插件开发、REST/GraphQL API 基础知识(参见 netbox-api-integration)。


快速参考:不同模式应使用哪种工具?

目标工具模式
响应 NetBox 中的变更Event Rules + Webhooks向外部系统推送通知
在内部响应变更Event Rules + Custom Scripts在 NetBox 内运行逻辑
在 NetBox 中定义预期状态Ansible 模块(netbox.netbox)声明式、幂等
将 NetBox 用作 Ansible 清单nb_inventory 插件根据 NetBox 数据生成动态清单
同时管理 NetBox 和云资源Terraform(e-breuninger/netbox)IaC 生命周期、状态跟踪
分配下一个可用 IP/前缀Terraform available_* 资源从父级自动分配
NetBox → 配置生成 → 部署GitOps 流水线以 NetBox 为事实来源的 CI/CD

事件驱动自动化

NetBox 的事件规则系统(在 3.7 中引入)是响应式自动化的基础。事件规则会将对象变更与操作相匹配。

事件规则要点
  • 触发范围:对象类型和事件类型(已创建、已更新、已删除、作业已启动/已完成/失败/出错)
  • 条件:可选的 JSON 条件,用于筛选——例如,仅在 status.value == "active" 时触发。在 4.7+ 中,条件还可检查变更本身:{"attr": "status", "op": "changed"},以及 snapshots.prechange.<attr>/snapshots.postchange.<attr> 路径和 regex 运算符
  • 操作类型:webhook(外部 HTTP 调用)、script(运行自定义脚本)、notification(通知用户),以及在 4.7+ 中由插件注册的操作类型
  • 处理方式:通过 Redis/RQ 异步处理——用户请求无需等待即可完成
关键指南
  1. 始终使用条件进行限定 — 未限定范围的事件规则会在每次匹配的变更时触发,造成噪声和负载。使用条件针对特定状态、角色或标签。若只想在状态发生转换(状态变为 active)时触发,请使用 4.7 的 changed 运算符;在 4.5/4.6 中,则在正文模板里比较 snapshots.prechange/postchange。在 4.7 及更高版本中,引用不存在属性的条件会以关闭状态失败并记录日志 — 编辑后规则“停止触发”通常是拼写错误。

  2. 事件是异步的 — 不要假设事件会立即执行。事件会进入 Redis/RQ 队列,并由工作进程处理。设计接收端时,应考虑延迟。

  3. 选择正确的操作类型:

    • 外部系统 → webhook
    • NetBox 内部逻辑 → 自定义脚本(参见 netbox-custom-scripts)
    • 人工通知 → 通知组
  4. 在生产环境使用前,先通过内置接收端进行测试:

    python netbox/manage.py webhook_receiver  # Listens on port 9000
    
  5. 合并行为 — 同一请求中对同一对象进行的多次变更会合并。只有最终状态会触发事件。删除事件会立即序列化数据,因为对象之后将不复存在。

  6. 限制接收端耗时(4.7 及更高版本) — 为每个 webhook 设置 timeout(或 WEBHOOK_DEFAULT_TIMEOUT,默认值为 60 s);其值必须低于 RQ_DEFAULT_TIMEOUT。接收端应快速确认并异步处理。

有关负载格式、HMAC 签名、Jinja2 模板和安全注意事项,请参阅 references/event-rules-and-webhooks.md。


Ansible 集成

netbox.netbox Ansible 集合(GPLv3)提供模块、动态清单和查询插件。

三种主要用法
  1. 状态管理 — 使用模块(netbox_device、netbox_ip_address 等)确保 NetBox 对象符合期望状态。所有模块都支持幂等操作,使用 state: present/absent。

  2. 动态清单 — 使用 nb_inventory 从 NetBox 生成 Ansible 清单。可按设备角色、站点、区域、租户、标签或平台分组。

  3. 数据查询 — 在 playbook 中使用 nb_lookup 查询 NetBox 数据。

关键指南
  1. 除非确有需要,否则在清单中设置 config_context: False。在 4.5/4.6 中,这可以避免服务器端为每台设备进行开销较大的渲染;在 4.7 及更高版本中,上下文会预先渲染并缓存,且插件会发送 ?exclude=config_context(所有 4.7.x 均忽略此参数 — 截至 netbox.netbox 3.23.1,4.7.3 的 ?omit= 优化并未覆盖此参数),因此该选项只会精简 hostvars。

  2. 使用 query_filters 在服务器端限制清单范围,而不是在客户端进行筛选。

  3. 正确限定令牌权限 — 清单和查询使用只读令牌;只有会创建或修改对象的模块才使用写入令牌。

  4. 版本兼容性 — 该集合的策略是支持最新的两个 NetBox 版本;最新版本(v3.23.1,2026-10)已通过 CI 测试,覆盖至 4.5,且尚未声明支持 4.6/4.7。固定集合版本,并针对你使用的 NetBox 次要版本进行测试。

  5. 使用 device_query_filters 进行筛选 — 例如,使用 has_primary_ip: 'true' 排除没有管理 IP 的设备。

有关模块示例、清单配置和查询模式,请参阅 references/ansible-patterns.md。


Terraform 集成

e-breuninger/netbox Terraform 提供程序以基础设施即代码的方式管理 NetBox 资源。

关键指南
  1. 固定提供程序版本,使其与 NetBox 版本匹配 — NetBox 会在次要版本中引入不兼容的 API 变更。请查看提供程序的兼容性矩阵:v5.6.1+ 支持 NetBox 4.3–4.6.5;v6.0 重写版(截至 2026-09 仍为 RC)面向 4.6.8–4.6.10;目前没有任何版本声明支持 4.7。

  2. 了解 available_* 资源的生命周期 — netbox_available_ip_address 和 netbox_available_prefix 会在创建时分配,且无法“更新”。与常规资源相比,它们具有独特的生命周期行为。

  3. 为状态漂移做好规划 — 如果有人在 Terraform 之外修改 NetBox,下次运行 terraform plan 时会显示漂移。请制定漂移修复策略。

  4. 不同领域的覆盖范围各异 — 该提供程序对 IPAM 和虚拟化的覆盖最完善。其他模型的资源支持可能不完整。

  5. 使用数据源进行只读查询 — 大多数资源都有对应的数据源,可用于引用现有 NetBox 对象,而无需管理它们。

请参阅 references/terraform-patterns.md,了解提供程序设置、资源示例和 available_* 分配模式。


GitOps 工作流

NetBox 可作为事实来源或状态镜像集成到 GitOps 流水线中。

常见架构
模式流程最适用场景
Webhook 驱动NetBox 变更 → webhook → CI/CD → 部署实时响应
轮询/导出Cron → 导出 NetBox 数据 → Git 提交 → CI/CD批量生成配置
Ansible 拉取Ansible + nb_inventory → 生成配置 → 推送由 Playbook 驱动的工作流
Terraform 统一管理Terraform 同时管理 NetBox 和基础设施云与 NetBox 保持同步
关键指南
  1. 确定唯一的事实来源 — 要么由 NetBox 规定状态,并由 Git/自动化强制执行;要么以 Git 为事实来源,NetBox 镜像其状态。不要让两个系统同时充当主控。

  2. 使用配置上下文提供模板数据 — 配置上下文提供按设备、角色或站点划分的配置数据,供 Jinja2 模板在生成配置时使用。

  3. 使用 Webhook → CI/CD 构建实时流水线 — 将事件规则与 webhook 结合,在 NetBox 发生变更时触发 GitHub Actions、GitLab CI 或 Jenkins。

  4. 使用标签作为自动化提示 — 为接口、设备或前缀添加标签,以表明自动化意图(例如,在接口上添加“OSPF”标签,将其纳入 OSPF 配置生成)。

请参阅 references/gitops-workflows.md,了解流水线架构详情和示例。


跨领域注意事项

以下内容适用于所有自动化方式:

  • 令牌管理:使用权限范围最小的令牌。优先使用 v2 令牌(NetBox 4.5+)和 Bearer 身份验证。有关令牌格式的详情,请参阅 netbox-api-integration。

  • 速率限制:大规模自动化运行(批量 Ansible play、Terraform apply)应实现退避机制,避免 NetBox API 过载。在 4.7+ 中,大型自定义批量写入可使用 ?background=true(HTTP 202 + 作业 URL;轮询作业以获取结果)来避免代理超时 — 请参阅 netbox-api-integration。

  • 分页:所有工具(pynetbox、Terraform 提供程序、Ansible 集合)都会在内部处理分页,但编写自定义集成时仍需注意这一点。NetBox 4.6 增加了基于游标的 start 分页(可高效替代深度 offset 扫描)— 请参阅 netbox-api-integration。

  • 幂等性:Ansible 模块在设计上具有幂等性。Terraform 采用声明式方式。Webhook 采用即发即弃模式 — 请在接收端实现幂等性。

  • 测试:使用 NetBox 官方 Docker 镜像搭建 CI/CD 测试环境(netboxcommunity/netbox:v4.7-5.1.1;标签格式为 v<netbox>-<netbox-docker>)。启动一次性实例进行集成测试。


版本说明

NetBox 4.7(2026-09-02)
  • 支持快照的条件:changed/unchanged 运算符、snapshots.prechange.<attr> / snapshots.postchange.<attr> 路径、regex 运算符;无法解析的属性会按关闭处理,并记录到 netbox.event_rules。快照值是原始值(status,而不是 status.value)。
  • Webhook 上下文:已移除 username 和 request_id——请改用 request.user / request.id。send_webhook() 不再接受 username 参数:升级前请排空 RQ 队列,否则已排队的 webhook 任务会因 TypeError 而失败。
  • Webhook 超时:每个 webhook 新增 timeout 字段,以及 WEBHOOK_DEFAULT_TIMEOUT(默认值为 60);该值必须小于 RQ_DEFAULT_TIMEOUT,否则 NetBox 将拒绝启动或保存。
  • 事件规则:action_object_type 现为可选项;插件可注册操作类型(EventRuleAction);若规则所用插件已不存在,action_is_available 会将其标记出来。
  • 会影响自动化工具的负载/API 变化:REST 中的选择型自定义字段为 {value,label} 对象(因此 webhook 的 data 中也如此);设备/VM 输出默认包含 config_context(4.7.3+ 可通过 ?omit=config_context 将其省略;在 4.7 中 ?exclude= 不起作用);ipam.Service 的 protocol/ports 已弃用,请改用 port_mappings;批量写入错误按对象返回;批量写入支持 ?background=true。
  • 生态系统:netbox-docker 5.x(v4.7-5.1.1)要求 NetBox 4.7+;Ansible 集合和 Terraform 提供程序尚未声明支持 4.7(参见参考资料)。
NetBox 4.6(2026-05-05)
  • Webhook 上下文新增 request 对象;username/request_id 已弃用。
  • 大型读取操作支持基于游标的 start 分页。
  • 在 4.5 中,Webhook 上下文仅包含 username/request_id。

参考资料

文档加载时机
references/event-rules-and-webhooks.md构建 webhook 集成、配置事件规则、排查 webhook 投递问题
references/ansible-patterns.md编写用于管理或查询 NetBox 的 Ansible playbook
references/terraform-patterns.md使用 Terraform 管理 NetBox 资源
references/gitops-workflows.md设计包含 NetBox 的 CI/CD 流水线

评论

支持 Markdown