关于 infrahub-managing-menus
为 Infrahub 项目提供自定义菜单设计指导,面向需要组织 Web 界面侧边栏的开发者。涵盖菜单层级、图标及与 Schema 的配合,帮助避免重复条目并排查显示问题。
主要功能
- 01编写菜单 YAML
- 02组织菜单层级与分组
- 03配置图标和标签
- 04关联 Schema 节点
- 05排查重复或错位条目
适用场景
- 01为 Infrahub Web UI 设计导航
- 02将节点类型分组排列
- 03调整现有菜单结构
- 04排查菜单项未显示的问题
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ opsmill/ infrahub-skills --skill infrahub-managing-menus安装后在 Claude Code 中输入/infrahub-managing-menus确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
examples.mdrules/_sections.md_template.mdformat-structure.mdhierarchy-nesting.mdicons-reference.mditem-properties.mdpatterns-common.mdschema-integration.md详细介绍
Infrahub 菜单创建器
概述
提供创建 Infrahub 自定义菜单的专业指导。 菜单控制 Web 界面左侧的导航,将架构节点类型整理成自定义 层级结构。
项目上下文
现有菜单文件:
!find . -name "*.yml" -path "*/menus/*" 2>/dev/null | head -10
架构文件(用于识别可用的节点类型):
!find . -name "*.yml" -path "*/schemas/*" -o -name "*schema*" -name "*.yml" 2>/dev/null | head -10
适用场景
- 为 Infrahub Web UI 设计导航菜单
- 将节点类型整理成逻辑分组 和层级结构
- 为菜单项添加图标和标签
- 设置分组标题(不可点击) 并添加嵌套子项
- 配置架构节点使用自定义菜单, 而非自动生成的菜单
- 调整现有菜单文件中的顺序、名称或分组
- 调试菜单项未显示或 出现在错误分组中的原因
规则类别
| 优先级 | 类别 | 前缀 | 描述 |
|---|---|---|---|
| CRITICAL | 格式 | format- | apiVersion、kind、spec |
| CRITICAL | 属性 | item- | name、namespace、label、kind |
| HIGH | 层级 | hierarchy- | 嵌套、分组标题、数据 |
| HIGH | 图标 | icons- | MDI 图标引用、选项 |
| MEDIUM | 架构 | schema- | include_in_menu、kind 链接 |
| LOW | 模式 | patterns- | 平铺菜单、注释、链接 |
此技能依赖的架构功能
自定义菜单不会取代自动菜单,而是对其进行 补充。架构需要配合设置,以避免重复项并保持 UI 稳定。
重复项来自两个地方,只有其中一个来自架构。
对于自动菜单也会生成的节点,请在下文中设置
include_in_menu: false 来处理;对于 Infrahub
自身提供的部分,请在菜单文件中通过
parent: 处理,详见
rules/hierarchy-nesting.md。
| 如果菜单项…… | 架构必须…… | 参见 |
|---|---|---|
通过 kind: 链接到架构节点的列表视图 | 定义该节点(或泛型节点),以确保 URL 可解析;并在其上设置 include_in_menu: false,以隐藏重复的自动菜单项 | rules/schema-integration.md |
| 通过泛型 kind 在一个条目下显示所有子类型 | 定义泛型节点,并确保所有相关节点都 inherit_from 它 | ../infrahub-managing-schemas/rules/hierarchy-setup.md |
| 自动菜单启用时,需要显示在特定位置 | 在架构节点上设置 order_weight(自动菜单会使用它;自定义菜单会忽略它) | ../infrahub-managing-schemas/rules/display-order-weight.md |
| 将子类型归入父节点条目下 | 在每个子类型上设置 menu_placement: <FullKind>,使自动菜单侧的分组与自定义菜单保持一致 | ../infrahub-managing-schemas/rules/display-menu-placement.md |
检查菜单文件所引用的每个节点上的
include_in_menu 设置——若未避免侧边栏重复,
用户会以为自定义菜单“坏了”,但应在架构侧
进行修复。
菜单文件基础
---
apiVersion: infrahub.app/v1
kind: Menu
spec:
data:
- namespace: Dcim
name: DeviceMenu
label: "Devices"
icon: "mdi:server"
kind: DcimDevice # Links to schema node list view
apiVersion、kind: Menu 和 spec.data 始终
为必填项。每个菜单项都需要 name 和 namespace。
工作流
创建菜单时,请遵循以下步骤:
-
收集需求 — 询问有哪些 schema 节点、应如何分组,以及用户想要平面导航还是层级导航。
-
阅读相关规则 — 阅读
rules/format-structure.md,了解必需的 YAML 结构;阅读rules/item-properties.md,了解条目字段;阅读rules/icons-reference.md,选择合适的 MDI 图标。放置任何条目之前(包括平面菜单),都要阅读rules/hierarchy-nesting.md:Infrahub 已内置 IPAM、对象管理、分支等内容,属于这些类别的内容应通过parent:挂接,而不是重新声明。 -
生成菜单 YAML — 从
$schema注释和apiVersion/kind/spec结构开始。应用第 2 步中的规则。 -
添加注册和 schema 指引 — 输出的每个菜单文件都必须包含:
- 一个 YAML 注释块,说明如何在
.infrahub.yml的menus:键下注册该文件(参见rules/format-structure.md) - 一个 YAML 注释块,建议对自定义菜单中出现的每个 schema 节点设置
include_in_menu: false,以避免侧边栏条目重复(参见rules/schema-integration.md)
请将这些内容作为注释放在文件顶部、
---文档分隔符之前。这样,用户就能在菜单定义旁看到这些指引。 - 一个 YAML 注释块,说明如何在
参考资料
- examples.md — 四种完整的菜单层级示例(平面、分组、通用关联、完整多领域),可直接复制和调整
- infrahub-yml-reference.md —
.infrahub.yml项目配置 - common/rules/ — 适用于所有技能的共享规则(Git 集成、缓存注意事项)
- ../infrahub-common/rules/workflow-information-priority.md — 优先使用技能内容;确实存在信息缺口时,了解如何查阅
docs.infrahub.app(例如删除节点) - managing-schemas — 菜单会链接到的 schema 节点类型
- rules/ — 按类别前缀整理的各项规则