feat(): also handle deletes
This commit is contained in:
@@ -61,7 +61,7 @@ func StartLeaseInformer(cfg *Config, stopCh <-chan struct{}) error {
|
||||
handleLease(newObj, cfg)
|
||||
},
|
||||
DeleteFunc: func(obj interface{}) {
|
||||
// nothing to do on delete for now
|
||||
handleLeaseDelete(obj, cfg)
|
||||
},
|
||||
})
|
||||
|
||||
@@ -123,3 +123,39 @@ func handleLease(obj interface{}, cfg *Config) {
|
||||
log.WithFields(log.Fields{"Caller": "handleLease", "Node": node, "Lease": lease.Name}).Errorf("Error labeling node: %s", err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
func handleLeaseDelete(obj interface{}, cfg *Config) {
|
||||
lease, ok := obj.(*v1.Lease)
|
||||
if !ok {
|
||||
log.WithFields(log.Fields{"Caller": "handleLeaseDelete"}).Warn("Could not cast object to Lease")
|
||||
return
|
||||
}
|
||||
|
||||
if lease == nil {
|
||||
return
|
||||
}
|
||||
|
||||
if lease.Name == "" || len(lease.Name) < 1 {
|
||||
return
|
||||
}
|
||||
|
||||
if !strings.HasPrefix(lease.Name, "cilium-l2announce") {
|
||||
return
|
||||
}
|
||||
|
||||
node, err := GetNodeNameFromLease(*lease)
|
||||
if err != nil {
|
||||
log.WithFields(log.Fields{"Caller": "handleLeaseDelete", "Lease": lease.Name}).Errorf("Error parsing lease: %s", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if cfg.DryRun {
|
||||
log.WithFields(log.Fields{"Caller": "handleLeaseDelete"}).Infof("Dry run: would remove labels %s and %s from node %s (lease %s)", node, cfg.CiliumLabel, "cilium.uploadfilter24.eu/lease", lease.Name)
|
||||
return
|
||||
}
|
||||
|
||||
err = RemoveLabelFromNode(node, lease.Name, cfg)
|
||||
if err != nil {
|
||||
log.WithFields(log.Fields{"Caller": "handleLeaseDelete", "Node": node, "Lease": lease.Name}).Errorf("Error labeling node: %s", err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ func ApplyLabelToNode(client kubernetes.Interface, nodeName string, leaseName st
|
||||
return nil
|
||||
}
|
||||
|
||||
func RemoveLabelFromNode(nodeName string) error {
|
||||
func RemoveLabelFromNode(nodeName string, leaseName string, cfg *Config) error {
|
||||
client, err := generateClient()
|
||||
if err != nil {
|
||||
return fmt.Errorf("Could not generate client: %s", err.Error())
|
||||
@@ -75,22 +75,19 @@ func RemoveLabelFromNode(nodeName string) error {
|
||||
"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)
|
||||
delete(node.Labels, cfg.CiliumLabel)
|
||||
delete(node.Labels, "cilium.uploadfilter24.eu/lease")
|
||||
|
||||
_, 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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user