mirror of
https://github.com/rancher/rke.git
synced 2025-04-27 19:25:44 +00:00
58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
package k8s
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
"k8s.io/api/core/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/client-go/kubernetes"
|
|
)
|
|
|
|
func DeleteNode(k8sClient *kubernetes.Clientset, nodeName string) error {
|
|
return k8sClient.CoreV1().Nodes().Delete(nodeName, &metav1.DeleteOptions{})
|
|
}
|
|
|
|
func GetNodeList(k8sClient *kubernetes.Clientset) (*v1.NodeList, error) {
|
|
return k8sClient.CoreV1().Nodes().List(metav1.ListOptions{})
|
|
}
|
|
|
|
func CordonUncordon(k8sClient *kubernetes.Clientset, nodeName string, cordoned bool) error {
|
|
updated := false
|
|
for retries := 0; retries <= 5; retries++ {
|
|
node, err := k8sClient.CoreV1().Nodes().Get(nodeName, metav1.GetOptions{})
|
|
if err != nil {
|
|
logrus.Debugf("Error getting node %s: %v", nodeName, err)
|
|
time.Sleep(time.Second * 5)
|
|
continue
|
|
}
|
|
if node.Spec.Unschedulable == cordoned {
|
|
logrus.Debugf("Node %s is already cordoned: %v", nodeName, cordoned)
|
|
return nil
|
|
}
|
|
node.Spec.Unschedulable = cordoned
|
|
_, err = k8sClient.CoreV1().Nodes().Update(node)
|
|
if err != nil {
|
|
logrus.Debugf("Error setting cordoned state for node %s: %v", nodeName, err)
|
|
time.Sleep(time.Second * 5)
|
|
continue
|
|
}
|
|
updated = true
|
|
}
|
|
if !updated {
|
|
return fmt.Errorf("Failed to set cordonded state for node: %s", nodeName)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func IsNodeReady(node v1.Node) bool {
|
|
nodeConditions := node.Status.Conditions
|
|
for _, condition := range nodeConditions {
|
|
if condition.Type == "Ready" && condition.Status == v1.ConditionTrue {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|