64 lines
1.3 KiB
Go
64 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
|
|
"git.k6n.net/go-cart-actor/pkg/discovery"
|
|
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/client-go/kubernetes"
|
|
"k8s.io/client-go/rest"
|
|
)
|
|
|
|
func GetDiscovery() discovery.Discovery {
|
|
if podIp == "" {
|
|
return nil
|
|
}
|
|
|
|
config, kerr := rest.InClusterConfig()
|
|
|
|
if kerr != nil {
|
|
log.Fatalf("Error creating kubernetes client: %v\n", kerr)
|
|
}
|
|
client, err := kubernetes.NewForConfig(config)
|
|
if err != nil {
|
|
log.Fatalf("Error creating client: %v\n", err)
|
|
}
|
|
timeout := int64(30)
|
|
return discovery.NewK8sDiscovery(client, v1.ListOptions{
|
|
LabelSelector: "actor-pool=checkout",
|
|
TimeoutSeconds: &timeout,
|
|
})
|
|
}
|
|
|
|
func UseDiscovery(pool discovery.DiscoveryTarget) {
|
|
|
|
go func(hw discovery.Discovery) {
|
|
if hw == nil {
|
|
log.Print("No discovery service available")
|
|
return
|
|
}
|
|
ch, err := hw.Watch()
|
|
if err != nil {
|
|
log.Printf("Discovery error: %v", err)
|
|
return
|
|
}
|
|
for evt := range ch {
|
|
if evt.Host == "" {
|
|
continue
|
|
}
|
|
switch evt.IsReady {
|
|
case false:
|
|
if pool.IsKnown(evt.Host) {
|
|
log.Printf("Host %s is not ready, removing", evt.Host)
|
|
pool.RemoveHost(evt.Host)
|
|
}
|
|
default:
|
|
if !pool.IsKnown(evt.Host) {
|
|
log.Printf("Discovered host %s", evt.Host)
|
|
pool.AddRemoteHost(evt.Host)
|
|
}
|
|
}
|
|
}
|
|
}(GetDiscovery())
|
|
}
|