@@ -19,6 +19,7 @@ package controllers
1919import (
2020 "context"
2121 "sync"
22+ "time"
2223
2324 "github.com/go-logr/logr"
2425 "github.com/pkg/errors"
@@ -27,6 +28,7 @@ import (
2728 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2829 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
2930 kerrors "k8s.io/apimachinery/pkg/util/errors"
31+ "k8s.io/apimachinery/pkg/util/wait"
3032 "k8s.io/client-go/tools/record"
3133 "k8s.io/klog"
3234 clusterv1 "sigs.k8s.io/cluster-api/api/v1alpha2"
@@ -183,9 +185,18 @@ func (r *MachineReconciler) reconcileDelete(ctx context.Context, cluster *cluste
183185 }
184186 } else {
185187 klog .Infof ("Deleting node %q for machine %q" , m .Status .NodeRef .Name , m .Name )
186- if err := r .deleteNode (ctx , cluster , m .Status .NodeRef .Name ); err != nil && ! apierrors .IsNotFound (err ) {
187- klog .Errorf ("Error deleting node %q for machine %q: %v" , m .Status .NodeRef .Name , m .Name , err )
188- return ctrl.Result {}, err
188+
189+ var deleteNodeErr error
190+ waitErr := wait .PollImmediate (2 * time .Second , 10 * time .Second , func () (bool , error ) {
191+ if deleteNodeErr = r .deleteNode (ctx , cluster , m .Status .NodeRef .Name ); deleteNodeErr != nil && ! apierrors .IsNotFound (deleteNodeErr ) {
192+ return false , nil
193+ }
194+ return true , nil
195+ })
196+ if waitErr != nil {
197+ // TODO: remove m.Name after #1203
198+ r .Log .Error (deleteNodeErr , "timed out deleting Machine's node, moving on" , "node" , m .Status .NodeRef .Name , "machine" , m .Name )
199+ r .recorder .Eventf (m , corev1 .EventTypeWarning , "FailedDeleteNode" , "error deleting Machine's node: %v" , deleteNodeErr )
189200 }
190201 }
191202
0 commit comments