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