(feat): label node that has floating ip assigned
This commit is contained in:
@ -83,6 +83,10 @@ func AttachFloatingIpToNode(cfg *Config, server hcloud.Server) error {
|
||||
log.WithFields(log.Fields{
|
||||
"Caller": "AttachFloatingIpToNode",
|
||||
}).Info(fmt.Sprintf("Floating IP %s already assigned to Node %s", cfg.FloatingIPName, server.Name))
|
||||
err = LabelNode(server.Name)
|
||||
if err != nil {
|
||||
return errors.New(fmt.Sprintf("Could not label node: %s", err.Error()))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
@ -95,5 +99,11 @@ func AttachFloatingIpToNode(cfg *Config, server hcloud.Server) error {
|
||||
log.WithFields(log.Fields{
|
||||
"Caller": "AttachFloatingIpToNode",
|
||||
}).Info(fmt.Sprintf("Attached floating ip %s to node %s", cfg.FloatingIPName, server.Name))
|
||||
|
||||
err = LabelNode(server.Name)
|
||||
if err != nil {
|
||||
return errors.New(fmt.Sprintf("Could not label node: %s", err.Error()))
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
94
internal/kube.go
Normal file
94
internal/kube.go
Normal file
@ -0,0 +1,94 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
"k8s.io/client-go/rest"
|
||||
)
|
||||
|
||||
func generateClient() (kubernetes.Clientset, error) {
|
||||
log.WithFields(log.Fields{
|
||||
"Caller": "generateClient",
|
||||
}).Info(fmt.Sprintf("Generating k8s client"))
|
||||
config, err := rest.InClusterConfig()
|
||||
if err != nil {
|
||||
return kubernetes.Clientset{}, errors.New(fmt.Sprintf("Could not generate in cluster config: %s", err.Error()))
|
||||
}
|
||||
clientset, err := kubernetes.NewForConfig(config)
|
||||
if err != nil {
|
||||
return kubernetes.Clientset{}, errors.New(fmt.Sprintf("Could not generate clientset: %s", err.Error()))
|
||||
}
|
||||
return *clientset, nil
|
||||
}
|
||||
|
||||
func LabelNode(nodeName string) error {
|
||||
|
||||
client, err := generateClient()
|
||||
if err != nil {
|
||||
return errors.New(fmt.Sprintf("Could not generate client: %s", err.Error()))
|
||||
}
|
||||
|
||||
log.WithFields(log.Fields{
|
||||
"Caller": "LabelNode",
|
||||
}).Info(fmt.Sprintf("Trying to label node %s", nodeName))
|
||||
|
||||
labelKey := "metallb-speaker"
|
||||
labelValue := "true"
|
||||
|
||||
node, err := client.CoreV1().Nodes().Get(context.TODO(), nodeName, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
return errors.New(fmt.Sprintf("Could not find Kubernetes node: %s", err.Error()))
|
||||
}
|
||||
|
||||
if node.Labels == nil {
|
||||
node.Labels = make(map[string]string)
|
||||
}
|
||||
node.Labels[labelKey] = labelValue
|
||||
|
||||
_, err = client.CoreV1().Nodes().Update(context.TODO(), node, metav1.UpdateOptions{})
|
||||
if err != nil {
|
||||
return errors.New(fmt.Sprintf("Could not update node label: %s", err.Error()))
|
||||
}
|
||||
|
||||
log.WithFields(log.Fields{
|
||||
"Caller": "LabelNode",
|
||||
}).Info(fmt.Sprintf("Node %s labeled with %s=%s\n", nodeName, labelKey, labelValue))
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
// TODO: handle node change
|
||||
func RemoveLabelFromNode(nodeName string) error {
|
||||
client, err := generateClient()
|
||||
if err != nil {
|
||||
return errors.New(fmt.Sprintf("Could not generate client: %s", err.Error()))
|
||||
}
|
||||
|
||||
log.WithFields(log.Fields{
|
||||
"Caller": "LabelNode",
|
||||
}).Info(fmt.Sprintf("Removing Label from node %s", nodeName))
|
||||
|
||||
labelKey := "metallb-speaker"
|
||||
|
||||
node, err := client.CoreV1().Nodes().Get(context.TODO(), nodeName, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
|
||||
delete(node.Labels, labelKey)
|
||||
|
||||
_, err = client.CoreV1().Nodes().Update(context.TODO(), node, metav1.UpdateOptions{})
|
||||
if err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
|
||||
fmt.Printf("Label %s removed from node %s\n", labelKey, nodeName)
|
||||
|
||||
return nil
|
||||
}
|
@ -45,7 +45,7 @@ func GetIpFromMetrics(metrics *dto.MetricFamily) (string, error) {
|
||||
for _, label := range metric.Label {
|
||||
if *label.Name == "ip" {
|
||||
log.WithFields(log.Fields{
|
||||
"Caller": "Main",
|
||||
"Caller": "GetIpFromMetrics",
|
||||
}).Info(fmt.Sprintf("Found IP Label: %s", *label.Value))
|
||||
return *label.Value, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user