func (this *Discover) discoverClusters(zkzone *zk.ZkZone) { this.Ui.Output(zkzone.Name()) existingClusters := zkzone.Clusters() existingCluserPaths := make(map[string]struct{}, len(existingClusters)) for _, path := range existingClusters { existingCluserPaths[path] = struct{}{} } discoveredClusters, err := zkzone.DiscoverClusters("/") if err != nil { this.Ui.Error(zkzone.Name() + ": " + err.Error()) return } // print each cluster state: new, normal for _, zkpath := range discoveredClusters { if _, present := existingCluserPaths[zkpath]; !present { this.Ui.Output(strings.Repeat(" ", 4) + color.Green("%s +++", zkpath)) } else { this.Ui.Output(strings.Repeat(" ", 4) + zkpath) } } // find the offline clusters for c, path := range existingClusters { path = strings.TrimSpace(path) foundOnline := false for _, p := range discoveredClusters { p = strings.TrimSpace(p) if p == path { foundOnline = true break } } if !foundOnline { this.Ui.Output(strings.Repeat(" ", 4) + color.Red("%s: %s ---", c, path)) } } }