feat: compact admin secrets external secret ui
This commit is contained in:
@@ -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。
|
||||
- 目标 Secret:key presence、fingerprint、resourceVersion、valuesPrinted=false。
|
||||
- Conditions:type、status、reason、lastTransitionTime。
|
||||
- Consumer:Deployment/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`。
|
||||
|
||||
Reference in New Issue
Block a user