feat(): also handle deletes
Some checks failed
Build and Test / Test (push) Failing after 3m48s
Build and Test / Build_Image_arm64 (push) Successful in 2m10s
Build and Test / Build_Image_amd64 (push) Has been cancelled

This commit is contained in:
2026-01-20 22:39:59 +01:00
parent a0593f7873
commit 5baad567ab
3 changed files with 42 additions and 9 deletions

View File

@@ -24,9 +24,9 @@ jobs:
with:
go-version: '1.25.x'
- name: golangci-lint
uses: golangci/golangci-lint-action@v8
uses: golangci/golangci-lint-action@v9
with:
version: v2.1
version: latest
- name: Test with the Go CLI
run: go test ./... -v
- name: Run Gosec Security Scanner

View File

@@ -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())
}
}

View File

@@ -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
}