// regionLeaders returns a map of regions to the IP of the member that is the // leader. func regionLeaders(client *api.Client, mem []*api.AgentMember) (map[string]string, error) { // Determine the unique regions. leaders := make(map[string]string) regions := make(map[string]struct{}) for _, m := range mem { regions[m.Tags["region"]] = struct{}{} } if len(regions) == 0 { return leaders, nil } status := client.Status() for reg := range regions { l, err := status.RegionLeader(reg) if err != nil { // This error means that region has no leader. if strings.Contains(err.Error(), "No cluster leader") { continue } return nil, err } leaders[reg] = l } return leaders, nil }