blob: d80dea1953c95f44f3142a31558857fa665785aa [file] [log] [blame]
Serge Bazanski79208522023-03-28 20:14:58 +02001package roleserve
2
3import (
4 "context"
5 "net"
6
7 "source.monogon.dev/metropolis/node/core/clusternet"
8 "source.monogon.dev/metropolis/node/core/localstorage"
9 "source.monogon.dev/metropolis/pkg/event/memory"
10 "source.monogon.dev/metropolis/pkg/supervisor"
11
12 ipb "source.monogon.dev/metropolis/node/core/curator/proto/api"
13)
14
15type workerClusternet struct {
16 storageRoot *localstorage.Root
17
18 // clusterMembership will be read.
19 clusterMembership *memory.Value[*ClusterMembership]
20 // podNetwork will be read.
21 podNetwork *memory.Value[*clusternet.Prefixes]
22}
23
24func (s *workerClusternet) run(ctx context.Context) error {
25 w := s.clusterMembership.Watch()
26 defer w.Close()
27 supervisor.Logger(ctx).Infof("Waiting for cluster membership...")
28 cm, err := w.Get(ctx, FilterHome())
29 if err != nil {
30 return err
31 }
32 supervisor.Logger(ctx).Infof("Got cluster membership, starting...")
33
34 conn, err := cm.DialCurator()
35 if err != nil {
36 return err
37 }
38 defer conn.Close()
39 cur := ipb.NewCuratorClient(conn)
40
41 svc := clusternet.Service{
42 Curator: cur,
43 ClusterNet: net.IPNet{
44 IP: []byte{10, 0, 0, 0},
45 Mask: net.IPMask{255, 255, 0, 0},
46 },
47 DataDirectory: &s.storageRoot.Data.Kubernetes.ClusterNetworking,
48 LocalKubernetesPodNetwork: s.podNetwork,
49 }
50 return svc.Run(ctx)
51}