diff --git a/lib/gat/handlers/discovery/discoverer.go b/lib/gat/handlers/discovery/discoverer.go index 6ef7581783e1776fe3fd5f32c493d0aaa32b72f7..6fb8373387ae7640390735ecca3a28ba55312d54 100644 --- a/lib/gat/handlers/discovery/discoverer.go +++ b/lib/gat/handlers/discovery/discoverer.go @@ -1,11 +1,10 @@ package discovery -// Discoverer looks up and returns the servers. It must implement either Clusters or Added, Updated, and Removed. -// Both can be implemented for extra robustness. +// Discoverer looks up and returns the servers. It must implement Clusters. Optionally, it can implement Added +// and Removed for faster updating. For updates, just send to Added. type Discoverer interface { Clusters() ([]Cluster, error) Added() <-chan Cluster - Updated() <-chan Cluster Removed() <-chan string } diff --git a/lib/gat/handlers/discovery/discoverers/digitalocean/discoverer.go b/lib/gat/handlers/discovery/discoverers/digitalocean/discoverer.go index 8a31dfe07f446a8a392561e8c4460d5dbe8f4270..bcafe2c4286f1a7ecfb6dca60fc0d05449c593f1 100644 --- a/lib/gat/handlers/discovery/discoverers/digitalocean/discoverer.go +++ b/lib/gat/handlers/discovery/discoverers/digitalocean/discoverer.go @@ -100,10 +100,6 @@ func (T *Discoverer) Added() <-chan discovery.Cluster { return nil } -func (T *Discoverer) Updated() <-chan discovery.Cluster { - return nil -} - func (T *Discoverer) Removed() <-chan string { return nil } diff --git a/lib/gat/handlers/discovery/discoverers/google_cloud_sql/discoverer.go b/lib/gat/handlers/discovery/discoverers/google_cloud_sql/discoverer.go index 7ea6dc0d72229712b87799a50d843366ad372305..6bb9351b023cd1c14533778c68fe9c1a575b239d 100644 --- a/lib/gat/handlers/discovery/discoverers/google_cloud_sql/discoverer.go +++ b/lib/gat/handlers/discovery/discoverers/google_cloud_sql/discoverer.go @@ -208,10 +208,6 @@ func (T *Discoverer) Added() <-chan discovery.Cluster { return nil } -func (T *Discoverer) Updated() <-chan discovery.Cluster { - return nil -} - func (T *Discoverer) Removed() <-chan string { return nil } diff --git a/lib/gat/handlers/discovery/discoverers/zalando_operator/discoverer.go b/lib/gat/handlers/discovery/discoverers/zalando_operator/discoverer.go index 75a617e92de3c78f69ac777d3ede7210f3b855b5..62f547c46a6cdb20ff6cf5995499188b96c84b3f 100644 --- a/lib/gat/handlers/discovery/discoverers/zalando_operator/discoverer.go +++ b/lib/gat/handlers/discovery/discoverers/zalando_operator/discoverer.go @@ -36,7 +36,6 @@ type Discoverer struct { k8s k8sutil.KubernetesClient added chan discovery.Cluster - updated chan discovery.Cluster removed chan string done chan struct{} @@ -107,7 +106,6 @@ func (T *Discoverer) Provision(ctx caddy.Context) error { ) T.added = make(chan discovery.Cluster) - T.updated = make(chan discovery.Cluster) T.removed = make(chan string) _, err = T.informer.AddEventHandler(cache.ResourceEventHandlerFuncs{ @@ -131,7 +129,7 @@ func (T *Discoverer) Provision(ctx caddy.Context) error { if err != nil { return } - T.updated <- cluster + T.added <- cluster }, DeleteFunc: func(obj interface{}) { psql, ok := obj.(*acidv1.Postgresql) @@ -207,17 +205,27 @@ func (T *Discoverer) postgresqlToCluster(cluster acidv1.Postgresql) (discovery.C } func (T *Discoverer) Clusters() ([]discovery.Cluster, error) { - return nil, nil + clusters, err := T.k8s.Postgresqls(T.Namespace).List(context.Background(), metav1.ListOptions{}) + if err != nil { + return nil, err + } + + res := make([]discovery.Cluster, 0, len(clusters.Items)) + for _, cluster := range clusters.Items { + r, err := T.postgresqlToCluster(cluster) + if err != nil { + return nil, err + } + res = append(res, r) + } + + return res, nil } func (T *Discoverer) Added() <-chan discovery.Cluster { return T.added } -func (T *Discoverer) Updated() <-chan discovery.Cluster { - return T.updated -} - func (T *Discoverer) Removed() <-chan string { return T.removed } diff --git a/lib/gat/handlers/discovery/module.go b/lib/gat/handlers/discovery/module.go index d84ced436c99cd1d76fa4317ee44ee6d683944f1..a4cd104da1eb311b0147d9aaf28a9a9b84f2deb7 100644 --- a/lib/gat/handlers/discovery/module.go +++ b/lib/gat/handlers/discovery/module.go @@ -125,6 +125,10 @@ func (T *Module) creds(user User) (primary, replica auth.Credentials) { } func (T *Module) added(cluster Cluster) { + if prev, ok := T.clusters[cluster.ID]; ok { + T.updated(prev, cluster) + return + } if T.clusters == nil { T.clusters = make(map[string]Cluster) } @@ -475,8 +479,6 @@ func (T *Module) discoverLoop() { T.added(cluster) case id := <-T.discoverer.Removed(): T.removed(id) - case next := <-T.discoverer.Updated(): - T.updated(T.clusters[next.ID], next) case <-reconcile: err := T.reconcile() if err != nil {