From 30540c66ddb39524f123da5e040ebd9da8067170 Mon Sep 17 00:00:00 2001 From: Weiwei Date: Wed, 4 Sep 2024 20:44:29 +0800 Subject: [PATCH] fix: trigger reload cm after update (#1109) * fix: trigger reload cm after update Signed-off-by: zwwhdls * use crypto/rand.Read, and remove math/rand.Seed. for go lint error in go1.20 Signed-off-by: zwwhdls * fix yaml parse Signed-off-by: Xuhui zhang --------- Signed-off-by: zwwhdls Signed-off-by: Xuhui zhang Co-authored-by: Xuhui zhang --- .../src/components/config-modal.tsx | 13 +++++------ pkg/dashboard/cm.go | 23 +++++++++++++++++++ pkg/util/util.go | 7 ++---- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/dashboard-ui-v2/src/components/config-modal.tsx b/dashboard-ui-v2/src/components/config-modal.tsx index 71ba24a1eb..026cf0d2c2 100644 --- a/dashboard-ui-v2/src/components/config-modal.tsx +++ b/dashboard-ui-v2/src/components/config-modal.tsx @@ -18,7 +18,7 @@ import { memo, ReactNode, useEffect, useState } from 'react' import Editor from '@monaco-editor/react' import { Button, Modal, Space } from 'antd' import { FormattedMessage } from 'react-intl' -import YAML from 'yaml' +import YAML, { YAMLParseError } from 'yaml' import { useConfig, useUpdateConfig } from '@/hooks/cm-api' @@ -44,12 +44,11 @@ const ConfigModal: React.FC<{ const [config, setConfig] = useState('') useEffect(() => { if (data?.data) { - setConfig( - YAML.stringify(data?.data?.['config.yaml']) - .split('\n') - .slice(1) - .join('\n'), - ) + try { + setConfig(YAML.stringify(YAML.parse(data?.data?.['config.yaml']))) + } catch (e) { + setConfig((e as YAMLParseError).message) + } } }, [data]) diff --git a/pkg/dashboard/cm.go b/pkg/dashboard/cm.go index b1ea773c89..4a2233211e 100644 --- a/pkg/dashboard/cm.go +++ b/pkg/dashboard/cm.go @@ -59,6 +59,29 @@ func (api *API) putCSIConfig() gin.HandlerFunc { c.JSON(500, gin.H{"error": err.Error()}) return } + s, err := metav1.LabelSelectorAsSelector(&metav1.LabelSelector{ + MatchLabels: map[string]string{ + "app.kubernetes.io/name": "juicefs-csi-driver", + "app": "juicefs-csi-node", + }, + }) + if err != nil { + c.String(500, "parse label selector error %v", err) + return + } + csiNodeList, err := api.client.CoreV1().Pods(api.sysNamespace).List(c, metav1.ListOptions{LabelSelector: s.String()}) + if err != nil { + c.String(500, "list csi node error %v", err) + return + } + for _, pod := range csiNodeList.Items { + pod.Annotations["juicefs/update-time"] = metav1.Now().Format("2006-01-02T15:04:05Z") + _, err = api.client.CoreV1().Pods(api.sysNamespace).Update(c, &pod, metav1.UpdateOptions{}) + if err != nil { + c.JSON(500, gin.H{"error": err.Error()}) + return + } + } c.JSON(200, cm) } } diff --git a/pkg/util/util.go b/pkg/util/util.go index 3b0f2ebe02..ad9bcf5c82 100644 --- a/pkg/util/util.go +++ b/pkg/util/util.go @@ -49,10 +49,6 @@ var ( utilLog = klog.NewKlogr().WithName("util") ) -func init() { - rand.Seed(time.Now().UnixNano()) -} - type mountInfo struct { // Unique ID for the mount (maybe reused after umount). id int @@ -305,8 +301,9 @@ var letterRunes = []rune("abcdefghijklmnopqrstuvwxyz") func RandStringRunes(n int) string { b := make([]rune, n) + r := rand.New(rand.NewSource(time.Now().UnixNano())) for i := range b { - b[i] = letterRunes[rand.Intn(len(letterRunes))] + b[i] = letterRunes[r.Intn(len(letterRunes))] } return string(b) }