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',
|
namespaces: 'Namespaces to Collect',
|
||||||
allNamespaces: 'All namespaces cluster-wide',
|
allNamespaces: 'All namespaces cluster-wide',
|
||||||
selectedCount: '{{count}} selected',
|
selectedCount: '{{count}} selected',
|
||||||
|
allCheckedHint: '(tick any namespace below to switch to a fixed set)',
|
||||||
allCheckbox: 'All namespaces (collect cluster-wide)',
|
allCheckbox: 'All namespaces (collect cluster-wide)',
|
||||||
nsSearch: 'Search namespaces…',
|
nsSearch: 'Search namespaces…',
|
||||||
loading: 'Loading…',
|
loading: 'Loading…',
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ const collectors = {
|
|||||||
namespaces: '采集命名空间',
|
namespaces: '采集命名空间',
|
||||||
allNamespaces: '全集群所有命名空间',
|
allNamespaces: '全集群所有命名空间',
|
||||||
selectedCount: '已选 {{count}} 个',
|
selectedCount: '已选 {{count}} 个',
|
||||||
|
allCheckedHint: '(勾选下方任一命名空间即可改为只采指定范围)',
|
||||||
allCheckbox: '所有命名空间(全集群采集)',
|
allCheckbox: '所有命名空间(全集群采集)',
|
||||||
nsSearch: '搜索命名空间…',
|
nsSearch: '搜索命名空间…',
|
||||||
loading: '加载中…',
|
loading: '加载中…',
|
||||||
|
|||||||
@@ -290,7 +290,12 @@ export const CollectorEditDialog = memo(function CollectorEditDialog({ collector
|
|||||||
<div className="rounded-md border">
|
<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">
|
<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()} />
|
<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>
|
</label>
|
||||||
<div className="p-2">
|
<div className="p-2">
|
||||||
<Input
|
<Input
|
||||||
@@ -308,9 +313,13 @@ export const CollectorEditDialog = memo(function CollectorEditDialog({ collector
|
|||||||
)}
|
)}
|
||||||
{filteredNs.map((ns) => (
|
{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">
|
<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
|
<input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
disabled={allSelected}
|
|
||||||
checked={selectedNs.includes(ns)}
|
checked={selectedNs.includes(ns)}
|
||||||
onChange={() => toggleNs(ns)}
|
onChange={() => toggleNs(ns)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in new issue
Block a user