Kiali anonymous, журнал Helm, kubeconfig для контейнеров, UI аддонов

- Kiali: убран login, anonymous по умолчанию; удалены поля логина/пароля из UI и API
- Журнал Helm: install/upgrade/delete, message и колонка в journal.js
- Аддоны: values свёрнуты при подгрузке для установленных
- GET …/kubeconfig/docker: host.docker.internal:порт + tls-server-name; кнопка в UI
- apply_apiserver_endpoint_to_kubeconfig_file; KIND_K8S_APISERVER_GATEWAY_HOST в compose/env.example
- README и api_routes.md обновлены
This commit is contained in:
Sergey Antropoff
2026-04-04 18:54:10 +03:00
parent 349b78d24d
commit 4b703801e1
13 changed files with 415 additions and 123 deletions
+56 -1
View File
@@ -88,6 +88,61 @@
return "journal-status-pill";
}
/** Суффикс job_kind (после helm_addon_install_|upgrade_|delete_) → id аддона в API. */
function helmJobSlugToAddonId(slug) {
const m = {
ingress_nginx: "ingress-nginx",
kube_prometheus_stack: "kube-prometheus-stack",
metrics_server: "metrics-server",
istio_kiali: "istio-kiali",
};
return m[slug] || String(slug || "").replace(/_/g, "-") || "—";
}
function helmAddonTitle(id) {
const m = {
"ingress-nginx": "ingress-nginx",
"kube-prometheus-stack": "kube-prometheus-stack",
"metrics-server": "metrics-server",
"istio-kiali": "Istio + Kiali",
};
return m[id] || id || "—";
}
function helmOperationTitle(op) {
const o = (op || "").toLowerCase();
if (o === "install") return "Установка";
if (o === "upgrade") return "Обновление";
if (o === "delete") return "Удаление";
return op || "—";
}
/**
* Колонка «Вид операции» для режима Helm: установка / обновление / удаление и имя аддона.
* Старые записи без result.action разбираются по префиксу kind.
*/
function formatHelmJournalKind(e) {
const r = e.result;
if (r && typeof r === "object") {
const verb = helmOperationTitle(r.action);
const ad = r.addon != null ? helmAddonTitle(String(r.addon)) : "—";
if (r.action && r.addon != null && String(r.addon).length) {
return verb + " · " + ad;
}
}
const k = e.kind || "";
if (k.indexOf("helm_addon_delete_") === 0) {
return "Удаление · " + helmAddonTitle(helmJobSlugToAddonId(k.replace(/^helm_addon_delete_/, "")));
}
if (k.indexOf("helm_addon_upgrade_") === 0) {
return "Обновление · " + helmAddonTitle(helmJobSlugToAddonId(k.replace(/^helm_addon_upgrade_/, "")));
}
if (k.indexOf("helm_addon_install_") === 0) {
return "Установка · " + helmAddonTitle(helmJobSlugToAddonId(k.replace(/^helm_addon_install_/, "")));
}
return k || "—";
}
function visiblePageItems(current, total) {
const delta = 2;
const range = [];
@@ -200,7 +255,7 @@
const finished = formatUtc(
e.finished_at_utc || e.created_at_utc,
);
const kind = e.kind || "";
const kind = mode === "helm_addons" ? formatHelmJournalKind(e) : (e.kind || "");
const msg = (e.message || "").trim();
let lines = [];
if (mode === "per_cluster") {