diff --git a/k8s-mpam-controller/pkg/agent/mpam.go b/k8s-mpam-controller/pkg/agent/mpam.go index d3b9bfed1c52a19db77e9be40e28ea0ca39c2866..b14bfeed70a61933c0f278f5ad13b05c3a943247 100644 --- a/k8s-mpam-controller/pkg/agent/mpam.go +++ b/k8s-mpam-controller/pkg/agent/mpam.go @@ -287,7 +287,7 @@ func generateFullConf(mpamconf interface{}) []interface{} { continue } if checkConfig(rcdata) { - fullData = createFullData(rcdata, string(cfg)) + fullData := createFullData(rcdata, cfg.(interface{}).(string)) mpamFullCfg[index] = fullData } else { klog.Errorf("config %v is not right, please check config", rcdata) diff --git a/k8s-mpam-controller/pkg/agent/watcher.go b/k8s-mpam-controller/pkg/agent/watcher.go index 6080ee2342c70572d783616708d287620796c763..e68aa5f2a044785fd77b3d22b0ca6b0aa1bb2a81 100644 --- a/k8s-mpam-controller/pkg/agent/watcher.go +++ b/k8s-mpam-controller/pkg/agent/watcher.go @@ -52,6 +52,8 @@ type watcher struct { // the 'Data' field value of the ConfigMap named rc-config.group.{GROUP_NAME}, // otherwise it's the 'Data' field value of the ConfigMap named rc-config.default groupCfg *configData + + groupName string } var singleton_watcher *watcher @@ -87,7 +89,10 @@ func (w *watcher) watchNode() { if group != label { group = label klog.Infof("node group is set to %s", group) - w.watchGroupConfigMap(group) + w.Lock() + w.groupName = group + w.Unlock() + w.watchGroupConfigMap() } case watch.Deleted: klog.Warning("our node is removed...") @@ -136,16 +141,18 @@ func (w *watcher) watchNodeConfigMap() { }(k8w.ResultChan()) } -func (w *watcher) watchGroupConfigMap(group string) { +func (w *watcher) watchGroupConfigMap() { if w.groupConfigMapWatch != nil { w.groupConfigMapWatch.Stop() } // watch group ConfigMap cmName := "rc-config.default" - if group != "" { - cmName = "rc-config.group." + group + w.Lock() + if w.groupName != "" { + cmName = "rc-config.group." + w.groupName } + w.Unlock() selector := meta.ListOptions{FieldSelector: "metadata.name=" + cmName} k8w, err := w.k8sCli.CoreV1().ConfigMaps(configMapNamespace).Watch(context.TODO(), selector) if err != nil { @@ -156,7 +163,7 @@ func (w *watcher) watchGroupConfigMap(group string) { w.groupConfigMapWatch = k8w klog.Info("start watching ConfigMap " + cmName) - go func(ev <-chan watch.Event, group string) { + go func(ev <-chan watch.Event) { for e := range ev { switch e.Type { case watch.Added, watch.Modified: @@ -181,9 +188,10 @@ func (w *watcher) watchGroupConfigMap(group string) { } klog.Warning("seems group configMap watcher is closed, going to restart ...") + w.watchGroupConfigMap() klog.Warning("group configMap watcher is restarted") - }(k8w.ResultChan(), group) + }(k8w.ResultChan()) } func (w *watcher) watchPods() { @@ -241,7 +249,7 @@ func (w *watcher) start() { } w.watchNodeConfigMap() - w.watchGroupConfigMap("") + w.watchGroupConfigMap() w.watchNode() if direct {