m/n/core/network: drop Watch/Value methods, expose Status
The Watch/Value methods were a leftover from before we had a unified
event value API.
Change-Id: Id61732e0570e5fe3d9420857728b1f8a9769e697
Reviewed-on: https://review.monogon.dev/c/monogon/+/2876
Tested-by: Jenkins CI
Reviewed-by: Tim Windelschmidt <tim@monogon.tech>
diff --git a/metropolis/node/core/delve_enabled.go b/metropolis/node/core/delve_enabled.go
index 9df937d..0bd546f 100644
--- a/metropolis/node/core/delve_enabled.go
+++ b/metropolis/node/core/delve_enabled.go
@@ -35,7 +35,7 @@
// Delve for some reason connects to itself and in early-boot no
// network interface is available to do that through. Also external
// access isn't possible early on anyways.
- watcher := networkSvc.Watch()
+ watcher := networkSvc.Status.Watch()
_, err := watcher.Get(context.Background())
if err != nil {
panic(err)
diff --git a/metropolis/node/core/network/BUILD.bazel b/metropolis/node/core/network/BUILD.bazel
index a9a6309..52e4614 100644
--- a/metropolis/node/core/network/BUILD.bazel
+++ b/metropolis/node/core/network/BUILD.bazel
@@ -14,7 +14,6 @@
"//metropolis/node/core/network/dhcp4c",
"//metropolis/node/core/network/dhcp4c/callback",
"//metropolis/node/core/network/dns",
- "//metropolis/pkg/event",
"//metropolis/pkg/event/memory",
"//metropolis/pkg/logtree",
"//metropolis/pkg/supervisor",
diff --git a/metropolis/node/core/network/hostsfile/hostsfile.go b/metropolis/node/core/network/hostsfile/hostsfile.go
index 660cf3b..48f4f18 100644
--- a/metropolis/node/core/network/hostsfile/hostsfile.go
+++ b/metropolis/node/core/network/hostsfile/hostsfile.go
@@ -149,7 +149,8 @@
localC := make(chan *network.Status)
s.clusterC = make(chan nodeMap)
- if err := supervisor.Run(ctx, "local", event.Pipe(s.Network.Value(), localC)); err != nil {
+ st := &s.Network.Status
+ if err := supervisor.Run(ctx, "local", event.Pipe(st, localC)); err != nil {
return err
}
if err := supervisor.Run(ctx, "cluster", s.runCluster); err != nil {
diff --git a/metropolis/node/core/network/main.go b/metropolis/node/core/network/main.go
index f420d55..7426ee4 100644
--- a/metropolis/node/core/network/main.go
+++ b/metropolis/node/core/network/main.go
@@ -30,7 +30,6 @@
"source.monogon.dev/metropolis/node/core/network/dhcp4c"
dhcpcb "source.monogon.dev/metropolis/node/core/network/dhcp4c/callback"
"source.monogon.dev/metropolis/node/core/network/dns"
- "source.monogon.dev/metropolis/pkg/event"
"source.monogon.dev/metropolis/pkg/event/memory"
"source.monogon.dev/metropolis/pkg/supervisor"
"source.monogon.dev/metropolis/pkg/sysctl"
@@ -70,7 +69,8 @@
natTable *nftables.Table
natPostroutingChain *nftables.Chain
- status memory.Value[*Status]
+ // Status is the current status of the network as seen by the service.
+ Status memory.Value[*Status]
}
// New instantiates a new network service. If autoconfiguration is desired,
@@ -95,21 +95,6 @@
DNSServers dhcp4c.DNSServers
}
-// Watch returns a Watcher, which can be used by consumers of the network
-// Service to retrieve the current network status.
-// Close must be called on the Watcher when it is not used anymore in order to
-// prevent goroutine leaks.
-func (s *Service) Watch() event.Watcher[*Status] {
- return s.status.Watch()
-}
-
-// Value returns the underlying event.Value for the network service status.
-//
-// TODO(q3k): just expose s.status directly and remove the Watch and Event methods.
-func (s *Service) Value() event.Value[*Status] {
- return &s.status
-}
-
// ConfigureDNS sets a DNS ExtraDirective on the built-in DNS server of the
// network Service. See //metropolis/node/core/network/dns for more
// information.
@@ -161,7 +146,7 @@
s.ConfigureDNS(dns.NewUpstreamDirective(newServers))
}
// Notify status waiters.
- s.status.Set(&Status{
+ s.Status.Set(&Status{
ExternalAddress: new.AssignedIP,
DNSServers: new.DNSServers(),
})
diff --git a/metropolis/node/core/network/static.go b/metropolis/node/core/network/static.go
index 31ecabc..5cec110 100644
--- a/metropolis/node/core/network/static.go
+++ b/metropolis/node/core/network/static.go
@@ -174,7 +174,7 @@
}
}
}
- s.status.Set(&Status{
+ s.Status.Set(&Status{
ExternalAddress: selectedAddr,
DNSServers: nsIPList,
})
diff --git a/metropolis/node/core/roleserve/worker_clusternet.go b/metropolis/node/core/roleserve/worker_clusternet.go
index 5ae6877..1eb5649 100644
--- a/metropolis/node/core/roleserve/worker_clusternet.go
+++ b/metropolis/node/core/roleserve/worker_clusternet.go
@@ -42,7 +42,7 @@
},
DataDirectory: &s.storageRoot.Data.Kubernetes.ClusterNetworking,
LocalKubernetesPodNetwork: s.podNetwork,
- Network: s.network.Value(),
+ Network: &s.network.Status,
}
return svc.Run(ctx)
}
diff --git a/metropolis/node/core/roleserve/worker_heartbeat.go b/metropolis/node/core/roleserve/worker_heartbeat.go
index f79951c..c11c5d0 100644
--- a/metropolis/node/core/roleserve/worker_heartbeat.go
+++ b/metropolis/node/core/roleserve/worker_heartbeat.go
@@ -23,7 +23,7 @@
}
func (s *workerHeartbeat) run(ctx context.Context) error {
- nw := s.network.Watch()
+ nw := s.network.Status.Watch()
defer nw.Close()
w := s.curatorConnection.Watch()
diff --git a/metropolis/node/core/roleserve/worker_statuspush.go b/metropolis/node/core/roleserve/worker_statuspush.go
index e2a5cb9..63ab227 100644
--- a/metropolis/node/core/roleserve/worker_statuspush.go
+++ b/metropolis/node/core/roleserve/worker_statuspush.go
@@ -117,7 +117,7 @@
// runnable could get stuck.
supervisor.Run(ctx, "map-network", func(ctx context.Context) error {
- nw := s.network.Watch()
+ nw := s.network.Status.Watch()
defer nw.Close()
supervisor.Signal(ctx, supervisor.SignalHealthy)
diff --git a/metropolis/node/kubernetes/service_controller.go b/metropolis/node/kubernetes/service_controller.go
index 804a210..d309009 100644
--- a/metropolis/node/kubernetes/service_controller.go
+++ b/metropolis/node/kubernetes/service_controller.go
@@ -93,7 +93,7 @@
// machine's external IP address. If it changes, the runnable will exit.
// TODO(q3k): test this
supervisor.Run(ctx, "networked", func(ctx context.Context) error {
- networkWatch := s.c.Network.Watch()
+ networkWatch := s.c.Network.Status.Watch()
defer networkWatch.Close()
var status *network.Status