blob: d937824e4dde5f68d584be12c41aa76acabdbb65 [file] [log] [blame]
Serge Bazanski6fdca3f2023-03-20 17:47:07 +01001package kubernetes
2
3import (
4 "context"
Serge Bazanski6fdca3f2023-03-20 17:47:07 +01005 "net"
6
7 "source.monogon.dev/go/net/tinylb"
8 "source.monogon.dev/metropolis/node"
9 ipb "source.monogon.dev/metropolis/node/core/curator/proto/api"
Serge Bazanski60461b22023-10-26 19:16:59 +020010 "source.monogon.dev/metropolis/node/core/curator/watcher"
Serge Bazanski6fdca3f2023-03-20 17:47:07 +010011 "source.monogon.dev/metropolis/pkg/event/memory"
12)
13
14// updateLoadBalancerAPIServers provides a tinylb BackendSet memory value with
15// the currently known nodes running a Kubernetes apiserver as retrieved from the
16// given curator client.
17func updateLoadbalancerAPIServers(ctx context.Context, val *memory.Value[tinylb.BackendSet], cur ipb.CuratorClient) error {
Serge Bazanski6fdca3f2023-03-20 17:47:07 +010018 set := &tinylb.BackendSet{}
19 val.Set(set.Clone())
Serge Bazanski6fdca3f2023-03-20 17:47:07 +010020
Serge Bazanski60461b22023-10-26 19:16:59 +020021 return watcher.WatchNodes(ctx, cur, watcher.SimpleFollower{
22 FilterFn: func(a *ipb.Node) bool {
23 if a.Status == nil {
24 return false
Serge Bazanski6fdca3f2023-03-20 17:47:07 +010025 }
Serge Bazanski60461b22023-10-26 19:16:59 +020026 if a.Status.ExternalAddress == "" {
27 return false
Serge Bazanski6fdca3f2023-03-20 17:47:07 +010028 }
Serge Bazanski60461b22023-10-26 19:16:59 +020029 if a.Roles.KubernetesController == nil {
30 return false
31 }
32 return true
33 },
34 EqualsFn: func(a *ipb.Node, b *ipb.Node) bool {
35 return a.Status.ExternalAddress == b.Status.ExternalAddress
36 },
37 OnNewUpdated: func(new *ipb.Node) error {
38 set.Insert(new.Id, &tinylb.SimpleTCPBackend{
39 Remote: net.JoinHostPort(new.Status.ExternalAddress, node.KubernetesAPIPort.PortString()),
40 })
41 val.Set(set.Clone())
42 return nil
43 },
44 OnDeleted: func(prev *ipb.Node) error {
45 set.Delete(prev.Id)
46 val.Set(set.Clone())
47 return nil
48 },
49 })
Serge Bazanski6fdca3f2023-03-20 17:47:07 +010050}