metropolis/node: use Event Value for network status
This moves over the GetIP API to use our fancy new event/value library.
The consumers of this data are currently the cluster manager and the
kubernetes root service. Both are migrated over.
Test Plan: Refactor, covered by E2E tests.
X-Origin-Diff: phab/D711
GitOrigin-RevId: 8a1e0dd35236d55492722f4439323cb2ee9574fc
diff --git a/metropolis/node/core/cluster/manager.go b/metropolis/node/core/cluster/manager.go
index 6d6d592..6c85fb3 100644
--- a/metropolis/node/core/cluster/manager.go
+++ b/metropolis/node/core/cluster/manager.go
@@ -291,10 +291,15 @@
func (m *Manager) stateCreatingCluster(ctx context.Context) error {
logger := supervisor.Logger(ctx)
logger.Info("Creating new cluster: waiting for IP address...")
- ip, err := m.networkService.GetIP(ctx, true)
+
+ // STOPGAP: bad use of watcher (should be long-term)
+ watcher := m.networkService.Watch()
+ defer watcher.Close()
+ data, err := watcher.Get(ctx)
if err != nil {
return fmt.Errorf("when getting IP address: %w", err)
}
+ ip := data.ExternalAddress
logger.Infof("Creating new cluster: got IP address %s", ip.String())
logger.Info("Creating new cluster: initializing storage...")
@@ -310,7 +315,7 @@
return fmt.Errorf("failed to create new node certificate: %w", err)
}
- node := NewNode(cuk, *ip, *cert.Leaf)
+ node := NewNode(cuk, ip, *cert.Leaf)
m.consensus = consensus.New(consensus.Config{
Data: &m.storageRoot.Data.Etcd,