fix(collectors): 编辑采集策略时无法把"全集群"改成"只采几个命名空间"
=== 现象 ===
编辑 Promtail DaemonSet 采集器,显示"所有命名空间(全集群采集)",
下面每个命名空间的复选框全是灰的,点不动,无法改成只采指定几个。
=== 根因 ===
CollectorEditDialog 里单个命名空间的复选框写死了:
disabled={allSelected} // allSelected = selectedNs.length === 0
而 targetNamespaces 为空正是代表"全集群",也就是**一进来就处于全集群状态**,
于是所有子项被禁用;而"全集群"那个复选框的 handler 又是
onCheckedChange={() => setAll()} // 永远设回 []
两者叠加 → 没有任何操作能离开"全集群"状态,是死胡同。
=== 修复 ===
1. 去掉 disabled:勾任何一个命名空间都会让 selectedNs 非空,
allSelected 自动变 false,"全集群"勾选框随之取消——语义自洽。
2. "全集群"行加一句提示:勾选下方任一命名空间即可改为只采指定范围,
让用户知道下一步该点哪里。
=== 实测(51489599e2d8)===
PUT targetNamespaces=["astralx"] → 读回 ['astralx'] ✅
PUT targetNamespaces=[] → 读回 [](全集群) ✅
恢复 ['astralx','log'] → 读回 ['astralx','log'] ✅
tsc 通过;Pod = Hub latest = 51489599e2d8
注:改完需要点「部署」才会把新的 kubernetes_sd_configs.namespaces 白名单
下发到 Promtail DaemonSet。
This commit is contained in:
1 parent
9448868a71
commit
3861b8b128
3 files changed
+13
-2
No files matched your search
@@ -121,6 +121,7 @@ const collectors = {
|
||||
namespaces: 'Namespaces to Collect',
|
||||
allNamespaces: 'All namespaces cluster-wide',
|
||||
selectedCount: '{{count}} selected',
|
||||
allCheckedHint: '(tick any namespace below to switch to a fixed set)',
|
||||
allCheckbox: 'All namespaces (collect cluster-wide)',
|
||||
nsSearch: 'Search namespaces…',
|
||||
loading: 'Loading…',
|
||||
|
||||
@@ -125,6 +125,7 @@ const collectors = {
|
||||
namespaces: '采集命名空间',
|
||||
allNamespaces: '全集群所有命名空间',
|
||||
selectedCount: '已选 {{count}} 个',
|
||||
allCheckedHint: '(勾选下方任一命名空间即可改为只采指定范围)',
|
||||
allCheckbox: '所有命名空间(全集群采集)',
|
||||
nsSearch: '搜索命名空间…',
|
||||
loading: '加载中…',
|
||||
|
||||
@@ -290,7 +290,12 @@ export const CollectorEditDialog = memo(function CollectorEditDialog({ collector
|
||||
<div className="rounded-md border">
|
||||
<label className="flex items-center gap-2 border-b px-3 py-2 text-sm font-medium cursor-pointer hover:bg-muted/50">
|
||||
<Checkbox checked={allSelected} onCheckedChange={() => setAll()} />
|
||||
{t('edit.allCheckbox')}
|
||||
<span className="flex-1">{t('edit.allCheckbox')}</span>
|
||||
{allSelected && (
|
||||
<span className="text-xs font-normal text-muted-foreground">
|
||||
{t('edit.allCheckedHint')}
|
||||
</span>
|
||||
)}
|
||||
</label>
|
||||
<div className="p-2">
|
||||
<Input
|
||||
@@ -308,9 +313,13 @@ export const CollectorEditDialog = memo(function CollectorEditDialog({ collector
|
||||
)}
|
||||
{filteredNs.map((ns) => (
|
||||
<label key={ns} className="flex items-center gap-2 rounded px-2 py-1 text-sm hover:bg-muted/50 cursor-pointer">
|
||||
{/* 这里**不能**用 disabled={allSelected}:
|
||||
"全集群"状态下列表为空,一旦禁用所有子项,
|
||||
用户就永远无法从"全集群"切到"只采几个"——
|
||||
勾任何一个都会把 allSelected 变成 false,
|
||||
从而自动退出全集群状态。 */}
|
||||
<input
|
||||
type="checkbox"
|
||||
disabled={allSelected}
|
||||
checked={selectedNs.includes(ns)}
|
||||
onChange={() => toggleNs(ns)}
|
||||
/>
|
||||
|
||||
Reference in new issue
Block a user