Files
LokiStack/backend
opsx 9448868a71
CI / Backend (go vet + test) (push) Waiting to run
CI / Frontend (lint + build + test) (push) Waiting to run
feat(collectors): Promtail DaemonSet 的部署命名空间固定为 log,表单隐藏该字段
=== 需求 ===
创建 Loki 部署后添加采集策略(Promtail DaemonSet)时,"部署节点命名空间"
不该让用户选 —— 采集器必须和 LokiStack 放在一起(log)。

=== 前端 ===
CollectorFormDialog:选择 k8s-daemonset 时整块隐藏 namespace 字段
(连同分类型提示、手动输入开关一起),改为一条只读说明:
  「采集器部署命名空间固定为 Loki 所在命名空间(通常 log),与 LokiStack
    放在一起,无需选择。要限制采集范围请用下面的『只采集这些命名空间』。」
提交时 DaemonSet 不传 namespace(原来会传用户填的值)。
顺带修掉隐藏后暴露的 tsc 报错:placeholder 里 `collectorType === 'k8s-daemonset'`
在收窄后的分支里已成不可能比较,改为常量 'default'。

=== 后端(强制约束,不只靠前端)===
services/collector.go:
  Create:type == k8s-daemonset 时强制清空 req.Namespace
          → 渲染与部署两侧都会回退到 d.loki.Namespace
  Update:DaemonSet 忽略 updates["namespace"]
原始渲染逻辑本就有"为空则用 LokiDeployment.Namespace,再兜底 log"。

为什么后端也要拦:API 直接调用(脚本/其他客户端)不该能把采集器
部署到任意命名空间——那样会出现"平台显示在 log、实际 DaemonSet 在别处"
的状态漂移。

=== 实测(0108617e4180)===
  现有采集器 promtail-pre: type=k8s-daemonset namespace='log'
  PUT {"namespace":"evil-ns"} → 返回 success,但读回仍是 'log' ✅ 被忽略
  tsc 通过;Pod = Hub latest = 0108617e4180
2026-10-31 01:56:15 +00:00
..