feat(): also handle deletes
This commit is contained in:
@@ -24,9 +24,9 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
go-version: '1.25.x'
|
go-version: '1.25.x'
|
||||||
- name: golangci-lint
|
- name: golangci-lint
|
||||||
uses: golangci/golangci-lint-action@v8
|
uses: golangci/golangci-lint-action@v9
|
||||||
with:
|
with:
|
||||||
version: v2.1
|
version: latest
|
||||||
- name: Test with the Go CLI
|
- name: Test with the Go CLI
|
||||||
run: go test ./... -v
|
run: go test ./... -v
|
||||||
- name: Run Gosec Security Scanner
|
- name: Run Gosec Security Scanner
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ func StartLeaseInformer(cfg *Config, stopCh <-chan struct{}) error {
|
|||||||
handleLease(newObj, cfg)
|
handleLease(newObj, cfg)
|
||||||
},
|
},
|
||||||
DeleteFunc: func(obj interface{}) {
|
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())
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func RemoveLabelFromNode(nodeName string) error {
|
func RemoveLabelFromNode(nodeName string, leaseName string, cfg *Config) error {
|
||||||
client, err := generateClient()
|
client, err := generateClient()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Could not generate client: %s", err.Error())
|
return fmt.Errorf("Could not generate client: %s", err.Error())
|
||||||
@@ -75,22 +75,19 @@ func RemoveLabelFromNode(nodeName string) error {
|
|||||||
"Caller": "LabelNode",
|
"Caller": "LabelNode",
|
||||||
}).Info(fmt.Sprintf("Removing Label from node %s", nodeName))
|
}).Info(fmt.Sprintf("Removing Label from node %s", nodeName))
|
||||||
|
|
||||||
labelKey := "metallb-speaker"
|
|
||||||
|
|
||||||
node, err := client.CoreV1().Nodes().Get(context.TODO(), nodeName, metav1.GetOptions{})
|
node, err := client.CoreV1().Nodes().Get(context.TODO(), nodeName, metav1.GetOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err.Error())
|
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{})
|
_, err = client.CoreV1().Nodes().Update(context.TODO(), node, metav1.UpdateOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err.Error())
|
panic(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("Label %s removed from node %s\n", labelKey, nodeName)
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user