Skip to content

Commit ff4adeb

Browse files
Fix labeler jobs for nodes with readonly FS (#74)
* Fix devcontainer DIND configuration for trixie See devcontainers/features#1482 for details Signed-off-by: Sébastien Masset <[email protected]> * Improve Docker build cache usage Signed-off-by: Sébastien Masset <[email protected]> * Rename logger in nodelabeler_controller setup Signed-off-by: Sébastien Masset <[email protected]> * Filter out explicitly labeled nodes in nodelabeler_controller setup Signed-off-by: Sébastien Masset <[email protected]> --------- Signed-off-by: Sébastien Masset <[email protected]>
1 parent a33e98e commit ff4adeb

3 files changed

Lines changed: 34 additions & 7 deletions

File tree

.devcontainer/devcontainer.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
"name": "Kubebuilder DevContainer",
33
"image": "docker.io/golang:1.26",
44
"features": {
5-
"ghcr.io/devcontainers/features/docker-in-docker:2": {},
5+
"ghcr.io/devcontainers/features/docker-in-docker:2": {
6+
"moby": false
7+
},
68
"ghcr.io/devcontainers/features/git:1": {}
79
},
810

Dockerfile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,14 @@ RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -a -o ma
2828
FROM alpine:3.23@sha256:25109184c71bdad752c8312a8623239686a9a2071e8825f20acb8f2198c3f659
2929
ARG TARGETARCH
3030
WORKDIR /
31+
# Create a non-root user with numeric UID
32+
RUN adduser -D -u 65532 -s /bin/sh manager
3133
# Install kubectl and other necessary tools
3234
RUN apk add --no-cache curl ca-certificates && \
3335
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/${TARGETARCH}/kubectl" && \
3436
chmod +x kubectl && \
3537
mv kubectl /usr/local/bin/
3638
COPY --from=builder /workspace/manager .
37-
# Create a non-root user with numeric UID
38-
RUN adduser -D -u 65532 -s /bin/sh manager
39-
USER 65532:65532
4039

40+
USER 65532:65532
4141
ENTRYPOINT ["/manager"]

internal/controller/nodelabeler_controller.go

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,13 @@ import (
1010
rbacv1 "k8s.io/api/rbac/v1"
1111
apierrors "k8s.io/apimachinery/pkg/api/errors"
1212
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
13+
"k8s.io/apimachinery/pkg/labels"
1314
"k8s.io/apimachinery/pkg/runtime"
1415
ctrl "sigs.k8s.io/controller-runtime"
16+
"sigs.k8s.io/controller-runtime/pkg/builder"
1517
"sigs.k8s.io/controller-runtime/pkg/client"
1618
logf "sigs.k8s.io/controller-runtime/pkg/log"
19+
"sigs.k8s.io/controller-runtime/pkg/predicate"
1720

1821
"github.com/kairos-io/kairos-operator/internal/utils"
1922
)
@@ -239,15 +242,37 @@ func (r *NodeLabelerReconciler) Reconcile(ctx context.Context, req ctrl.Request)
239242
}
240243

241244
func (r *NodeLabelerReconciler) SetupWithManager(mgr ctrl.Manager) error {
245+
setupLog := logf.Log.WithName("setup")
246+
242247
// Ensure RBAC resources are created when the controller starts
243248
namespace := r.getOperatorNamespace()
244249
if err := r.ensureServiceAccount(context.Background(), namespace); err != nil {
245-
log := logf.Log.WithName("setup")
246-
log.Error(err, "Failed to ensure service account and RBAC")
250+
setupLog.Error(err, "Failed to ensure service account and RBAC")
247251
os.Exit(1)
248252
}
249253

254+
// Define selector for nodes that should be ignored
255+
nodeSelector, err := labels.Parse("kairos.io/managed notin (false)")
256+
if err != nil {
257+
setupLog.Error(err, "Failed to parse label selector for nodes")
258+
os.Exit(1)
259+
}
260+
261+
log := logf.FromContext(context.TODO())
250262
return ctrl.NewControllerManagedBy(mgr).
251-
For(&corev1.Node{}).
263+
For(
264+
&corev1.Node{},
265+
// Filter out ignored nodes
266+
builder.WithPredicates(predicate.NewPredicateFuncs(func(obj client.Object) bool {
267+
node := obj.(*corev1.Node)
268+
269+
matches := nodeSelector.Matches(labels.Set(node.ObjectMeta.Labels))
270+
if !matches {
271+
log.V(1).Info("Ignoring explicitly labeled node", "node", node.ObjectMeta.Name)
272+
}
273+
274+
return matches
275+
})),
276+
).
252277
Complete(r)
253278
}

0 commit comments

Comments
 (0)