- 后端
- 网络
- 数据建模
【免费下载链接】netbox
The premier source of truth powering network automation. Open source under Apache 2. Try NetBox Cloud free: https://netboxlabs.com/products/free-netbox-cloud/
本指南以 NetBox DCIM 模块中的冷却回路建模为核心,聚焦Cooling Outflow(冷却出口)这一设备组件:它是液冷回路冷侧(供液侧)的供液点,负责把冷却液输送给下游设备。读者将掌握 Cooling Outflow 的字段语义、与 Cooling Intake / Cooling Feed 的上下游关系、基于模板的自动实例化机制,以及 REST API、GraphQL、过滤与校验等完整的落地用法,可用于在 NetBox 中如实记录 CDU、歧管(manifold)等机柜内液冷设备。
概述:什么是 Cooling Outflow
Cooling Outflow 是 NetBox v4.7 引入的冷却(Cooling)特性中的一种设备组件(device component)。它向下游的 Cooling Intake(冷却入口)输送冷却液,通常代表冷却液分配单元(CDU)或歧管上的一个出口。
一个关键的语义点是:Cooling Outflow 是回路冷侧(cold / coolant-distribution side)的供液(supply)点,它把冷却液继续传递给下游设备,不代表将升温后的冷却液回流至冷却源。回流路径不按组件单独建模;而是由单个 Cooling Feed 代表整个回路,同时覆盖供液(冷)与回流(暖)两条路径。冷却模型的完整层级为:
cooling source(冷却源)→ cooling feed(冷却回路)→ device cooling intake / cooling outflow(设备冷却入口 / 出口)
关于整个冷却模型(冷却源、回路、机柜与设备属性)的总体介绍,可参阅 Cooling 功能文档。
字段详解
以下字段在 UI 表单、REST API 序列化器与 GraphQL 类型中均可用,其定义可在 device_components.py 中对应模型CoolingOutflow找到。
Device(所属设备)
该冷却出口所属的设备。这是所有设备组件的强制性归属字段,决定了组件在 DCIM 层级中的位置。
Module(所属模块)
安装于该设备内的模块(可选)。由于CoolingOutflow继承自ModularComponentModel(模块化组件模型),它既可以挂载在设备本体上,也可以挂载在设备内的可插拔模块上——这与接口、电源端口等模块化组件的行为一致。
Name(名称)
冷却出口的名称,必须在其父设备内唯一。
Label(标签)
用于标识该冷却出口的替代物理标签。当组件实际印刷在物理设备上的标识与名称不同时,可用 Label 记录真实铭牌文字,与 Name 解耦。
Connector Type(连接器类型)
物理冷却液连接器类型。底层枚举定义于 choices.py 的CoolingConnectorTypeChoices,完整选项如下:
| 取值(value) | 显示文本 |
|---|---|
uqd | UQD(Universal Quick Disconnect,通用快插接头) |
uqdb | UQDB(Universal Quick Disconnect, Blind-mate,通用盲插快插接头) |
qdc | QDC(Quick Disconnect Coupling,快插耦合) |
camlock | Camlock(cam-and-groove,凸轮锁紧/槽式快接) |
npt | NPT(threaded,NPT 螺纹) |
bsp | BSP(threaded,BSP 螺纹) |
proprietary | Proprietary(厂商私有) |
在模型中该字段为max_length=50的 CharField,可留空(blank=True, null=True)。
Diameter(直径)
连接器的直径:一个数值加上可选的单位(毫米mm、厘米cm或英寸in)。该字段由DiameterMixin提供(见 mixins.py),其约束为:
- 必须是在所选单位下的正数、非零值(底层校验器为
MinValueValidator(Decimal('0.01'))),或者留空; - 设置直径时必须同时指定单位,否则
clean()会抛出"Must specify a unit when setting a diameter"校验错误; - 数据库中还维护了一个规格化列
_abs_diameter(归一化为毫米),用于跨单位混合排序与过滤;save()通过normalize_diameter()在保存时写入该列。
Cooling Intake(上游冷却入口)
同一设备上为该出口供液的上游 Cooling Intake(可选)。模型通过外键cooling_intake关联,语义是:设备通过入口取入冷却液,再经由出口继续向下游传递——典型场景即 CDU 或歧管:设备自身有一个 facility 入口(intake),把冷却液分配给多个下游出口(outflow)。
该关联有两个值得注意的校验规则(见 device_components.py):
- 同设备校验:如果指定了
cooling_intake,则该入口必须与出口属于同一设备,否则抛出"Parent cooling intake (…) must belong to the same device"; - 环路检测:
clean()会调用validate_cooling_loop(),防止 intake → outflow → intake … 的引用链形成环路(详见下文“环路检测”一节)。
在冷却模型中的位置:与 Intake、Feed 的关系
供液侧的入口与出口
冷却回路的两类设备组件都位于供液(冷)侧:Cooling Intake接收冷却液,Cooling Outflow 把冷却液继续传递给下游设备。两者通过引用关系连接——液冷软管不作为结构化布线(cable)建模,而是入口直接引用供液给它的出口:
CoolingIntake.cooling_outflow:指向供应本入口的上游出口;CoolingOutflow.cooling_intake:指向同设备上为本出口供液的入口。
从模型注释(device_components.py)可以确认一个设计差异:入口的上游出口通常位于另一台设备(如 CDU),因此CoolingIntakeTemplate有意不提供“上游出口”字段;而出口的父级入口位于同一设备,所以CoolingOutflowTemplate可以模板化该关联。
回流路径由 Feed 统一表达
升温冷却液的回流路径不按组件建模。单个 Cooling Feed 代表整个回路(同时覆盖供液冷路与回流暖路),其下游入口是根据所服务机柜内安装的设备推导出来的,而非显式引用。换句话说:路径追踪就是沿着“入口↔出口”引用链行走,整条回路的供/回信息则由 Feed 承载。
机柜内液冷设备如何建模
CDU、歧管、机柜后门热交换器(RDHx)在 NetBox 中没有专用模型,而是建模为安装在机柜中的普通(通常为 0U)Device(与 PDU 建模方式一致):品牌型号来自 Device Type,冷却连接通过 Cooling Intake / Cooling Outflow 组件表达,服务于这类设备的 Feed 由其所在机柜推导。
从模板自动实例化
和大多数设备组件一样,Cooling Outflow 会在创建设备时自动从分配给所选设备类型的 Cooling Outflow 模板 实例化。
模板模型CoolingOutflowTemplate定义于 device_component_templates.py,其关键实现要点:
- 继承
DiameterMixin与ModularComponentTemplateModel,通过component_model = CoolingOutflow声明其产物模型; - 模板自身也可以引用同一设备类型/模块类型下的
CoolingIntakeTemplate作为父级入口(外键cooling_intake),并在clean()中校验“父入口必须属于同一设备类型/模块类型”; instantiate()(device_component_templates.py)在创建设备时解析名称/标签,查找对应的父入口实例,并把模板的type、diameter、diameter_unit等属性复制到新组件上;由于批量创建走bulk_create()会绕过save(),它还会直接补充写入规格化的_abs_diameter列。
环路检测:保证冷却引用链无环
CoolingLoopValidationMixin(见 mixins.py)为冷却组件链提供环路检测。由于入口、出口交替引用(Intake → Outflow → Intake …),每个具体模型声明upstream_field指向其“上游外键”:
CoolingIntake.upstream_field = 'cooling_outflow'CoolingOutflow.upstream_field = 'cooling_intake'
validate_cooling_loop()的实现策略是:每次跃迁只解析下一个外键 ID(单次索引列查询,不加载完整关联对象),并用(model, pk)组成的seen集合保证终止;一旦发现重复访问即抛出"Cooling intake and outflow assignments cannot form a loop."。两个模型都在各自的clean()中调用该方法,因此无论从入口还是出口侧建立引用,都能在对象级校验阶段拦截环路。
REST API 使用
Cooling Outflow 通过CoolingOutflowViewSet(见 api/views.py)暴露为 REST API 资源,序列化器定义于 api/serializers_/device_components.py。API 端点路径遵循 NetBox 惯例:
GET/POST /api/dcim/cooling-outflows/:列表 / 创建;GET/PATCH/PUT/DELETE /api/dcim/cooling-outflows/{id}/:详情 / 局部更新 / 全量更新 / 删除。
典型创建请求示例:
POST /api/dcim/cooling-outflows/ { "device": 42, "name": "outlet-1", "type": "uqdb", "diameter": 12.7, "diameter_unit": "mm", "cooling_intake": 10 }其中device必填,name在父设备内唯一,diameter_unit支持mm/cm/in(枚举见 netbox/choices.py),cooling_intake必须指向同一设备上的入口。API 层同样会触发模型clean()中的同设备校验与环路检测。对应模板资源的端点为/api/dcim/cooling-outflow-templates/(视图见 api/views.py)。
GraphQL 支持
Cooling Outflow 在 GraphQL 中也可用:CoolingOutflowType与CoolingOutflowTemplateType定义于 graphql/types.py,过滤器CoolingOutflowFilter/CoolingOutflowTemplateFilter定义于 graphql/filters.py。典型查询:
query { cooling_outflow_list(device_id: 42) { name type diameter diameter_unit cooling_intake { name } } }过滤、表格与界面
- Filterset:
CoolingOutflowFilterSet(filtersets.py)继承ModularDeviceComponentFilterSet,支持按设备、模块、名称、类型、直径等标准组件条件过滤;UI 侧对应表单为CoolingOutflowFilterForm(forms/filtersets.py)。 - 表格:
CoolingOutflowTable(tables/cooling.py)定义列表视图列。 - 视图:UI 视图族位于 views.py,覆盖列表、详情、创建(支持批量创建)、编辑、删除、批量导入、批量编辑、批量重命名、批量删除等完整 CRUD 操作。
- 属性面板:详情页右侧属性面板由
CoolingOutflowPanel(ui/panels.py)渲染。 - 搜索:
CoolingOutflowIndex(search.py)将冷却出口纳入全局搜索索引。
测试覆盖
仓库为该组件提供了完整的自动化测试,可作为理解行为与预期语义的参考:
- API 测试:
CoolingOutflowTestCase(tests/test_api.py)与模板测试CoolingOutflowTemplateTestCase(tests/test_api.py); - 视图测试:
CoolingOutflowTestCase(tests/test_views.py)继承DeviceComponentViewTestCase; - Filterset 测试:
CoolingOutflowTestCase(tests/test_filtersets.py); - 表格测试:
CoolingOutflowTableTestCase(tests/test_tables.py)。
实战建模示例
以一台带两个出口的 CDU 设备为例,完整的建模路径是:
- 设备类型:为 CDU 型号创建 Device Type,并添加一个
CoolingIntakeTemplate(如facility-in,连接器qdc、直径25 mm)和两个CoolingOutflowTemplate(如outlet-1、outlet-2),每个出口模板的父入口引用facility-in模板; - 创建设备:在机柜中创建该型号设备(通常为 0U),组件将从模板自动实例化,且出口自动关联到新设备上实例化出的入口;
- 连接下游:编辑服务器等下游设备的 Cooling Intake,将其
cooling_outflow指向该 CDU 的某个出口; - 建立回路:为该机柜创建 Cooling Feed,关联上游 Cooling Source,并填写额定冷却能力(kW)与最大流量;
- 路径追踪:沿“入口 ↔ 出口”引用链即可完成组件级追踪,供液/回流整体信息由 Feed 承载。
小结
Cooling Outflow 是 NetBox 液冷建模中承上启下的设备组件:它接收同设备入口的冷却液并继续传递给下游设备,构成“冷却源 → 冷却回路 → 设备入口/出口”层级中的组件层。理解其供液侧定位、同设备父入口约束、环路检测机制、模板自动实例化这四件事,就掌握了在 NetBox 中准确记录 CDU / 歧管 / RDHx 等液冷设备的关键。继续深入可阅读 Cooling 功能总览 与 Cooling Intake、Cooling Feed、Cooling Outflow 模板 等关联模型文档。
- 后端
- 网络
- 数据建模
【免费下载链接】netbox
The premier source of truth powering network automation. Open source under Apache 2. Try NetBox Cloud free: https://netboxlabs.com/products/free-netbox-cloud/
相关推荐
如何用Theseus打造个人时间地图:从安装到数据可视化全指南
如何用Theseus打造个人时间地图:从安装到数据可视化全指南 Theseus是一款开源的iOS个人分析工具,能够利用iPhone的位置和运动传感器追踪并可视化
后端网络数据建模NetBox v4.7 数据中心冷却建模指南:从冷却源到设备冷板的完整液冷拓扑
NetBox v4.7 数据中心冷却建模指南:从冷却源到设备冷板的完整液冷拓扑 NetBox 在 v4.7 中正式引入冷却(Cooling)基础设施建模能力,用
后端网络数据建模NetBox Circuit Groups(电路组)模型深度解析:分组管理、字段语义与 API 用法
NetBox Circuit Groups(电路组)模型深度解析:分组管理、字段语义与 API 用法 Circuit Groups(电路组)是 NetBox c
后端网络数据建模
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考