func GetEndpoints()

in cassandra/go/main.go [25:66]


func GetEndpoints(namespace, service, defSeeds *C.char) *C.char {
	ns := C.GoString(namespace)
	svc := C.GoString(service)
	seeds := C.GoString(defSeeds)

	s := strings.Map(func(r rune) rune {
		if unicode.IsSpace(r) {
			return -1
		}
		return r
	}, seeds)

	nseeds := strings.Split(s, ",")
	client, err := k8s.NewInClusterClient()
	if err != nil {
		log.Printf("unexpected error opening a connection against API server: %v\n", err)
		log.Printf("returning default seeds: %v\n", nseeds)
		return buildEndpoints(nseeds)
	}

	ips := make([]string, 0)

	var endpoints corev1.Endpoints
	err = client.Get(context.Background(), ns, svc, &endpoints)
	if err != nil {
		log.Printf("unexpected error obtaining information about service endpoints: %v\n", err)
		log.Printf("returning default seeds: %v\n", nseeds)
		return buildEndpoints(nseeds)
	}

	for _, endpoint := range endpoints.Subsets {
		for _, address := range endpoint.Addresses {
			ips = append(ips, *address.Ip)
		}
	}

	if len(ips) == 0 {
		return buildEndpoints(nseeds)
	}

	return buildEndpoints(ips)
}