diff --git a/hosts/hosts.go b/hosts/hosts.go index 0bfa6311..952f417e 100644 --- a/hosts/hosts.go +++ b/hosts/hosts.go @@ -9,6 +9,7 @@ import ( "github.com/rancher/rke/k8s" "github.com/rancher/types/apis/cluster.cattle.io/v1" "github.com/sirupsen/logrus" + apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/client-go/kubernetes" ) @@ -56,13 +57,19 @@ func (h *Host) CleanUp() error { func DeleteNode(toDeleteHost *Host, kubeClient *kubernetes.Clientset) error { logrus.Infof("[hosts] Cordoning host [%s]", toDeleteHost.Address) - err := k8s.CordonUncordon(kubeClient, toDeleteHost.HostnameOverride, true) - if err != nil { + if _, err := k8s.GetNode(kubeClient, toDeleteHost.HostnameOverride); err != nil { + if apierrors.IsNotFound(err) { + logrus.Warnf("[hosts] Can't find node by name [%s]", toDeleteHost.Address) + return nil + } + return err + + } + if err := k8s.CordonUncordon(kubeClient, toDeleteHost.HostnameOverride, true); err != nil { return err } logrus.Infof("[hosts] Deleting host [%s] from the cluster", toDeleteHost.Address) - err = k8s.DeleteNode(kubeClient, toDeleteHost.HostnameOverride) - if err != nil { + if err := k8s.DeleteNode(kubeClient, toDeleteHost.HostnameOverride); err != nil { return err } logrus.Infof("[hosts] Successfully deleted host [%s] from the cluster", toDeleteHost.Address) diff --git a/k8s/node.go b/k8s/node.go index 1de6d41e..818cc006 100644 --- a/k8s/node.go +++ b/k8s/node.go @@ -18,6 +18,9 @@ func GetNodeList(k8sClient *kubernetes.Clientset) (*v1.NodeList, error) { return k8sClient.CoreV1().Nodes().List(metav1.ListOptions{}) } +func GetNode(k8sClient *kubernetes.Clientset, nodeName string) (*v1.Node, error) { + return k8sClient.CoreV1().Nodes().Get(nodeName, metav1.GetOptions{}) +} func CordonUncordon(k8sClient *kubernetes.Clientset, nodeName string, cordoned bool) error { updated := false for retries := 0; retries <= 5; retries++ {