feat: compact admin secrets external secret ui

This commit is contained in:
UniDesk Codex
2026-07-01 15:24:16 +08:00
parent 4bff8c7bbc
commit 4bbcd7ff54
9 changed files with 596 additions and 207 deletions
+24 -24
View File
@@ -1,7 +1,7 @@
# HWLAB v0.3 ESO 密钥管理 UI 规格
SPEC: HWLAB-ESO-UI-20260630 ESO UI draft-2026-06-30-p0.
Issue: [#2292](https://github.com/pikasTech/HWLAB/issues/2292).
SPEC: HWLAB-ESO-UI-20260630 ESO UI draft-2026-07-01-p2-compact-detail.
Issue: [#2292](https://github.com/pikasTech/HWLAB/issues/2292), [#2324](https://github.com/pikasTech/HWLAB/issues/2324).
上级: [#2233](https://github.com/pikasTech/HWLAB/issues/2233), [#2277](https://github.com/pikasTech/HWLAB/issues/2277).
参考: Weave GitOps 0.22.0 Manage Secrets UI, HWLAB `config/hwlab-v03/secrets.yaml`.
@@ -32,44 +32,43 @@ Issue: [#2292](https://github.com/pikasTech/HWLAB/issues/2292).
## 页面结构
### 概览
### `/admin/secrets` 首页
屏顶部展示当前 target 摘要,不把 target 写死在前端:
页首屏直接聚焦 `ExternalSecrets` 紧凑列表和必要操作区,不再展示上一轮同一行的 `JD01 / v03``hwlab-admin-secrets-v1``ESO` 三个顶部摘要模块,也不使用同等体量的新卡片替代它们。
- node、lane、public URL、runtime namespace、infra namespace
- ESO controller / webhook / cert-controller readiness。
- `SecretStore` / `ClusterSecretStore` readiness 和 store scope。
- 最近一次 sync 时间、最近一次 validate 时间、当前 fingerprint 对齐摘要。
- consumer rollout 摘要:关联 Deployment/Job 数量、ready 数量、pending 数量、最近一次 fingerprint 触发的 rollout revision。
- `valuesPrinted=false` 固定可见。
概览区域只显示状态、引用和下一步 drill-down;不显示教程式长文案,也不提供复制 secret value 的入口。
允许保留低噪声刷新、Plan 入口、行数、更新时间和脱敏状态提示;target、contract、ESO readiness、fingerprint、consumer rollout 等诊断信息进入详情页、受控 API 或专门 drill-down,不长期占据首页首屏
### ExternalSecrets 列表
列表列字段:
首页列表固定列顺序:`NAME``STATUS``NAMESPACE``CLUSTER``K8S SECRET``SECRET STORE``AGE`
- `ExternalSecret` 名称、namespace、target node/lane、目标 Secret 名称
- `SecretStore` / `ClusterSecretStore` 名称、store scope
- 状态:`Ready``NotReady``Pending``SyncError``Unknown`
- 最近刷新时间、创建时间、refresh interval
- 目标 Secret key presence、fingerprint 摘要、resourceVersion
- 关联 consumer 与 rollout 状态
- 操作:详情、事件、复制脱敏诊断摘要、打开受控 validate 结果
- `NAME` 可点击,进入 `/admin/secrets/external-secrets/:namespace/:name`
- `STATUS` 覆盖 `Ready``NotReady``Pending``SyncError``Unknown` 和安全阻断状态
- `CLUSTER` 来自同源 read model 的 target/cluster 字段,不由前端硬编码 JD01/D518/D601/G14
- `K8S SECRET` 显示 target Kubernetes Secret 名称和必要 resourceVersion/presence 摘要
- `SECRET STORE` 显示 SecretStore 或 ClusterSecretStore 的脱敏名称与 scope
- `AGE` 来自后端 `createdAt``ageSource``lastUpdated` 或等价 timestamp;前端只能格式化显示,不硬编码时间
- 桌面端保持高密度可扫描行高;窄屏允许表格横向滚动,但不得改变列顺序或造成文本重叠
列表不得提供复制、下载、解码或 reveal secret value 的操作。
### ExternalSecret 详情
详情页分区:
详情页路由为 `/admin/secrets/external-secrets/:namespace/:name`,刷新浏览器后必须能恢复当前资源。页面左上角提供返回按钮和刷新按钮;返回进入 `/admin/secrets` 列表,刷新只刷新当前 ExternalSecret detail 与当前资源 events。
详情页顶部状态区固定两行:第一行 `status`,第二行 `last updated`。顶部状态区下方提供同一行 `DETAILS` / `EVENTS` 切换按钮;切换只影响按钮下方内容区,不重排顶部状态区。
`DETAILS` 分区展示:
- 状态摘要:Ready/NotReady、LastRefreshTime、LastTransitionTime、reason、message 摘要。
- 基本信息:ExternalSecret、target Secret、node/lane、namespace、store kind/name/scope。
- 数据映射:remoteRef path、property、version、target key、fingerprint;路径可脱敏或 hash,不能显示 value。
- 目标 Secretkey presence、fingerprint、resourceVersion、valuesPrinted=false。
- Conditionstype、status、reason、lastTransitionTime。
- ConsumerDeployment/Job、image、pod readiness、rollout revision、template fingerprint annotation、最后 validate 结果。
- Provenance:配置来源文件、Git source commit、GitOps revision、Argo revision 或 status job id。
`EVENTS` 分区只展示当前 ExternalSecret 相关 events,包括 reason、message 摘要、resource、时间、trace/job id;不得展示全局无关 events。
### 创建/编辑向导
本 issue 只设计向导,不启用生产 apply。向导提交后的默认动作是 dry-run/plan。
@@ -119,7 +118,7 @@ UI 可以把 `Pending` 作为 `Unknown` 与明确错误之间的中间态,但
GET /v1/admin/secrets/summary
GET /v1/admin/secrets/external-secrets?node=<id>&lane=<lane>&namespace=<ns>
GET /v1/admin/secrets/external-secrets/:namespace/:name
GET /v1/admin/secrets/events?node=<id>&lane=<lane>&limit=<n>
GET /v1/admin/secrets/events?node=<id>&lane=<lane>&namespace=<ns>&name=<externalSecret>&limit=<n>
POST /v1/admin/secrets/external-secrets/plan
POST /v1/admin/secrets/external-secrets/validate
```
@@ -183,7 +182,8 @@ POST /v1/admin/secrets/rotate
## 验收标准
- 侧边栏设计明确 `密钥` 位于 `授权``用户` 之间。
- 页面覆盖概览、ExternalSecrets 列表、详情、创建/编辑 dry-run 向导、事件与 rollout/validate 可视化
- `/admin/secrets` 首页覆盖紧凑 ExternalSecrets 列表、刷新和 dry-run Plan 入口;不再展示顶部三模块、内联详情或全局 Events
- ExternalSecret 详情深链覆盖状态、last updated、脱敏 details、当前资源 events、返回和刷新。
- 所有 target 默认值由 API/YAML active target 解析,前端不硬编码 JD01、D518、D601 或 G14。
- UI 只覆盖 ESO;没有 SOPS、age/GPG、Git 加密文件、PR 工作流或 secret value 输入框。
- API 草案只通过同源受控 API 暴露脱敏状态,不要求用户执行裸 `kubectl`