Skip to content

Commit bcacbc7

Browse files
committed
Traits: Only reconcile after onboarding and before decomissioning
As with 6bb6c6 for the aggregates: Traits set by the operator may conflict with the testing, and decomissioning may make the resource-provider disappear. To avoid these controllers fighting, let's limit this controller to the actual active lifetime of the hypervisor. Unfortunately, that means we have to reconcile on every status update.
1 parent 7f23138 commit bcacbc7

File tree

2 files changed

+17
-11
lines changed

2 files changed

+17
-11
lines changed

internal/controller/traits_controller.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import (
3030
ctrl "sigs.k8s.io/controller-runtime"
3131
k8sclient "sigs.k8s.io/controller-runtime/pkg/client"
3232
logger "sigs.k8s.io/controller-runtime/pkg/log"
33-
"sigs.k8s.io/controller-runtime/pkg/predicate"
3433

3534
"github.com/gophercloud/gophercloud/v2"
3635
"github.com/gophercloud/gophercloud/v2/openstack/placement/v1/resourceproviders"
@@ -73,6 +72,11 @@ func (tc *TraitsController) Reconcile(ctx context.Context, req ctrl.Request) (ct
7372
return ctrl.Result{RequeueAfter: 10 * time.Second}, nil
7473
}
7574

75+
if !meta.IsStatusConditionFalse(hv.Status.Conditions, ConditionTypeOnboarding) ||
76+
meta.IsStatusConditionTrue(hv.Status.Conditions, kvmv1.ConditionTypeTerminating) {
77+
return ctrl.Result{}, nil
78+
}
79+
7680
customTraitsApplied := slices.Collect(func(yield func(string) bool) {
7781
for _, trait := range hv.Status.Traits {
7882
if strings.HasPrefix(trait, customPrefix) && !yield(trait) {
@@ -178,6 +182,5 @@ func (tc *TraitsController) SetupWithManager(mgr ctrl.Manager) error {
178182
return ctrl.NewControllerManagedBy(mgr).
179183
Named(TraitsControllerName).
180184
For(&kvmv1.Hypervisor{}).
181-
WithEventFilter(predicate.GenerationChangedPredicate{}).
182185
Complete(tc)
183186
}

internal/controller/traits_controller_test.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ var _ = Describe("TraitsController", func() {
6363
BeforeEach(func(ctx context.Context) {
6464
By("Setting up the OpenStack http mock server")
6565
fakeServer = testhelper.SetupHTTP()
66+
DeferCleanup(fakeServer.Teardown)
6667

6768
By("Creating the TraitsController")
6869
tc = &TraitsController{
@@ -89,19 +90,21 @@ var _ = Describe("TraitsController", func() {
8990
Status: v1.ConditionTrue,
9091
Reason: "UnitTest",
9192
})
93+
meta.SetStatusCondition(&hypervisor.Status.Conditions, v1.Condition{
94+
Type: ConditionTypeOnboarding,
95+
Status: v1.ConditionFalse,
96+
Reason: "UnitTest",
97+
})
9298
hypervisor.Status.Traits = []string{"CUSTOM_FOO", "HW_CPU_X86_VMX"}
9399
hypervisor.Status.HypervisorID = "1234"
94100
Expect(k8sClient.Status().Update(ctx, hypervisor)).To(Succeed())
95-
})
96-
97-
AfterEach(func() {
98-
By("Deleting the Hypervisor resource")
99-
hypervisor := &kvmv1.Hypervisor{}
100-
Expect(tc.Client.Get(ctx, types.NamespacedName{Name: "hv-test", Namespace: "default"}, hypervisor)).To(Succeed())
101-
Expect(tc.Client.Delete(ctx, hypervisor)).To(Succeed())
102101

103-
By("Tearing down the OpenStack http mock server")
104-
fakeServer.Teardown()
102+
DeferCleanup(func(ctx context.Context) {
103+
By("Deleting the Hypervisor resource")
104+
hypervisor := &kvmv1.Hypervisor{}
105+
Expect(tc.Client.Get(ctx, types.NamespacedName{Name: "hv-test", Namespace: "default"}, hypervisor)).To(Succeed())
106+
Expect(tc.Client.Delete(ctx, hypervisor)).To(Succeed())
107+
})
105108
})
106109

107110
// Tests

0 commit comments

Comments
 (0)