Skip to content

Commit

Permalink
Add linux os nodeSelector to handler by default (#950)
Browse files Browse the repository at this point in the history
Fix adding linux nodeSelector to handler pods.
Add a unit test verifying that default nodeSelectors
are configured.

Signed-off-by: Radim Hrazdil <[email protected]>
  • Loading branch information
rhrazdil authored Dec 21, 2021
1 parent e53fa86 commit ab6234b
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 10 deletions.
1 change: 1 addition & 0 deletions controllers/operator/nmstate_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ func (r *NMStateReconciler) applyHandler(instance *nmstatev1.NMState) error {
archAndCRNodeSelector = map[string]string{}
}
archAndCRNodeSelector["beta.kubernetes.io/arch"] = goruntime.GOARCH
archAndCRNodeSelector["kubernetes.io/os"] = "linux"

handlerTolerations := instance.Spec.Tolerations
if handlerTolerations == nil {
Expand Down
27 changes: 19 additions & 8 deletions controllers/operator/nmstate_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
"io/ioutil"
"os"
"path/filepath"
goruntime "runtime"
"strings"

. "github.com/onsi/ginkgo"
Expand All @@ -46,11 +47,12 @@ import (

var _ = Describe("NMState controller reconcile", func() {
var (
cl client.Client
reconciler NMStateReconciler
existingNMStateName = "nmstate"
handlerNodeSelector = map[string]string{"selector_1": "value_1", "selector_2": "value_2"}
handlerTolerations = []corev1.Toleration{
cl client.Client
reconciler NMStateReconciler
existingNMStateName = "nmstate"
defaultHandlerNodeSelector = map[string]string{"kubernetes.io/os": "linux", "beta.kubernetes.io/arch": goruntime.GOARCH}
customHandlerNodeSelector = map[string]string{"selector_1": "value_1", "selector_2": "value_2"}
handlerTolerations = []corev1.Toleration{
{
Effect: "NoSchedule",
Key: "node.kubernetes.io/special-toleration",
Expand Down Expand Up @@ -168,7 +170,7 @@ var _ = Describe("NMState controller reconcile", func() {
&nmstatev1.NMState{},
)
// set NodeSelector field in operator Spec
nmstate.Spec.NodeSelector = handlerNodeSelector
nmstate.Spec.NodeSelector = customHandlerNodeSelector
objs := []runtime.Object{&nmstate}
// Create a fake client to mock API calls.
cl = fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(objs...).Build()
Expand All @@ -178,12 +180,21 @@ var _ = Describe("NMState controller reconcile", func() {
Expect(err).ToNot(HaveOccurred())
Expect(result).To(Equal(ctrl.Result{}))
})
It("should add default NodeSelector to handler daemonset", func() {
ds := &appsv1.DaemonSet{}
handlerKey := types.NamespacedName{Namespace: handlerNamespace, Name: handlerPrefix + "-nmstate-handler"}
err := cl.Get(context.TODO(), handlerKey, ds)
Expect(err).ToNot(HaveOccurred())
for k, v := range defaultHandlerNodeSelector {
Expect(ds.Spec.Template.Spec.NodeSelector).To(HaveKeyWithValue(k, v))
}
})
It("should add NodeSelector to handler daemonset", func() {
ds := &appsv1.DaemonSet{}
handlerKey := types.NamespacedName{Namespace: handlerNamespace, Name: handlerPrefix + "-nmstate-handler"}
err := cl.Get(context.TODO(), handlerKey, ds)
Expect(err).ToNot(HaveOccurred())
for k, v := range handlerNodeSelector {
for k, v := range customHandlerNodeSelector {
Expect(ds.Spec.Template.Spec.NodeSelector).To(HaveKeyWithValue(k, v))
}
})
Expand All @@ -192,7 +203,7 @@ var _ = Describe("NMState controller reconcile", func() {
webhookKey := types.NamespacedName{Namespace: handlerNamespace, Name: handlerPrefix + "-nmstate-webhook"}
err := cl.Get(context.TODO(), webhookKey, deployment)
Expect(err).ToNot(HaveOccurred())
for k, v := range handlerNodeSelector {
for k, v := range customHandlerNodeSelector {
Expect(deployment.Spec.Template.Spec.NodeSelector).ToNot(HaveKeyWithValue(k, v))
}
})
Expand Down
2 changes: 0 additions & 2 deletions deploy/handler/operator.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -190,8 +190,6 @@ spec:
name: {{template "handlerPrefix" .}}nmstate-handler
annotations:
description: kubernetes-nmstate-handler configures and presents node networking, reconciling declerative NNCP and reports with NNS and NNCE
nodeSelector:
kubernetes.io/os: linux
spec:
# Needed to force vlan filtering config with iproute commands until
# future nmstate/NM is in place.
Expand Down

0 comments on commit ab6234b

Please sign in to comment.