Skip to content

Commit e7c559c

Browse files
authored
Merge pull request #234 from yevgeny-shnaidman/yevgeny/enabling-status
Adding NFD CR status handling
2 parents fb27e29 + 3b0266c commit e7c559c

File tree

7 files changed

+1003
-13
lines changed

7 files changed

+1003
-13
lines changed

internal/controllers/nodefeaturediscovery_reconciler.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import (
4141
"sigs.k8s.io/node-feature-discovery-operator/internal/daemonset"
4242
"sigs.k8s.io/node-feature-discovery-operator/internal/deployment"
4343
"sigs.k8s.io/node-feature-discovery-operator/internal/job"
44+
"sigs.k8s.io/node-feature-discovery-operator/internal/status"
4445
)
4546

4647
const finalizerLabel = "nfd-finalizer"
@@ -51,8 +52,8 @@ type nodeFeatureDiscoveryReconciler struct {
5152
}
5253

5354
func NewNodeFeatureDiscoveryReconciler(client client.Client, deploymentAPI deployment.DeploymentAPI, daemonsetAPI daemonset.DaemonsetAPI,
54-
configmapAPI configmap.ConfigMapAPI, jobAPI job.JobAPI, scheme *runtime.Scheme) *nodeFeatureDiscoveryReconciler {
55-
helper := newNodeFeatureDiscoveryHelperAPI(client, deploymentAPI, daemonsetAPI, configmapAPI, jobAPI, scheme)
55+
configmapAPI configmap.ConfigMapAPI, jobAPI job.JobAPI, statusAPI status.StatusAPI, scheme *runtime.Scheme) *nodeFeatureDiscoveryReconciler {
56+
helper := newNodeFeatureDiscoveryHelperAPI(client, deploymentAPI, daemonsetAPI, configmapAPI, jobAPI, statusAPI, scheme)
5657
return &nodeFeatureDiscoveryReconciler{
5758
helper: helper,
5859
}
@@ -179,17 +180,19 @@ type nodeFeatureDiscoveryHelper struct {
179180
daemonsetAPI daemonset.DaemonsetAPI
180181
configmapAPI configmap.ConfigMapAPI
181182
jobAPI job.JobAPI
183+
statusAPI status.StatusAPI
182184
scheme *runtime.Scheme
183185
}
184186

185187
func newNodeFeatureDiscoveryHelperAPI(client client.Client, deploymentAPI deployment.DeploymentAPI, daemonsetAPI daemonset.DaemonsetAPI,
186-
configmapAPI configmap.ConfigMapAPI, jobAPI job.JobAPI, scheme *runtime.Scheme) nodeFeatureDiscoveryHelperAPI {
188+
configmapAPI configmap.ConfigMapAPI, jobAPI job.JobAPI, statusAPI status.StatusAPI, scheme *runtime.Scheme) nodeFeatureDiscoveryHelperAPI {
187189
return &nodeFeatureDiscoveryHelper{
188190
client: client,
189191
deploymentAPI: deploymentAPI,
190192
daemonsetAPI: daemonsetAPI,
191193
configmapAPI: configmapAPI,
192194
jobAPI: jobAPI,
195+
statusAPI: statusAPI,
193196
scheme: scheme,
194197
}
195198
}
@@ -345,5 +348,11 @@ func (nfdh *nodeFeatureDiscoveryHelper) handlePrune(ctx context.Context, nfdInst
345348
}
346349

347350
func (nfdh *nodeFeatureDiscoveryHelper) handleStatus(ctx context.Context, nfdInstance *nfdv1.NodeFeatureDiscovery) error {
348-
return nil
351+
conditions := nfdh.statusAPI.GetConditions(ctx, nfdInstance)
352+
if nfdh.statusAPI.AreConditionsEqual(nfdInstance.Status.Conditions, conditions) {
353+
return nil
354+
}
355+
unmodifiedCR := nfdInstance.DeepCopy()
356+
nfdInstance.Status.Conditions = conditions
357+
return nfdh.client.Status().Patch(ctx, nfdInstance, client.MergeFrom(unmodifiedCR))
349358
}

internal/controllers/nodefeaturediscovery_reconciler_test.go

Lines changed: 80 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import (
3939
"sigs.k8s.io/node-feature-discovery-operator/internal/daemonset"
4040
"sigs.k8s.io/node-feature-discovery-operator/internal/deployment"
4141
"sigs.k8s.io/node-feature-discovery-operator/internal/job"
42+
"sigs.k8s.io/node-feature-discovery-operator/internal/status"
4243
)
4344

4445
var _ = Describe("Reconcile", func() {
@@ -179,7 +180,7 @@ var _ = Describe("handleMaster", func() {
179180
clnt = client.NewMockClient(ctrl)
180181
mockDeployment = deployment.NewMockDeploymentAPI(ctrl)
181182

182-
nfdh = newNodeFeatureDiscoveryHelperAPI(clnt, mockDeployment, nil, nil, nil, scheme)
183+
nfdh = newNodeFeatureDiscoveryHelperAPI(clnt, mockDeployment, nil, nil, nil, nil, scheme)
183184
})
184185

185186
ctx := context.Background()
@@ -248,7 +249,7 @@ var _ = Describe("handleWorker", func() {
248249
mockDS = daemonset.NewMockDaemonsetAPI(ctrl)
249250
mockCM = configmap.NewMockConfigMapAPI(ctrl)
250251

251-
nfdh = newNodeFeatureDiscoveryHelperAPI(clnt, nil, mockDS, mockCM, nil, scheme)
252+
nfdh = newNodeFeatureDiscoveryHelperAPI(clnt, nil, mockDS, mockCM, nil, nil, scheme)
252253
})
253254

254255
ctx := context.Background()
@@ -344,7 +345,7 @@ var _ = Describe("handleTopology", func() {
344345
clnt = client.NewMockClient(ctrl)
345346
mockDS = daemonset.NewMockDaemonsetAPI(ctrl)
346347

347-
nfdh = newNodeFeatureDiscoveryHelperAPI(clnt, nil, mockDS, nil, nil, scheme)
348+
nfdh = newNodeFeatureDiscoveryHelperAPI(clnt, nil, mockDS, nil, nil, nil, scheme)
348349
})
349350

350351
ctx := context.Background()
@@ -429,7 +430,7 @@ var _ = Describe("handleGC", func() {
429430
clnt = client.NewMockClient(ctrl)
430431
mockDeployment = deployment.NewMockDeploymentAPI(ctrl)
431432

432-
nfdh = newNodeFeatureDiscoveryHelperAPI(clnt, mockDeployment, nil, nil, nil, scheme)
433+
nfdh = newNodeFeatureDiscoveryHelperAPI(clnt, mockDeployment, nil, nil, nil, nil, scheme)
433434
})
434435

435436
ctx := context.Background()
@@ -485,7 +486,7 @@ var _ = Describe("handleGC", func() {
485486

486487
var _ = Describe("hasFinalizer", func() {
487488
It("checking return status whether finalizer set or not", func() {
488-
nfdh := newNodeFeatureDiscoveryHelperAPI(nil, nil, nil, nil, nil, nil)
489+
nfdh := newNodeFeatureDiscoveryHelperAPI(nil, nil, nil, nil, nil, nil, nil)
489490

490491
By("finalizers was empty")
491492
nfdCR := nfdv1.NodeFeatureDiscovery{
@@ -529,7 +530,7 @@ var _ = Describe("setFinalizer", func() {
529530
BeforeEach(func() {
530531
ctrl = gomock.NewController(GinkgoT())
531532
clnt = client.NewMockClient(ctrl)
532-
nfdh = newNodeFeatureDiscoveryHelperAPI(clnt, nil, nil, nil, nil, nil)
533+
nfdh = newNodeFeatureDiscoveryHelperAPI(clnt, nil, nil, nil, nil, nil, nil)
533534
})
534535

535536
It("checking the return status of setFinalizer function", func() {
@@ -588,7 +589,7 @@ var _ = Describe("finalizeComponents", func() {
588589
mockDS = daemonset.NewMockDaemonsetAPI(ctrl)
589590
mockCM = configmap.NewMockConfigMapAPI(ctrl)
590591

591-
nfdh = newNodeFeatureDiscoveryHelperAPI(clnt, mockDeployment, mockDS, mockCM, nil, scheme)
592+
nfdh = newNodeFeatureDiscoveryHelperAPI(clnt, mockDeployment, mockDS, mockCM, nil, nil, scheme)
592593
})
593594

594595
ctx := context.Background()
@@ -663,7 +664,7 @@ var _ = Describe("removeFinalizer", func() {
663664
ctrl = gomock.NewController(GinkgoT())
664665
clnt = client.NewMockClient(ctrl)
665666

666-
nfdh = newNodeFeatureDiscoveryHelperAPI(clnt, nil, nil, nil, nil, scheme)
667+
nfdh = newNodeFeatureDiscoveryHelperAPI(clnt, nil, nil, nil, nil, nil, scheme)
667668
})
668669

669670
ctx := context.Background()
@@ -707,7 +708,7 @@ var _ = Describe("handlePrune", func() {
707708
BeforeEach(func() {
708709
ctrl = gomock.NewController(GinkgoT())
709710
mockJob = job.NewMockJobAPI(ctrl)
710-
nfdh = newNodeFeatureDiscoveryHelperAPI(nil, nil, nil, nil, mockJob, scheme)
711+
nfdh = newNodeFeatureDiscoveryHelperAPI(nil, nil, nil, nil, mockJob, nil, scheme)
711712
})
712713

713714
ctx := context.Background()
@@ -788,3 +789,73 @@ var _ = Describe("handlePrune", func() {
788789
Entry("job finished, its pod failed", true, false),
789790
)
790791
})
792+
793+
var _ = Describe("handleStatus", func() {
794+
var (
795+
ctrl *gomock.Controller
796+
clnt *client.MockClient
797+
mockStatus *status.MockStatusAPI
798+
nfdh nodeFeatureDiscoveryHelperAPI
799+
)
800+
801+
BeforeEach(func() {
802+
ctrl = gomock.NewController(GinkgoT())
803+
clnt = client.NewMockClient(ctrl)
804+
mockStatus = status.NewMockStatusAPI(ctrl)
805+
nfdh = newNodeFeatureDiscoveryHelperAPI(clnt, nil, nil, nil, nil, mockStatus, scheme)
806+
})
807+
808+
ctx := context.Background()
809+
nfdCR := nfdv1.NodeFeatureDiscovery{
810+
Status: nfdv1.NodeFeatureDiscoveryStatus{
811+
Conditions: []metav1.Condition{},
812+
},
813+
}
814+
newConditions := []metav1.Condition{}
815+
816+
It("conditions are equal, no status update is needed", func() {
817+
gomock.InOrder(
818+
mockStatus.EXPECT().GetConditions(ctx, &nfdCR).Return(newConditions),
819+
mockStatus.EXPECT().AreConditionsEqual(newConditions, nfdCR.Status.Conditions).Return(true),
820+
)
821+
822+
err := nfdh.handleStatus(ctx, &nfdCR)
823+
Expect(err).To(BeNil())
824+
})
825+
826+
It("conditions are not equal, status update is needed", func() {
827+
statusWriter := client.NewMockStatusWriter(ctrl)
828+
expectedNFD := nfdv1.NodeFeatureDiscovery{
829+
Status: nfdv1.NodeFeatureDiscoveryStatus{
830+
Conditions: newConditions,
831+
},
832+
}
833+
gomock.InOrder(
834+
mockStatus.EXPECT().GetConditions(ctx, &nfdCR).Return(newConditions),
835+
mockStatus.EXPECT().AreConditionsEqual(newConditions, nfdCR.Status.Conditions).Return(false),
836+
clnt.EXPECT().Status().Return(statusWriter),
837+
statusWriter.EXPECT().Patch(ctx, &expectedNFD, gomock.Any()).Return(nil),
838+
)
839+
840+
err := nfdh.handleStatus(ctx, &nfdCR)
841+
Expect(err).To(BeNil())
842+
})
843+
844+
It("conditions are not equal, status update failed", func() {
845+
statusWriter := client.NewMockStatusWriter(ctrl)
846+
expectedNFD := nfdv1.NodeFeatureDiscovery{
847+
Status: nfdv1.NodeFeatureDiscoveryStatus{
848+
Conditions: newConditions,
849+
},
850+
}
851+
gomock.InOrder(
852+
mockStatus.EXPECT().GetConditions(ctx, &nfdCR).Return(newConditions),
853+
mockStatus.EXPECT().AreConditionsEqual(newConditions, nfdCR.Status.Conditions).Return(false),
854+
clnt.EXPECT().Status().Return(statusWriter),
855+
statusWriter.EXPECT().Patch(ctx, &expectedNFD, gomock.Any()).Return(fmt.Errorf("some error")),
856+
)
857+
858+
err := nfdh.handleStatus(ctx, &nfdCR)
859+
Expect(err).To(HaveOccurred())
860+
})
861+
})

internal/status/mock_status.go

Lines changed: 148 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)