cloud/shepherd: skip machines in failed state

Currently we are not ignoring machines that are in failed state, which
brings the provider to a stop as soon as a provision request fails. We
should ignore such machines.

Change-Id: I7be64c710cc15428f4d8d4e75b6df1e816d453f8
Reviewed-on: https://review.monogon.dev/c/monogon/+/2417
Reviewed-by: Serge Bazanski <serge@monogon.tech>
Tested-by: Jenkins CI
diff --git a/cloud/shepherd/provider/equinix/provider.go b/cloud/shepherd/provider/equinix/provider.go
index edc8f3f..7d3c0d2 100644
--- a/cloud/shepherd/provider/equinix/provider.go
+++ b/cloud/shepherd/provider/equinix/provider.go
@@ -127,6 +127,10 @@
 	packngo.HardwareReservation
 }
 
+func (e reservation) Failed() bool {
+	return false
+}
+
 func (e reservation) ID() shepherd.ProviderID {
 	return shepherd.InvalidProviderID
 }
@@ -143,6 +147,10 @@
 	packngo.Device
 }
 
+func (e *machine) Failed() bool {
+	return e.Device.State == "failed"
+}
+
 func (e *machine) ID() shepherd.ProviderID {
 	return shepherd.ProviderID(e.Device.ID)
 }