Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 14 additions & 6 deletions internal/controller/hypervisor_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,9 @@ func (hv *HypervisorController) Reconcile(ctx context.Context, req ctrl.Request)
return ctrl.Result{}, hv.Status().Update(ctx, hypervisor)
}

// transport label/anotations changes
// transport label changes
before := hypervisor.DeepCopy()
updateLabelsAndAnnotations(&node.ObjectMeta, hypervisor)
if !reflect.DeepEqual(before, hypervisor) {
if transportLabels(&node.ObjectMeta, hypervisor) {
return ctrl.Result{}, hv.Patch(ctx, hypervisor, k8sclient.MergeFrom(before))
}

Expand All @@ -147,8 +146,10 @@ func (hv *HypervisorController) Reconcile(ctx context.Context, req ctrl.Request)
hypervisor.Spec.SkipTests = nodeLabels.Get(labelLifecycleMode) == "skip-tests"
}

// transport relevant labels
transportLabels(&node.ObjectMeta, hypervisor)
// transport relevant annotations
updateLabelsAndAnnotations(&node.ObjectMeta, hypervisor)
transportAggregatesAndTraits(&node.ObjectMeta, hypervisor)

if err := controllerutil.SetOwnerReference(node, hypervisor, hv.Scheme, controllerutil.WithBlockOwnerDeletion(true)); err != nil {
return ctrl.Result{}, fmt.Errorf("failed setting controller reference: %w", err)
Expand Down Expand Up @@ -187,8 +188,9 @@ func (hv *HypervisorController) SetupWithManager(mgr ctrl.Manager) error {
Complete(hv)
}

// updateLabelsAndAnnotations transports relevant annotations from the Node to the Hypervisor spec
func updateLabelsAndAnnotations(node *metav1.ObjectMeta, hypervisor *kvmv1.Hypervisor) {
// transportAggregatesAndTraits transports relevant aggregates/traits from the Node to the Hypervisor spec
func transportAggregatesAndTraits(node *metav1.ObjectMeta, hypervisor *kvmv1.Hypervisor) bool {
before := hypervisor.DeepCopy()
// transport aggregates annotation to hypervisor spec
if aggregates, found := node.Annotations[annotationAggregates]; found {
// split aggregates string
Expand All @@ -214,11 +216,17 @@ func updateLabelsAndAnnotations(node *metav1.ObjectMeta, hypervisor *kvmv1.Hyper
}
})
}
return !reflect.DeepEqual(before, hypervisor)
}

// transportLabels transports relevant labels from the Node to the Hypervisor spec
func transportLabels(node *metav1.ObjectMeta, hypervisor *kvmv1.Hypervisor) bool {
before := hypervisor.DeepCopy()
// transfer labels
for _, transferLabel := range transferLabels {
if label, ok := node.Labels[transferLabel]; ok {
hypervisor.Labels[transferLabel] = label
}
}
return !reflect.DeepEqual(before, hypervisor)
}
17 changes: 8 additions & 9 deletions internal/controller/hypervisor_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,9 @@ var _ = Describe("Hypervisor Controller", func() {
// pregenerate the resource
resource = &corev1.Node{
ObjectMeta: metav1.ObjectMeta{
Name: "other-node",
Labels: map[string]string{corev1.LabelTopologyZone: "test-zone"},
Name: "other-node",
Labels: map[string]string{corev1.LabelTopologyZone: "test-zone"},
Annotations: map[string]string{annotationCustomTraits: "test-trait"},
},
}
})
Expand Down Expand Up @@ -83,14 +84,11 @@ var _ = Describe("Hypervisor Controller", func() {
Expect(hypervisor.Labels).ToNot(BeNil())
Expect(hypervisor.Labels[corev1.LabelTopologyZone]).To(Equal("test-zone"))

By("Adding a aggregate annotation to the node and reconciling again")
By("Adding a label annotation to the node and reconciling again")
// Add an aggregate annotation to the node
annotedResource := resource.DeepCopy()
if annotedResource.Annotations == nil {
annotedResource.Annotations = map[string]string{}
}
annotedResource.Annotations[annotationCustomTraits] = "test-trait"
Expect(k8sClient.Patch(ctx, annotedResource, client.Merge)).To(Succeed())
labeledResource := resource.DeepCopy()
labeledResource.Labels["worker.garden.sapcloud.io/group"] = "new-group"
Expect(k8sClient.Patch(ctx, labeledResource, client.Merge)).To(Succeed())

_, err = hypervisorController.Reconcile(ctx, ctrl.Request{
NamespacedName: types.NamespacedName{Name: resource.Name},
Expand All @@ -104,6 +102,7 @@ var _ = Describe("Hypervisor Controller", func() {
Expect(updatedHypervisor.Name).To(Equal(resource.Name))
Expect(updatedHypervisor.Spec.CustomTraits).ToNot(BeNil())
Expect(updatedHypervisor.Spec.CustomTraits).To(ContainElement("test-trait"))
Expect(updatedHypervisor.Labels).To(HaveKeyWithValue("worker.garden.sapcloud.io/group", "new-group"))
})
})

Expand Down
Loading