From 4ef72066b1c62d32552e702c8c0fd365cbb42f90 Mon Sep 17 00:00:00 2001 From: Garet Halliday <me@garet.holiday> Date: Mon, 2 Oct 2023 14:30:30 -0500 Subject: [PATCH] improve discovery for zalando operator discovery --- lib/gat/handlers/discovery/discoverer.go | 5 ++-- .../discoverers/digitalocean/discoverer.go | 4 ---- .../google_cloud_sql/discoverer.go | 4 ---- .../zalando_operator/discoverer.go | 24 ++++++++++++------- lib/gat/handlers/discovery/module.go | 6 +++-- 5 files changed, 22 insertions(+), 21 deletions(-) diff --git a/lib/gat/handlers/discovery/discoverer.go b/lib/gat/handlers/discovery/discoverer.go index 6ef75817..6fb83733 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 8a31dfe0..bcafe2c4 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 7ea6dc0d..6bb9351b 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 75a617e9..62f547c4 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 d84ced43..a4cd104d 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 { -- GitLab