cloud/shepherd/equinix: update provider extra data

This adds a new sub-component to the Equinix Shepherd, the Updater.

The Updater periodically scans all machines backed by the Equinix
provider in the BMDB and queries the Equinix API for their status. The
status then populates the new 'Provided' row data.

Change-Id: I99657545aabfb13d71e165d36ce549c852feaf49
Reviewed-on: https://review.monogon.dev/c/monogon/+/1578
Tested-by: Jenkins CI
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
diff --git a/cloud/shepherd/equinix/manager/server/main.go b/cloud/shepherd/equinix/manager/server/main.go
index 2a293dc..faf84f1 100644
--- a/cloud/shepherd/equinix/manager/server/main.go
+++ b/cloud/shepherd/equinix/manager/server/main.go
@@ -25,6 +25,7 @@
 	ProvisionerConfig manager.ProvisionerConfig
 	InitializerConfig manager.InitializerConfig
 	RecovererConfig   manager.RecovererConfig
+	UpdaterConfig     manager.UpdaterConfig
 	WebugConfig       webug.Config
 	API               wrapngo.Opts
 }
@@ -48,6 +49,7 @@
 	c.ProvisionerConfig.RegisterFlags()
 	c.InitializerConfig.RegisterFlags()
 	c.RecovererConfig.RegisterFlags()
+	c.UpdaterConfig.RegisterFlags()
 	c.WebugConfig.RegisterFlags()
 	c.API.RegisterFlags()
 }
@@ -94,6 +96,11 @@
 		klog.Exitf("%v", err)
 	}
 
+	updater, err := c.UpdaterConfig.New(api)
+	if err != nil {
+		klog.Exitf("%v", err)
+	}
+
 	conn, err := c.BMDB.Open(true)
 	if err != nil {
 		klog.Exitf("Failed to open BMDB connection: %v", err)
@@ -118,6 +125,12 @@
 		}
 	}()
 	go func() {
+		err = updater.Run(ctx, conn)
+		if err != nil {
+			klog.Exit(err)
+		}
+	}()
+	go func() {
 		if err := c.WebugConfig.Start(ctx, conn); err != nil && err != ctx.Err() {
 			klog.Exitf("Failed to start webug: %v", err)
 		}